Skip to content

Commit

Permalink
OpenConceptLab/ocl_issues#1732 | URL registry | search scopes and owner
Browse files Browse the repository at this point in the history
  • Loading branch information
snyaggarwal committed Jan 18, 2024
1 parent 6f67afb commit 669acfe
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 10 deletions.
22 changes: 19 additions & 3 deletions core/common/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -692,23 +692,39 @@ def __get_search_results(self, ignore_retired_filter=False, sort=True, highlight
is_authenticated = user.is_authenticated
username = user.username

is_members_view = self.get_view_name() in ['Organization Collection List', 'Organization Source List',
'Organization Repo List', 'Organization Url Registry List']
if self.is_owner_document_model():
kwargs_filters = self.kwargs.copy()
if self.user_is_self and is_authenticated:
kwargs_filters.pop('user_is_self', None)
kwargs_filters['user'] = username
else:
kwargs_filters = self.get_kwargs_filters()
if self.get_view_name() in [
'Organization Collection List', 'Organization Source List', 'Organization Repo List'
]:
if is_members_view:
kwargs_filters['ownerType'] = 'Organization'
kwargs_filters['owner'] = list(
user.organizations.values_list('mnemonic', flat=True)) or ['UNKNOWN-ORG-DUMMY']
elif self.user_is_self and is_authenticated:
kwargs_filters['ownerType'] = 'User'
kwargs_filters['owner'] = username

if self.is_url_registry_document() and not is_members_view:
kwargs_filters = self.kwargs.copy()
if self.user_is_self and is_authenticated:
kwargs_filters.pop('user_is_self', None)
kwargs_filters['ownerType'] = 'User'
kwargs_filters['owner'] = username
elif not kwargs_filters:
kwargs_filters['ownerUrl'] = '/'
else:
if 'org' in kwargs_filters:
kwargs_filters['ownerType'] = 'Organization'
kwargs_filters['owner'] = kwargs_filters.pop('org')
elif 'user' in kwargs_filters:
kwargs_filters['ownerType'] = 'User'
kwargs_filters['owner'] = kwargs_filters.pop('user')

for key, value in kwargs_filters.items():
attr = to_snake_case(key)
if isinstance(value, list):
Expand Down
4 changes: 4 additions & 0 deletions core/url_registry/documents.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,13 @@ class Index:
extras = fields.ObjectField(dynamic=True)
last_update = fields.DateField(attr='updated_at')
updated_by = fields.KeywordField(attr='updated_by.username')
owner = fields.KeywordField(attr='owner.mnemonic', normalizer='lowercase')
owner_type = fields.KeywordField(attr='owner_type')
owner_url = fields.KeywordField(attr='owner_url')

class Django:
model = URLRegistry
fields = ['is_active']

@staticmethod
def get_match_phrase_attrs():
Expand Down
5 changes: 5 additions & 0 deletions core/url_registry/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ def save(self, *args, **kwargs):
def owner(self):
return self.organization or self.user

@property
def owner_url(self):
owner = self.owner
return get(owner, 'uri') or '/'

@property
def owner_type(self):
return get(self.owner, 'resource_type') or None
Expand Down
4 changes: 2 additions & 2 deletions core/url_registry/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@


class URLRegistryBaseSerializer(ModelSerializer):
owner = CharField(read_only=True, source='owner.mnemonic')
owner = CharField(read_only=True, source='owner.mnemonic', allow_null=True)

class Meta:
model = URLRegistry
fields = ['id', 'name', 'url', 'namespace', 'owner', 'owner_type']
fields = ['id', 'name', 'url', 'namespace', 'owner', 'owner_type', 'owner_url']

def to_representation(self, instance):
data = super().to_representation(instance)
Expand Down
7 changes: 7 additions & 0 deletions core/url_registry/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,10 @@ def test_owner_type(self):
self.assertEqual(URLRegistry().owner_type, None)
self.assertEqual(URLRegistry(organization=org).owner_type, 'Organization')
self.assertEqual(URLRegistry(user=user).owner_type, 'User')

def test_owner_url(self):
org = Organization(uri='/orgs/foo/')
user = UserProfile(uri='/users/foo/')
self.assertEqual(URLRegistry().owner_url, '/')
self.assertEqual(URLRegistry(organization=org).owner_url, '/orgs/foo/')
self.assertEqual(URLRegistry(user=user).owner_url, '/users/foo/')
3 changes: 2 additions & 1 deletion core/url_registry/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class URLRegistryBaseView(BaseAPIView):
queryset = URLRegistry.objects.filter(is_active=True)
parent_resource = None
parent_resource_type = None
default_filters = {'is_active': True}

def set_parent_resource(self):
from core.orgs.models import Organization
Expand Down Expand Up @@ -71,7 +72,7 @@ def perform_create(self, serializer):
serializer.is_valid(raise_exception=True)


class UserOrgURLRegistriesView(URLRegistriesView):
class OrganizationURLRegistryListView(URLRegistriesView):
def get_queryset(self):
self.set_parent_resource()

Expand Down
4 changes: 2 additions & 2 deletions core/users/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from core.orgs import views as org_views
from . import views
from ..repos.views import OrganizationRepoListView
from ..url_registry.views import UserOrgURLRegistriesView
from ..url_registry.views import OrganizationURLRegistryListView

urlpatterns = [
re_path(r'^$', views.UserListView.as_view(), name='userprofile-list'),
Expand Down Expand Up @@ -75,7 +75,7 @@
),
re_path(
r'^(?P<user>' + NAMESPACE_PATTERN + ')/orgs/url-registry/$',
UserOrgURLRegistriesView.as_view(),
OrganizationURLRegistryListView.as_view(),
name='userprofile-organization-url-registry-list',
),
re_path(
Expand Down
4 changes: 2 additions & 2 deletions core/users/user_urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from core.common.constants import NAMESPACE_PATTERN
from core.orgs import views as orgs_views
from core.repos.views import OrganizationRepoListView
from core.url_registry.views import UserOrgURLRegistriesView
from core.url_registry.views import OrganizationURLRegistryListView
from core.users import views

extra_kwargs = {'user_is_self': True}
Expand Down Expand Up @@ -42,7 +42,7 @@
),
re_path(
r'^orgs/url-registry/$',
UserOrgURLRegistriesView.as_view(),
OrganizationURLRegistryListView.as_view(),
extra_kwargs,
name='user-organization-url-registry-list',
),
Expand Down

0 comments on commit 669acfe

Please sign in to comment.