Exemple #1
0
    def to_resource(self, payload: Dict) -> Resource:
        data_context = deepcopy(payload["@context"])
        if not isinstance(data_context, list):
            data_context = [data_context]
        if self.store_context in data_context:
            data_context.remove(self.store_context)
        if self.store_local_context in data_context:
            data_context.remove(self.store_local_context)
        data_context = data_context[0] if len(data_context) == 1 else data_context
        metadata = dict()
        data = dict()
        for k, v in payload.items():
            if k in self.metadata_context.terms.keys():
                metadata[k] = v
            else:
                data[k] = v

        if self.model_context and data_context == self.model_context.iri:
            resolved_ctx = self.model_context.document["@context"]
        else:
            resolved_ctx = recursive_resolve(data_context, self.resolve_context)
        data["@context"] = resolved_ctx
        resource = _from_jsonld_one(data)
        resource.context = data_context
        if len(metadata) > 0:
            self.sync_metadata(resource, metadata)
        return resource
Exemple #2
0
    def __init__(self, endpoint: str, org: str, prj: str, token: str, model_context: Context,
                 max_connection: int, searchendpoints: Dict, store_context:  str, store_local_context: str, namespace: str, project_property: str,
                 deprecated_property: bool, content_type: str, accept: str, files_upload_config: Dict,
                 files_download_config: Dict, **params):

        nexus.config.set_environment(endpoint)
        self.endpoint = endpoint
        self.organisation = org
        self.project = prj
        self.model_context = model_context
        self.context_cache: Dict = dict()
        self.max_connection = max_connection
        self.params = copy.deepcopy(params)
        self.store_context = store_context
        self.store_local_context = store_local_context
        self.namespace = namespace
        self.project_property = project_property
        self.deprecated_property = deprecated_property
        self.default_sparql_index = f"{self.namespace}defaultSparqlIndex"
        self.default_es_index = f"{self.namespace}defaultElasticSearchIndex"

        self.headers = {
            "Content-Type": content_type,
            "Accept": accept
        }

        sparql_config = searchendpoints['sparql'] if searchendpoints and "sparql" in searchendpoints else None
        elastic_config = searchendpoints['elastic'] if searchendpoints and "elastic" in searchendpoints else None

        self.headers_sparql = {
            "Content-Type": sparql_config['Content-Type'] if sparql_config and 'Content-Type' in sparql_config
            else "text/plain",
            "Accept": sparql_config['Accept'] if sparql_config and 'Accept' in sparql_config
            else "application/sparql-results+json"
        }
        self.headers_elastic = {
            "Content-Type": elastic_config['Content-Type'] if elastic_config and 'Content-Type' in elastic_config
            else "application/json",
            "Accept": elastic_config['Accept'] if elastic_config and 'Accept' in elastic_config
            else "application/json"
        }
        self.headers_upload = {
            "Accept": files_upload_config.pop("Accept"),
        }
        self.headers_download = {
            "Accept": files_download_config.pop("Accept")
        }

        if token is not None:
            nexus.config.set_token(token)
            self.headers["Authorization"] = "Bearer " + token
            self.headers_sparql["Authorization"] = "Bearer " + token
            self.headers_elastic["Authorization"] = "Bearer " + token
            self.headers_upload["Authorization"] = "Bearer " + token
            self.headers_download["Authorization"] = "Bearer " + token
        self.context = Context(self.get_project_context())

        self.url_base_files = "/".join((self.endpoint, "files"))
        self.url_files = "/".join((self.url_base_files, quote_plus(org), quote_plus(prj)))
        self.url_resources = "/".join((self.endpoint, "resources", quote_plus(org), quote_plus(prj)))
        self.url_resolver = "/".join((self.endpoint,"resolvers", quote_plus(org), quote_plus(prj)))
        self.metadata_context = Context(recursive_resolve(self.store_context, self.resolve_context), store_context)

        sparql_view = sparql_config['endpoint'] if sparql_config and "endpoint" in sparql_config else self.default_sparql_index
        elastic_view = elastic_config['endpoint'] if elastic_config and "endpoint" in elastic_config else self.default_es_index

        self.sparql_endpoint = dict()
        self.elastic_endpoint = dict()
        self.sparql_endpoint["endpoint"] = "/".join((self.endpoint, "views", quote_plus(org), quote_plus(prj), quote_plus(sparql_view), "sparql"))
        self.sparql_endpoint["type"] = "sparql"

        self.elastic_endpoint["endpoint"] = "/".join((self.endpoint, "views", quote_plus(org), quote_plus(prj), quote_plus(elastic_view), "_search"))
        self.elastic_endpoint["type"] = "elastic"

        # The following code is for async to work on jupyter notebooks
        try:
            asyncio.get_event_loop()
            nest_asyncio.apply()
        except RuntimeError:
            pass