Skip to content

Commit

Permalink
OpenConceptLab/ocl_issues#1788 | resolveReference operation to return…
Browse files Browse the repository at this point in the history
… resolved url registry entry relative URI as well
  • Loading branch information
snyaggarwal committed Mar 7, 2024
1 parent db9de9b commit 094c8e6
Show file tree
Hide file tree
Showing 8 changed files with 109 additions and 95 deletions.
6 changes: 3 additions & 3 deletions core/collections/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -825,7 +825,7 @@ def get_resource_queryset_from_system_and_valueset(self, resource_relation, syst
def resolve_system_version(self):
if self.system:
from core.sources.models import Source
version = Source.resolve_reference_expression(self.system, self.namespace, self.version)
version, _ = Source.resolve_reference_expression(self.system, self.namespace, self.version)
if version.id:
return version
return None
Expand All @@ -836,7 +836,7 @@ def resolve_valueset_versions(self):
if isinstance(self.valueset, list):
for valueset in self.valueset: # pylint: disable=not-an-iterable
if valueset:
version = Collection.resolve_reference_expression(valueset, self.namespace)
version, _ = Collection.resolve_reference_expression(valueset, self.namespace)
if version.id:
versions.append(version)
return versions
Expand Down Expand Up @@ -1129,7 +1129,7 @@ def add_references(self, references, index=True, is_adding_all=False, attempt_re
for system_version in compact(system_versions.split(',')):
_system = system_version.strip()
_cache_key = f"NONE-{_system}-NONE"
version = ConceptContainerModel.resolve_reference_expression(_system)
version, _ = ConceptContainerModel.resolve_reference_expression(_system)
_system_version_cache[_cache_key] = version
if version.id:
include_system_versions.append(version)
Expand Down
6 changes: 4 additions & 2 deletions core/collections/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1239,11 +1239,13 @@ def get_results(self):
from core.common.models import ConceptContainerModel
results = []
for expression in data:
instance = ConceptContainerModel.resolve_expression_to_version(expression)
instance, registry_entry = ConceptContainerModel.resolve_expression_to_version(expression)
if instance:
result = {
**ReferenceExpressionResolveSerializer(instance).data,
'request': expression, 'resolution_url': instance.resolution_url
'request': expression,
'resolution_url': instance.resolution_url,
'url_registry_entry': get(registry_entry, 'relative_uri')
}
if instance.id:
from core.sources.serializers import SourceVersionListSerializer
Expand Down
11 changes: 6 additions & 5 deletions core/common/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -877,13 +877,14 @@ def resolve_expression_to_version(cls, expression):
namespace = None
version = None
instance = None
resolved_registry_entry = None
if isinstance(expression, dict) and get(expression, 'url'):
url = expression['url']
namespace = expression.get('namespace', None)
version = expression.get('version', None)
if url:
instance = cls.resolve_reference_expression(url, namespace, version)
return instance
instance, resolved_registry_entry = cls.resolve_reference_expression(url, namespace, version)
return instance, resolved_registry_entry

@classmethod
def resolve_reference_expression(cls, url, namespace=None, version=None):
Expand Down Expand Up @@ -918,9 +919,9 @@ def resolve_reference_expression(cls, url, namespace=None, version=None):
criteria = models.Q(is_active=True, retired=False)

from core.url_registry.models import URLRegistry
url_registry_entry = None
if is_canonical:
if Toggle.get('URL_REGISTRY_IN_RESOLVE_REFERENCE_TOGGLE'):
url_registry_entry = None
owner = None
if not is_global_namespace:
owner = SourceContainerMixin.get_object_from_namespace(namespace)
Expand All @@ -937,7 +938,7 @@ def resolve_reference_expression(cls, url, namespace=None, version=None):
owner = url_registry_entry.namespace_owner

if instance or not url_registry_entry or not url_registry_entry.namespace or not owner:
return cls.resolve_repo(instance, version, is_canonical, resolution_url)
return cls.resolve_repo(instance, version, is_canonical, resolution_url), url_registry_entry

criteria &= models.Q(
canonical_url=resolution_url, **{
Expand All @@ -951,7 +952,7 @@ def resolve_reference_expression(cls, url, namespace=None, version=None):
criteria &= models.Q(uri=resolution_url)

from core.repos.models import Repository
return cls.resolve_repo(Repository.get(criteria), version, is_canonical, resolution_url)
return cls.resolve_repo(Repository.get(criteria), version, is_canonical, resolution_url), url_registry_entry

@classmethod
def resolve_repo(cls, instance, version, is_canonical, resolution_url):
Expand Down
2 changes: 1 addition & 1 deletion core/concepts/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1019,7 +1019,7 @@ def get_hierarchy_path(self):
@staticmethod
def __get_omit_from_version(omit_if_exists_in):
if omit_if_exists_in:
omit_from_version = ConceptContainerModel.resolve_expression_to_version(omit_if_exists_in)
omit_from_version, _ = ConceptContainerModel.resolve_expression_to_version(omit_if_exists_in)
if omit_from_version.id:
return omit_from_version

Expand Down
2 changes: 1 addition & 1 deletion core/concepts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ def _set_source_versions(self):
from core.sources.models import Source
source_versions = []
for version_url in compact((self.request.query_params.dict().get('source_version', '')).split(',')):
source_version = Source.resolve_expression_to_version(version_url)
source_version, _ = Source.resolve_expression_to_version(version_url)
if source_version.id:
source_versions.append(source_version)
self._source_versions = source_versions
Expand Down
2 changes: 1 addition & 1 deletion core/mappings/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ def get_concept(expr):
return concept or {'mnemonic': expr.replace(to_parent_uri(expr), '').replace('concepts/', '').split('/')[0]}

def get_source(url):
source = Source.resolve_reference_expression(url, None, HEAD)
source, _ = Source.resolve_reference_expression(url, None, HEAD)
if source.id:
return source, source.versioned_object_url or source.resolution_url or url
return None, source.resolution_url or url
Expand Down
Loading

0 comments on commit 094c8e6

Please sign in to comment.