Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 35 additions & 6 deletions src/discord_bot/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,40 @@
def __init__(self):
self.projects = get_json(url='https://app.lizardbyte.dev/dashboard/readthedocs/projects.json')
self.projects_options = []
# Track used values to prevent duplicates
used_values = set()
self.value_to_project_map = {}

counter = 0
for project in self.projects:
try:
parent_project = project['subproject_of']['name']
except (KeyError, TypeError):
parent_project = None

# Extract repository name to use as value
original_value = project['repository']['url'].rsplit('/', 1)[-1].rsplit('.git', 1)[0]
value = original_value

# make sure the value is unique
value = f"{original_value}-{counter}"

# Add to used values set
used_values.add(value)

# Store mapping of modified value to original project identifier
self.value_to_project_map[value] = original_value

self.projects_options.append(
discord.SelectOption(label=project['name'],
value=project['repository']['url'].rsplit('/', 1)[-1].rsplit('.git', 1)[0],
description=f"Subproject of {parent_project}" if parent_project else None)
discord.SelectOption(
label=project['name'],
value=value,
description=f"Subproject of {parent_project}" if parent_project else None
)
)

counter += 1


class DocsCommandView(discord.ui.View):
"""
Expand All @@ -62,8 +84,12 @@
self.docs_project = None
self.docs_version = None

# Create projects and store the mapping
projects_handler = DocsCommandDefaultProjects()
self.project_value_map = projects_handler.value_to_project_map

Check warning on line 89 in src/discord_bot/views.py

View check run for this annotation

Codecov / codecov/patch

src/discord_bot/views.py#L88-L89

Added lines #L88 - L89 were not covered by tests

# reset the first select menu because it remembers the last selected value
self.children[0].options = DocsCommandDefaultProjects().projects_options
self.children[0].options = projects_handler.projects_options

Check warning on line 92 in src/discord_bot/views.py

View check run for this annotation

Codecov / codecov/patch

src/discord_bot/views.py#L92

Added line #L92 was not covered by tests

# check selections completed
def check_completion_status(self) -> Tuple[bool, discord.Embed]:
Expand Down Expand Up @@ -175,7 +201,10 @@
child.options = [discord.SelectOption(label='0')]

if child == self.children[1]: # choose docs version
readthedocs = self.children[0].values[0]
selected_value = self.children[0].values[0]

Check warning on line 204 in src/discord_bot/views.py

View check run for this annotation

Codecov / codecov/patch

src/discord_bot/views.py#L204

Added line #L204 was not covered by tests

# Get the original project identifier from the mapping
readthedocs = self.project_value_map.get(selected_value, selected_value)

Check warning on line 207 in src/discord_bot/views.py

View check run for this annotation

Codecov / codecov/patch

src/discord_bot/views.py#L207

Added line #L207 was not covered by tests

versions = get_json(
url=f'https://app.lizardbyte.dev/dashboard/readthedocs/versions/{readthedocs}.json')
Expand All @@ -189,7 +218,7 @@
description=f"Docs for {version['slug']} {version['type']}"
))

child.options = options
child.options = options[:25] # limit to 25 options

Check warning on line 221 in src/discord_bot/views.py

View check run for this annotation

Codecov / codecov/patch

src/discord_bot/views.py#L221

Added line #L221 was not covered by tests

index += 1

Expand Down