From a1ce0cf04efd6cf94e5c45c4a767af0066c76441 Mon Sep 17 00:00:00 2001 From: tdruez <489057+tdruez@users.noreply.github.com> Date: Thu, 4 Jul 2024 13:12:58 +0400 Subject: [PATCH] Refactor BaseService to take a dataspace in place of user #94 (#142) * Refactor BaseService to take a dataspace in place of user #94 This change is required to call integration in the context of a scheduler where only Dataspace instances are available, not a user. Signed-off-by: tdruez * Fix an issue with inject_scan_data on Component instances Signed-off-by: tdruez --------- Signed-off-by: tdruez --- component_catalog/api.py | 16 +++--- component_catalog/forms.py | 2 +- component_catalog/models.py | 2 +- component_catalog/tests/test_scancodeio.py | 10 ++-- component_catalog/tests/test_views.py | 6 +-- component_catalog/views.py | 58 ++++++++++++---------- dejacode_toolkit/__init__.py | 9 ++-- dejacode_toolkit/purldb.py | 4 +- dejacode_toolkit/scancodeio.py | 4 +- dje/tasks.py | 5 +- dje/views.py | 10 ++-- product_portfolio/forms.py | 2 +- product_portfolio/importers.py | 2 +- product_portfolio/views.py | 35 +++++++------ purldb/tests/test_purldb_toolkit.py | 2 +- purldb/views.py | 9 ++-- 16 files changed, 97 insertions(+), 79 deletions(-) diff --git a/component_catalog/api.py b/component_catalog/api.py index c7064531..f19f71a7 100644 --- a/component_catalog/api.py +++ b/component_catalog/api.py @@ -687,6 +687,7 @@ class Meta: def create(self, validated_data): """Collect data, purl, and submit scan if `collect_data` is provided.""" user = self.context["request"].user + dataspace = user.dataspace collect_data = validated_data.pop("collect_data", None) download_url = validated_data.get("download_url") @@ -706,14 +707,14 @@ def create(self, validated_data): package = super().create(validated_data) # Submit the scan if Package was properly created - scancodeio = ScanCodeIO(user) - if scancodeio.is_configured() and user.dataspace.enable_package_scanning: + scancodeio = ScanCodeIO(dataspace) + if scancodeio.is_configured() and dataspace.enable_package_scanning: # Ensure the task is executed after the transaction is successfully committed transaction.on_commit( lambda: tasks.scancodeio_submit_scan.delay( uris=download_url, user_uuid=user.uuid, - dataspace_uuid=user.dataspace.uuid, + dataspace_uuid=dataspace.uuid, ) ) @@ -804,7 +805,8 @@ class Meta: def collect_create_scan(download_url, user): - package_qs = Package.objects.filter(download_url=download_url, dataspace=user.dataspace) + dataspace = user.dataspace + package_qs = Package.objects.filter(download_url=download_url, dataspace=dataspace) if package_qs.exists(): return False @@ -819,12 +821,12 @@ def collect_create_scan(download_url, user): package = Package.create_from_data(user, package_data) - scancodeio = ScanCodeIO(user) - if scancodeio.is_configured() and user.dataspace.enable_package_scanning: + scancodeio = ScanCodeIO(dataspace) + if scancodeio.is_configured() and dataspace.enable_package_scanning: tasks.scancodeio_submit_scan.delay( uris=download_url, user_uuid=user.uuid, - dataspace_uuid=user.dataspace.uuid, + dataspace_uuid=dataspace.uuid, ) return package diff --git a/component_catalog/forms.py b/component_catalog/forms.py index 09d78e6e..e2c2cb9f 100644 --- a/component_catalog/forms.py +++ b/component_catalog/forms.py @@ -357,7 +357,7 @@ class Meta: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - scancodeio = ScanCodeIO(self.user) + scancodeio = ScanCodeIO(self.dataspace) self.submit_scan_enabled = all( [ self.is_addition, diff --git a/component_catalog/models.py b/component_catalog/models.py index c0fe3105..c333c55d 100644 --- a/component_catalog/models.py +++ b/component_catalog/models.py @@ -2420,7 +2420,7 @@ def get_purldb_entries(self, user, max_request_call=0, timeout=None): if max_request_call and index >= max_request_call: return - packages_data = PurlDB(user).find_packages(payload, timeout) + packages_data = PurlDB(user.dataspace).find_packages(payload, timeout) if packages_data: return packages_data diff --git a/component_catalog/tests/test_scancodeio.py b/component_catalog/tests/test_scancodeio.py index 08670637..dae1135e 100644 --- a/component_catalog/tests/test_scancodeio.py +++ b/component_catalog/tests/test_scancodeio.py @@ -74,7 +74,7 @@ def test_scancodeio_submit_scan_task(self, mock_submit_scan, mock_request_head): @mock.patch("requests.sessions.Session.get") def test_scancodeio_fetch_scan_list(self, mock_session_get): - scancodeio = ScanCodeIO(self.basic_user) + scancodeio = ScanCodeIO(self.dataspace) self.assertIsNone(scancodeio.fetch_scan_list()) self.assertFalse(mock_session_get.called) @@ -108,7 +108,7 @@ def test_scancodeio_fetch_scan_list(self, mock_session_get): @mock.patch("requests.sessions.Session.get") def test_scancodeio_fetch_scan_info(self, mock_session_get): uri = "https://uri" - scancodeio = ScanCodeIO(self.basic_user) + scancodeio = ScanCodeIO(self.dataspace) scancodeio.fetch_scan_info(uri=uri) params = mock_session_get.call_args.kwargs["params"] @@ -131,7 +131,7 @@ def test_scancodeio_fetch_scan_info(self, mock_session_get): @mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.request_get") def test_scancodeio_find_project(self, mock_request_get): - scancodeio = ScanCodeIO(self.basic_user) + scancodeio = ScanCodeIO(self.dataspace) scancodeio.find_project(name="project_name") params = mock_request_get.call_args.kwargs["params"] expected = {"name": "project_name"} @@ -170,7 +170,7 @@ def test_scancodeio_find_project(self, mock_request_get): def test_scancodeio_update_from_scan(self, mock_fetch_scan_data, mock_get_scan_results): self.package1.license_expression = "" self.package1.save() - scancodeio = ScanCodeIO(self.basic_user) + scancodeio = ScanCodeIO(self.dataspace) mock_get_scan_results.return_value = None mock_fetch_scan_data.return_value = None @@ -279,7 +279,7 @@ def test_scancodeio_map_detected_package_data(self): @mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.request_get") def test_scancodeio_fetch_project_packages(self, mock_request_get): - scancodeio = ScanCodeIO(self.basic_user) + scancodeio = ScanCodeIO(self.dataspace) mock_request_get.return_value = None with self.assertRaises(Exception): diff --git a/component_catalog/tests/test_views.py b/component_catalog/tests/test_views.py index e698413e..403c1d9f 100644 --- a/component_catalog/tests/test_views.py +++ b/component_catalog/tests/test_views.py @@ -3131,7 +3131,7 @@ def test_vulnerablecode_get_plain_purls(self): self.assertEqual(["pkg:pypi/django@2.1"], purls) def test_vulnerablecode_get_vulnerable_purls(self): - vulnerablecode = VulnerableCode(self.basic_user) + vulnerablecode = VulnerableCode(self.dataspace) vulnerable_purls = vulnerablecode.get_vulnerable_purls(packages=[]) self.assertEqual([], vulnerable_purls) @@ -3155,7 +3155,7 @@ def test_vulnerablecode_get_vulnerable_purls(self): self.assertEqual(["pkg:pypi/django@2.1"], vulnerable_purls) def test_vulnerablecode_get_vulnerable_cpes(self): - vulnerablecode = VulnerableCode(self.basic_user) + vulnerablecode = VulnerableCode(self.dataspace) vulnerable_cpes = vulnerablecode.get_vulnerable_cpes(components=[]) self.assertEqual([], vulnerable_cpes) @@ -3187,7 +3187,7 @@ def test_vulnerablecode_get_vulnerable_cpes(self): @mock.patch("dejacode_toolkit.vulnerablecode.VulnerableCode.request_get") def test_vulnerablecode_get_vulnerabilities_cache(self, mock_request_get): - vulnerablecode = VulnerableCode(self.basic_user) + vulnerablecode = VulnerableCode(self.dataspace) self.package1.set_package_url("pkg:pypi/django@2.1") self.package1.save() diff --git a/component_catalog/views.py b/component_catalog/views.py index bcd8374b..22ed0fc2 100644 --- a/component_catalog/views.py +++ b/component_catalog/views.py @@ -255,7 +255,7 @@ class TabVulnerabilityMixin: def tab_vulnerabilities(self): matching_value = getattr(self.object, self.vulnerability_matching_field) dataspace = self.object.dataspace - vulnerablecode = VulnerableCode(self.request.user) + vulnerablecode = VulnerableCode(self.request.user.dataspace) # The display of vulnerabilities is controlled by the object Dataspace display_tab = all( @@ -479,7 +479,7 @@ def get_queryset(self): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - vulnerablecode = VulnerableCode(self.request.user) + vulnerablecode = VulnerableCode(self.request.user.dataspace) # The display of vulnerabilities is controlled by the objects Dataspace enable_vulnerabilities = all( @@ -1128,7 +1128,7 @@ def get_context_data(self, **kwargs): if self.request.user.has_perm("component_catalog.change_component"): context["add_to_component_form"] = AddMultipleToComponentForm(self.request) - vulnerablecode = VulnerableCode(self.request.user) + vulnerablecode = VulnerableCode(self.request.user.dataspace) # The display of vulnerabilities is controlled by the objects Dataspace enable_vulnerabilities = all( [ @@ -1438,11 +1438,12 @@ def tab_product_usage(self): return {"fields": [(None, productpackages, None, template)]} def tab_scan(self): - scancodeio = ScanCodeIO(self.request.user) + user_dataspace = self.request.user.dataspace + scancodeio = ScanCodeIO(user_dataspace) scan_tab_display_conditions = [ self.object.download_url, scancodeio.is_configured(), - self.request.user.dataspace.enable_package_scanning, + user_dataspace.enable_package_scanning, self.is_user_dataspace, ] @@ -1462,10 +1463,11 @@ def tab_scan(self): return {"fields": [(None, tab_context, None, template)]} def tab_purldb(self): + dataspace = self.request.user.dataspace display_tab_purldb = [ - PurlDB(self.request.user).is_configured(), + dataspace.enable_purldb_access, + PurlDB(dataspace).is_configured(), self.is_user_dataspace, - self.request.user.dataspace.enable_purldb_access, ] if not all(display_tab_purldb): @@ -1569,17 +1571,18 @@ def post(self, request, *args, **kwargs): @login_required def package_scan_view(request, dataspace, uuid): user = request.user - package = get_object_or_404(Package, uuid=uuid, dataspace=user.dataspace) + dataspace = user.dataspace + package = get_object_or_404(Package, uuid=uuid, dataspace=dataspace) download_url = package.download_url - scancodeio = ScanCodeIO(request.user) - if scancodeio.is_configured() and user.dataspace.enable_package_scanning: + scancodeio = ScanCodeIO(dataspace) + if scancodeio.is_configured() and dataspace.enable_package_scanning: if is_available(download_url): # Run the task synchronously to prevent from race condition. tasks.scancodeio_submit_scan( uris=download_url, user_uuid=user.uuid, - dataspace_uuid=user.dataspace.uuid, + dataspace_uuid=dataspace.uuid, ) scancode_msg = "The Package URL was submitted to ScanCode.io for scanning." messages.success(request, scancode_msg) @@ -1594,6 +1597,8 @@ def package_scan_view(request, dataspace, uuid): @require_POST def package_create_ajax_view(request): user = request.user + dataspace = user.dataspace + if not user.has_perm("component_catalog.add_package"): return JsonResponse({"error_message": "Permission denied"}, status=403) @@ -1618,13 +1623,13 @@ def package_create_ajax_view(request): redirect_url = reverse("component_catalog:package_list") len_created = len(created) - scancodeio = ScanCodeIO(request.user) - if scancodeio.is_configured() and user.dataspace.enable_package_scanning: + scancodeio = ScanCodeIO(dataspace) + if scancodeio.is_configured() and dataspace.enable_package_scanning: # The availability of the each `download_url` is checked in the task. tasks.scancodeio_submit_scan.delay( uris=[package.download_url for package in created if package.download_url], user_uuid=user.uuid, - dataspace_uuid=user.dataspace.uuid, + dataspace_uuid=dataspace.uuid, ) scan_msg = " and submitted to ScanCode.io for scanning" @@ -1672,10 +1677,11 @@ def component_create_ajax_view(request): @login_required def send_scan_data_as_file_view(request, project_uuid, filename): - if not request.user.dataspace.enable_package_scanning: + dataspace = request.user.dataspace + if not dataspace.enable_package_scanning: raise Http404 - scancodeio = ScanCodeIO(request.user) + scancodeio = ScanCodeIO(dataspace) scan_results_url = scancodeio.get_scan_results_url(project_uuid) scan_results = scancodeio.fetch_scan_data(scan_results_url) scan_summary_url = scancodeio.get_scan_summary_url(project_uuid) @@ -1694,10 +1700,11 @@ def send_scan_data_as_file_view(request, project_uuid, filename): @login_required def delete_scan_view(request, project_uuid): - if not request.user.dataspace.enable_package_scanning: + dataspace = request.user.dataspace + if not dataspace.enable_package_scanning: raise Http404 - scancodeio = ScanCodeIO(request.user) + scancodeio = ScanCodeIO(dataspace) scan_list = scancodeio.fetch_scan_list(uuid=str(project_uuid)) if not scan_list or scan_list.get("count") != 1: @@ -1736,7 +1743,7 @@ def get_queryset(self): "page": self.request.GET.get("page"), } - scancodeio = ScanCodeIO(user) + scancodeio = ScanCodeIO(dataspace) self.list_data = ( scancodeio.fetch_scan_list( dataspace=dataspace, @@ -1805,7 +1812,7 @@ def send_scan_notification(request, key): run = json_data.get("run") scan_status = run.get("status") - scancodeio = ScanCodeIO(user) + scancodeio = ScanCodeIO(dataspace) update_package_from_scan = all( [ @@ -1959,12 +1966,12 @@ def get_initial(self): return initial def get_entry_from_purldb(self): - user = self.request.user - purldb = PurlDB(user) + dataspace = self.request.user.dataspace + purldb = PurlDB(dataspace) is_purldb_enabled = all( [ purldb.is_configured(), - user.dataspace.enable_purldb_access, + dataspace.enable_purldb_access, ] ) @@ -2476,11 +2483,12 @@ def scan_status_fields(self, scan): def tab_scan(self): user = self.request.user - scancodeio = ScanCodeIO(user) + dataspace = user.dataspace + scancodeio = ScanCodeIO(dataspace) scan = scancodeio.get_scan_results( download_url=self.object.download_url, - dataspace=user.dataspace, + dataspace=dataspace, ) if not scan: diff --git a/dejacode_toolkit/__init__.py b/dejacode_toolkit/__init__.py index 7b121f7e..0a6e2122 100644 --- a/dejacode_toolkit/__init__.py +++ b/dejacode_toolkit/__init__.py @@ -43,10 +43,9 @@ class BaseService: api_key_field_name = None default_timeout = 5 - def __init__(self, user): - if not user: - raise - self.user = user + def __init__(self, dataspace): + if not dataspace: + raise ValueError("Dataspace must be provided.") self.service_url = None self.service_api_key = None @@ -54,7 +53,7 @@ def __init__(self, user): self.basic_auth_password = None try: - dataspace_configuration = user.dataspace.configuration + dataspace_configuration = dataspace.configuration except ObjectDoesNotExist: dataspace_configuration = None diff --git a/dejacode_toolkit/purldb.py b/dejacode_toolkit/purldb.py index 4dbf0d28..e7b62255 100644 --- a/dejacode_toolkit/purldb.py +++ b/dejacode_toolkit/purldb.py @@ -15,8 +15,8 @@ class PurlDB(BaseService): url_field_name = "purldb_url" api_key_field_name = "purldb_api_key" - def __init__(self, user): - super().__init__(user) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) self.package_api_url = f"{self.api_url}packages/" def get_package_list( diff --git a/dejacode_toolkit/scancodeio.py b/dejacode_toolkit/scancodeio.py index 95ff690e..7356f1de 100644 --- a/dejacode_toolkit/scancodeio.py +++ b/dejacode_toolkit/scancodeio.py @@ -28,8 +28,8 @@ class ScanCodeIO(BaseService): url_field_name = "scancodeio_url" api_key_field_name = "scancodeio_api_key" - def __init__(self, user): - super().__init__(user) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) self.project_api_url = f"{self.api_url}projects/" def get_scan_detail_url(self, project_uuid): diff --git a/dje/tasks.py b/dje/tasks.py index 724fd458..1783463f 100644 --- a/dje/tasks.py +++ b/dje/tasks.py @@ -107,9 +107,10 @@ def scancodeio_submit_scan(uris, user_uuid, dataspace_uuid): if not isinstance(uris, list): uris = [uris] + scancodeio = ScanCodeIO(user.dataspace) for uri in uris: if is_available(uri): - ScanCodeIO(user).submit_scan(uri, user_uuid, dataspace_uuid) + scancodeio.submit_scan(uri, user_uuid, dataspace_uuid) else: logger.info(f'uri="{uri}" is not reachable.') @@ -133,7 +134,7 @@ def scancodeio_submit_project(scancodeproject_uuid, user_uuid, pipeline_name): except ObjectDoesNotExist: return - scancodeio = ScanCodeIO(user) + scancodeio = ScanCodeIO(user.dataspace) # Create a Project instance on ScanCode.io without immediate execution of the # pipeline. This allows to get instant feedback from ScanCode.io about the Project diff --git a/dje/views.py b/dje/views.py index db20bb36..42fd1f7b 100644 --- a/dje/views.py +++ b/dje/views.py @@ -1847,9 +1847,11 @@ def get_context_data(self, **kwargs): } ) - context["include_purldb"] = all( - [user_dataspace.enable_purldb_access, PurlDB(user).is_available()] - ) + include_purldb_conditions = [ + user_dataspace.enable_purldb_access, + PurlDB(user_dataspace).is_available(), + ] + context["include_purldb"] = all(include_purldb_conditions) return context @@ -2298,7 +2300,7 @@ def get_integration_status(self, integration_class): is_available = False error_log = "" - integration = integration_class(user=self.request.user) + integration = integration_class(dataspace=self.request.user.dataspace) if integration.is_configured(): is_configured = True diff --git a/product_portfolio/forms.py b/product_portfolio/forms.py index 7b97e56c..edd173c4 100644 --- a/product_portfolio/forms.py +++ b/product_portfolio/forms.py @@ -911,7 +911,7 @@ def helper(self): return helper def get_project_data(self, project_name_or_uuid, user): - scancodeio = ScanCodeIO(user) + scancodeio = ScanCodeIO(user.dataspace) for field_name in ["name", "uuid"]: project_data = scancodeio.find_project(**{field_name: project_name_or_uuid}) if project_data: diff --git a/product_portfolio/importers.py b/product_portfolio/importers.py index d831f1bc..df1e45ec 100644 --- a/product_portfolio/importers.py +++ b/product_portfolio/importers.py @@ -646,7 +646,7 @@ def __init__(self, user, project_uuid, product, update_existing=False, scan_all_ self.update_existing = update_existing self.scan_all_packages = scan_all_packages - scancodeio = ScanCodeIO(user) + scancodeio = ScanCodeIO(user.dataspace) self.packages = scancodeio.fetch_project_packages(self.project_uuid) if not self.packages: raise Exception("Packages could not be fetched from ScanCode.io") diff --git a/product_portfolio/views.py b/product_portfolio/views.py index 90a9ee9c..10137323 100644 --- a/product_portfolio/views.py +++ b/product_portfolio/views.py @@ -514,6 +514,8 @@ def tab_imports(self): def get_context_data(self, **kwargs): user = self.request.user + dataspace = user.dataspace + if user.is_authenticated: self.object.mark_all_notifications_as_read(user) @@ -559,15 +561,15 @@ def get_context_data(self, **kwargs): ) if context["has_edit_productpackage"] or context["has_edit_productcomponent"]: - all_licenses = License.objects.scope(user.dataspace).filter(is_active=True) + all_licenses = License.objects.scope(dataspace).filter(is_active=True) add_client_data(self.request, license_data=all_licenses.data_for_expression_builder()) - scancodeio = ScanCodeIO(user) + scancodeio = ScanCodeIO(dataspace) include_scancodeio_features = all( [ scancodeio.is_configured(), user.is_superuser, - user.dataspace.enable_package_scanning, + dataspace.enable_package_scanning, context["is_user_dataspace"], ] ) @@ -579,7 +581,7 @@ def get_context_data(self, **kwargs): context["purldb_enabled"] = all( [ - PurlDB(user).is_configured(), + PurlDB(user.dataspace).is_configured(), user.dataspace.enable_purldb_access, context["is_user_dataspace"], ] @@ -668,7 +670,7 @@ def get_context_data(self, **kwargs): objects_by_feature = dict(sorted(objects_by_feature.items())) # 4. Inject the Scan data when activated - scancodeio = ScanCodeIO(user) + scancodeio = ScanCodeIO(dataspace) display_scan_features = all( [ scancodeio.is_configured(), @@ -692,10 +694,10 @@ def get_context_data(self, **kwargs): context["compliance_errors"] = True # 6. Add vulnerability data - vulnerablecode = VulnerableCode(user) + vulnerablecode = VulnerableCode(dataspace) enable_vulnerabilities = all( [ - user.dataspace.enable_vulnerablecodedb_access, + dataspace.enable_vulnerablecodedb_access, vulnerablecode.is_configured(), ] ) @@ -783,6 +785,8 @@ def inject_scan_data(scancodeio, feature_grouped, dataspace_uuid): for feature_label, productpackages in feature_grouped.items(): injected_productpackages = [] for productpackage in productpackages: + if not isinstance(productpackage, ProductPackage): + continue scan = scans_by_uri.get(productpackage.package.download_url) if scan: scan["download_result_url"] = get_scan_results_as_file_url(scan) @@ -890,7 +894,7 @@ def get_context_data(self, **kwargs): # Check the status of the "submitted" projects on ScanCode.io and update the # local ScanCodeProject instances accordingly. - scancodeio = ScanCodeIO(self.request.user) + scancodeio = ScanCodeIO(self.request.user.dataspace) for submitted_project in submitted_projects: self.synchronize(scancodeio=scancodeio, project=submitted_project) @@ -1568,13 +1572,14 @@ class ProductExportCycloneDXBOMView(BaseProductView, ExportCycloneDXBOMView): @login_required def scan_all_packages_view(request, dataspace, name, version=""): user = request.user + user_dataspace = user.dataspace - scancodeio = ScanCodeIO(user) + scancodeio = ScanCodeIO(user_dataspace) conditions = [ scancodeio.is_configured(), user.is_superuser, - user.dataspace.enable_package_scanning, - user.dataspace.name == dataspace, + user_dataspace.enable_package_scanning, + user_dataspace.name == dataspace, ] if not all(conditions): @@ -1917,7 +1922,7 @@ def license_summary_view(request, dataspace, name, version=""): @login_required def check_package_version_ajax_view(request, dataspace, name, version=""): user = request.user - purldb = PurlDB(user) + purldb = PurlDB(user.dataspace) purldb_enabled = all( [ @@ -2078,11 +2083,11 @@ def import_packages_from_scancodeio_view(request, key): @login_required def scancodeio_project_status_view(request, scancodeproject_uuid): template = "product_portfolio/scancodeio_project_status.html" - user = request.user - base_qs = ScanCodeProject.objects.scope(user.dataspace) + dataspace = request.user.dataspace + base_qs = ScanCodeProject.objects.scope(dataspace) scancode_project = get_object_or_404(base_qs, uuid=scancodeproject_uuid) - scancodeio = ScanCodeIO(user) + scancodeio = ScanCodeIO(dataspace) scan_detail_url = scancodeio.get_scan_detail_url(scancode_project.project_uuid) scan_data = scancodeio.fetch_scan_data(scan_detail_url) diff --git a/purldb/tests/test_purldb_toolkit.py b/purldb/tests/test_purldb_toolkit.py index e09f5539..bd2f4bb9 100644 --- a/purldb/tests/test_purldb_toolkit.py +++ b/purldb/tests/test_purldb_toolkit.py @@ -23,7 +23,7 @@ def setUp(self): @mock.patch("dejacode_toolkit.purldb.PurlDB.request_get") def test_purldb_toolkit_get_package_list(self, mock_request_get): - purldb = PurlDB(self.basic_user) + purldb = PurlDB(self.basic_user.dataspace) purldb.package_api_url = "/api/packages/" get_package_list = purldb.get_package_list diff --git a/purldb/views.py b/purldb/views.py index 1c383452..ab87f3e8 100644 --- a/purldb/views.py +++ b/purldb/views.py @@ -166,7 +166,7 @@ def get_queryset(self): filters_data = dict(self.filterset.data.items()) self.list_data = ( - PurlDB(self.request.user).get_package_list( + PurlDB(self.request.user.dataspace).get_package_list( search=self.request.GET.get("q", ""), page_size=self.paginate_by, page=self.request.GET.get("page", None), @@ -220,7 +220,7 @@ class PurlDBDetailsView( def get_object(self, queryset=None): uuid = self.kwargs.get(self.pk_url_kwarg) - obj = PurlDB(self.request.user).get_package(uuid=uuid) + obj = PurlDB(self.request.user.dataspace).get_package(uuid=uuid) if obj: return obj raise Http404 @@ -283,14 +283,15 @@ class PurlDBSearchTableView( def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) + dataspace = self.request.user.dataspace search_query = self.request.GET.get("q") - purldb_json = PurlDB(self.request.user).get_package_list(search_query, page_size=20) + purldb_json = PurlDB(dataspace).get_package_list(search_query, page_size=20) if not (purldb_json and purldb_json.get("results", None)): raise Http404 object_list = inject_license_expression_formatted( - dataspace=self.request.user.dataspace, + dataspace=dataspace, object_list=purldb_json["results"], )