Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Fetch /gsoc command data from Algolia instead of DB #712

Merged
merged 11 commits into from
Feb 4, 2025
9 changes: 0 additions & 9 deletions backend/apps/owasp/models/project.py
Original file line number Diff line number Diff line change
@@ -230,15 +230,6 @@ def bulk_save(projects, fields=None):
"""Bulk save projects."""
BulkSaveModel.bulk_save(Project, projects, fields=fields)

@staticmethod
def get_gsoc_projects(year, attributes=None):
"""Return GSoC projects."""
projects = Project.objects.filter(custom_tags__contains=[f"gsoc{year}"])
if attributes:
projects = projects.values(*attributes)

return projects

@staticmethod
def update_data(gh_repository, repository, save=True):
"""Update project data."""
8 changes: 4 additions & 4 deletions backend/apps/slack/commands/gsoc.py
Original file line number Diff line number Diff line change
@@ -18,8 +18,8 @@

def gsoc_handler(ack, command, client):
"""Slack /gsoc command handler."""
from apps.owasp.models.project import Project
from apps.slack.common.gsoc import GSOC_GENERAL_INFORMATION_BLOCKS
from apps.slack.utils import get_gsoc_projects

ack()
if not settings.SLACK_COMMANDS_ENABLED:
@@ -35,10 +35,10 @@ def gsoc_handler(ack, command, client):
elif command_text.isnumeric():
year = int(command_text)
if year in SUPPORTED_YEARS:
gsoc_projects = Project.get_gsoc_projects(year)
gsoc_projects = get_gsoc_projects(year)
gsoc_projects_markdown = f"{NL}".join(
f" • <{gp.nest_url}|{gp.owasp_name}>"
for gp in sorted(gsoc_projects, key=lambda p: p.owasp_name)
f" • <{gp['idx_url']}|{gp['idx_name']}>"
for gp in sorted(gsoc_projects, key=lambda p: p["idx_name"])
)
additional_info = []
blocks = [
17 changes: 17 additions & 0 deletions backend/apps/slack/utils.py
Original file line number Diff line number Diff line change
@@ -20,6 +20,23 @@ def escape(content):
return escape_html(content, quote=False)


@lru_cache
def get_gsoc_projects(year):
"""Get GSoC projects."""
from apps.owasp.api.search.project import get_projects

return get_projects(
attributes=["idx_name", "idx_url"],
query=f"gsoc{year}",
searchable_attributes=[
"idx_custom_tags",
"idx_languages",
"idx_tags",
"idx_topics",
],
)["hits"]


@lru_cache
def get_news_data(limit=10, timeout=30):
"""Get news data."""
14 changes: 8 additions & 6 deletions backend/tests/slack/commands/gsoc_test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from unittest.mock import MagicMock, Mock, patch
from unittest.mock import MagicMock, patch

import pytest
from django.conf import settings
@@ -68,16 +68,18 @@ def test_handler_responses(

def test_handler_with_projects(self, mock_slack_client):
"""Test handler when projects are found for a valid year."""
mock_project = Mock()
mock_project.nest_url = "https://owasp.org/www-project-bug-logging-tool/"
mock_project.owasp_name = "Test Project"
mock_projects = [mock_project]
mock_projects = [
{
"idx_name": "Test Project",
"idx_url": "https://owasp.org/www-project-bug-logging-tool/",
}
]

command = {"text": "2024", "user_id": "U123456"}
settings.SLACK_COMMANDS_ENABLED = True

with patch(
"apps.owasp.models.project.Project.get_gsoc_projects",
"apps.slack.utils.get_gsoc_projects",
return_value=mock_projects,
):
gsoc_handler(ack=MagicMock(), command=command, client=mock_slack_client)