Module coscine.vocabulary

This file implements various classes for querying, parsing and interacting with data inside Coscine vocabularies.

Expand source code
###############################################################################
# Coscine Python SDK
# Copyright (c) 2018-2022 RWTH Aachen University
# Licensed under the terms of the MIT License
# #############################################################################
# Coscine, short for Collaborative Scientific Integration Environment is
# a platform for research data management (RDM).
# For more information on Coscine visit https://www.coscine.de/.
#
# Please note that this python module is open source software primarily
# developed and maintained by the scientific community. It is not
# an official service that RWTH Aachen provides support for.
###############################################################################

###############################################################################
# File description
###############################################################################

"""
This file implements various classes for querying, parsing and interacting
with data inside Coscine vocabularies.
"""

###############################################################################
# Dependencies
###############################################################################

from __future__ import annotations
from typing import TYPE_CHECKING, List, Tuple
if TYPE_CHECKING:
        from .client import Client
import os
import json
import pkgutil
import urllib.parse
from .defaults import LANGUAGES
from .form import FormField
from .graph import ApplicationProfile

###############################################################################
# Class
###############################################################################

class Vocabulary:
        """
        A wrapper around Coscine vocabularies. Vocabularies from Coscine
        do not necessarily all follow the same format, so this class takes
        care of abstracting the Vocabulary interface.
        The internal language of the Vocabulary changes automatically based
        on the Client language.

        Attributes
        -----------
        raw : dict
                Contains the raw dictionary data that is served by Coscine. Parsing
                for language is not taken into account.
        content : dict
                Contains the raw dictionary data that is served by Coscine
                for the language preset set in coscine.Client .
        """

        client: Client
        _data: dict

        @property
        def raw(self) -> dict: return self._data

        @property
        def content(self) -> dict:
                data = self.raw
                languages = self.languages()
                # Select appropriate language branch
                if self.client.language in languages:
                        data = data[self.client.language]
                elif len(languages) > 0:
                        data = data[languages[0]]
                return data

###############################################################################

        def __init__(self, client: Client, data: dict) -> None:
                self.client = client
                self._data = data

###############################################################################

        def __str__(self) -> str: return json.dumps(self.raw, indent=4)

###############################################################################

        def keys(self) -> List[str]:
                return [entry["name"] for entry in self.content]

###############################################################################

        def values(self) -> List[object]:
                return [entry["value"] for entry in self.content]

###############################################################################

        def items(self) -> List[Tuple[str, object]]:
                return zip(self.keys(), self.values())

###############################################################################

        def languages(self) -> List[str]:
                """
                Returns the languages supported by the dictionary.
                Some dictionaries may not contain a language setting and thus
                are valid for all languages. In that case an empty list is returned.
                """

                languages = []
                for lang in LANGUAGES:
                        if lang in self.raw:
                                languages.append(lang)
                return languages

###############################################################################

        def contains(self, key: object, reverse: bool = False) -> bool:
                """
                Determines whether the vocabulary contains the given key.

                Parameters
                ----------
                key : object (str, list or dict)
                        The key to look for in the vocabulary.
                reverse : bool
                        If set to true, key is assumed to be a value inside of the
                        vocabulary and thus all values are searched for key.
                """

                return self.lookup(key, reverse) is not None

###############################################################################

        def lookup(self, key: object, reverse: bool = False) -> object:
                """
                Looks up the counterpart of $key.

                Parameters
                ----------
                key : object (str, list or dict)
                        The key to look for in the vocabulary.
                reverse : bool
                        If set to true, key is assumed to be a value inside of the
                        vocabulary and thus all values are searched for key.
                """

                if reverse: return self._lookup_value(key)
                else: return self._lookup_key(key)

###############################################################################

        def _lookup_key(self, key: object) -> object:
                """
                Returns the value referenced by key
                """

                for entry in self.content:
                        if entry["name"] == key: return entry["value"]
                return None

###############################################################################

        def _lookup_value(self, value: object) -> object:
                """
                Returns the key referenced by value
                """

                if type(value) is list and len(value) == 1: value = value[0]
                for entry in self.content:
                        if type(value) is str:
                                if entry["value"] == value: return entry["name"]
                        elif type(value) is dict:
                                if self._is_subset(value, entry["value"]): return entry["name"]
                return None

###############################################################################

        @staticmethod
        def _is_subset(x: dict, y: dict) -> bool:
                """
                Check whether x is a subset of y
                """
                return x.items() <= y.items()

###############################################################################
# Class
###############################################################################

class VocabularyManager:
        """
        The VocabularyManager takes care of loading local InputForms and
        querying vocabularies from the Coscine servers. Local InputForms
        are stored in src/data in json format.
        It makes use of the Cache class thus making it more efficient at
        querying vocabularies.
        """

        client: Client
        _builtins: dict

###############################################################################

        def __init__(self, client: Client) -> None:
                """
                Initializes the VocabularyManager with a client instance for
                talking to the Coscine servers.
                """
                self.client = client
                self._builtins = {
                        "project": json.loads(
                                pkgutil.get_data(__name__, "data/project.json").decode("utf-8")
                        ),
                        "resource": json.loads(
                                pkgutil.get_data(__name__, "data/resource.json").decode("utf-8")
                        )
                }
                for graph in self._builtins: self._builtins[graph] = [
                        FormField(client, element) for element in self._builtins[graph]
                ]

###############################################################################

        def builtin(self, name: str) -> List[FormField]:
                """
                Returns a builtin InputForm as a list of FormFields.

                Parameters
                -----------
                name : str
                        Name of the builtin vocabulary (filename in src/data
                        without filetype).
                """
                if name not in self._builtins:
                        raise ValueError("Invalid builtin InputForm name!")
                return self._builtins[name]

###############################################################################

        def licenses(self, normalize: bool = True) -> Vocabulary:
                """
                Returns a dictionary containing a list of licenses
                available in Coscine.
                """

                uri = self.client.uri("Project", "License")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": []}
                        for entry in data:
                                normalized["en"].append({
                                        "name": entry["displayName"],
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

        def resource_types(self, normalize: bool = True) -> Vocabulary:
                """
                Retrieves a list of the available resource types in Coscine.
                Only enabled (currently usable) resource types are returned.
                """

                uri = self.client.uri("Resources", "ResourceType", "types")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": []}
                        for entry in data:
                                if not entry["isEnabled"]: continue
                                normalized["en"].append({
                                        "name": entry["displayName"],
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

        def application_profiles(self, normalize: bool = True) -> Vocabulary:
                """
                Returns a list of all available Coscine application profiles.
                """

                uri = self.client.uri("Metadata", "Metadata", "profiles")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": []}
                        for entry in data:
                                name = urllib.parse.urlparse(entry)[2]
                                name = os.path.relpath(name, "/coscine/ap/")
                                normalized["en"].append({
                                        "name": name,
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

        def application_profile(self, path: str) -> ApplicationProfile:
                """
                Retrieves a specific Coscine application profile.

                Parameters
                -----------
                path : str
                        Path/Url to the application profile.
                        (e.g. Resource.data["applicationProfile"]))
                id : str, default: None
                        Coscine resource ID.
                
                Returns
                -------
                ApplicationProfile
                        A parsed application profile.
                """

                uri = self.client.uri("Metadata", "Metadata", "profiles", path)
                data = self.client.static_request(uri)
                graph = json.dumps(data[0]["@graph"])
                return ApplicationProfile(graph)

###############################################################################

        def instance(self, link: str) -> Vocabulary:
                """
                Retrieves a data instance. Instances are always normalized.

                Parameters
                -----------
                link : str
                        link to the instance
                """

                uri = self.client.uri("Metadata", "Metadata", "instances", link)
                instance = self.client.static_request(uri)
                return Vocabulary(self.client, instance)

###############################################################################

        def organizations(self, normalize: bool = True, filter: str = "") -> Vocabulary:
                """
                Queries the organizations (e.g. 'RWTH Aachen University') available
                for selection in Coscine.
                """

                if filter:
                        raise NotImplementedError("Handling of filter argument not implemented!")
                else:
                        uri = self.client.uri("Organization", "Organization", "-", "ror")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": []}
                        for entry in data["data"]:
                                normalized["en"].append({
                                        "name": entry["displayName"],
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

        def visibility(self, normalize: bool = True) -> Vocabulary:
                """
                Returns the key-value mapping of the Coscine project visibility field.

                Returns
                -------
                dict
                        Key-value mapped Coscine project visibility field.
                """

                uri = self.client.uri("Project", "Visibility")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": []}
                        for entry in data:
                                normalized["en"].append({
                                        "name": entry["displayName"],
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

        def disciplines(self, normalize: bool = True) -> Vocabulary:
                """
                Queries the scientific disciplines available for selection in Coscine.

                Returns
                -------
                dict
                        Dictionary containing the disciplines.
                """

                uri = self.client.uri("Project", "Discipline")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": [], "de": []}
                        for entry in data:
                                normalized["en"].append({
                                        "name": entry["displayNameEn"],
                                        "value": entry
                                })
                                normalized["de"].append({
                                        "name": entry["displayNameDe"],
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

Classes

class Vocabulary (client: Client, data: dict)

A wrapper around Coscine vocabularies. Vocabularies from Coscine do not necessarily all follow the same format, so this class takes care of abstracting the Vocabulary interface. The internal language of the Vocabulary changes automatically based on the Client language.

Attributes

raw : dict
Contains the raw dictionary data that is served by Coscine. Parsing for language is not taken into account.
content : dict
Contains the raw dictionary data that is served by Coscine for the language preset set in coscine.Client .
Expand source code
class Vocabulary:
        """
        A wrapper around Coscine vocabularies. Vocabularies from Coscine
        do not necessarily all follow the same format, so this class takes
        care of abstracting the Vocabulary interface.
        The internal language of the Vocabulary changes automatically based
        on the Client language.

        Attributes
        -----------
        raw : dict
                Contains the raw dictionary data that is served by Coscine. Parsing
                for language is not taken into account.
        content : dict
                Contains the raw dictionary data that is served by Coscine
                for the language preset set in coscine.Client .
        """

        client: Client
        _data: dict

        @property
        def raw(self) -> dict: return self._data

        @property
        def content(self) -> dict:
                data = self.raw
                languages = self.languages()
                # Select appropriate language branch
                if self.client.language in languages:
                        data = data[self.client.language]
                elif len(languages) > 0:
                        data = data[languages[0]]
                return data

###############################################################################

        def __init__(self, client: Client, data: dict) -> None:
                self.client = client
                self._data = data

###############################################################################

        def __str__(self) -> str: return json.dumps(self.raw, indent=4)

###############################################################################

        def keys(self) -> List[str]:
                return [entry["name"] for entry in self.content]

###############################################################################

        def values(self) -> List[object]:
                return [entry["value"] for entry in self.content]

###############################################################################

        def items(self) -> List[Tuple[str, object]]:
                return zip(self.keys(), self.values())

###############################################################################

        def languages(self) -> List[str]:
                """
                Returns the languages supported by the dictionary.
                Some dictionaries may not contain a language setting and thus
                are valid for all languages. In that case an empty list is returned.
                """

                languages = []
                for lang in LANGUAGES:
                        if lang in self.raw:
                                languages.append(lang)
                return languages

###############################################################################

        def contains(self, key: object, reverse: bool = False) -> bool:
                """
                Determines whether the vocabulary contains the given key.

                Parameters
                ----------
                key : object (str, list or dict)
                        The key to look for in the vocabulary.
                reverse : bool
                        If set to true, key is assumed to be a value inside of the
                        vocabulary and thus all values are searched for key.
                """

                return self.lookup(key, reverse) is not None

###############################################################################

        def lookup(self, key: object, reverse: bool = False) -> object:
                """
                Looks up the counterpart of $key.

                Parameters
                ----------
                key : object (str, list or dict)
                        The key to look for in the vocabulary.
                reverse : bool
                        If set to true, key is assumed to be a value inside of the
                        vocabulary and thus all values are searched for key.
                """

                if reverse: return self._lookup_value(key)
                else: return self._lookup_key(key)

###############################################################################

        def _lookup_key(self, key: object) -> object:
                """
                Returns the value referenced by key
                """

                for entry in self.content:
                        if entry["name"] == key: return entry["value"]
                return None

###############################################################################

        def _lookup_value(self, value: object) -> object:
                """
                Returns the key referenced by value
                """

                if type(value) is list and len(value) == 1: value = value[0]
                for entry in self.content:
                        if type(value) is str:
                                if entry["value"] == value: return entry["name"]
                        elif type(value) is dict:
                                if self._is_subset(value, entry["value"]): return entry["name"]
                return None

###############################################################################

        @staticmethod
        def _is_subset(x: dict, y: dict) -> bool:
                """
                Check whether x is a subset of y
                """
                return x.items() <= y.items()

Class variables

var client : Client

Instance variables

var content : dict
Expand source code
@property
def content(self) -> dict:
        data = self.raw
        languages = self.languages()
        # Select appropriate language branch
        if self.client.language in languages:
                data = data[self.client.language]
        elif len(languages) > 0:
                data = data[languages[0]]
        return data
var raw : dict
Expand source code
@property
def raw(self) -> dict: return self._data

Methods

def contains(self, key: object, reverse: bool = False) ‑> bool

Determines whether the vocabulary contains the given key.

Parameters

key : object (str, list or dict)
The key to look for in the vocabulary.
reverse : bool
If set to true, key is assumed to be a value inside of the vocabulary and thus all values are searched for key.
Expand source code
def contains(self, key: object, reverse: bool = False) -> bool:
        """
        Determines whether the vocabulary contains the given key.

        Parameters
        ----------
        key : object (str, list or dict)
                The key to look for in the vocabulary.
        reverse : bool
                If set to true, key is assumed to be a value inside of the
                vocabulary and thus all values are searched for key.
        """

        return self.lookup(key, reverse) is not None
def items(self) ‑> List[Tuple[str, object]]
Expand source code
def items(self) -> List[Tuple[str, object]]:
        return zip(self.keys(), self.values())
def keys(self) ‑> List[str]
Expand source code
def keys(self) -> List[str]:
        return [entry["name"] for entry in self.content]
def languages(self) ‑> List[str]

Returns the languages supported by the dictionary. Some dictionaries may not contain a language setting and thus are valid for all languages. In that case an empty list is returned.

Expand source code
def languages(self) -> List[str]:
        """
        Returns the languages supported by the dictionary.
        Some dictionaries may not contain a language setting and thus
        are valid for all languages. In that case an empty list is returned.
        """

        languages = []
        for lang in LANGUAGES:
                if lang in self.raw:
                        languages.append(lang)
        return languages
def lookup(self, key: object, reverse: bool = False) ‑> object

Looks up the counterpart of $key.

Parameters

key : object (str, list or dict)
The key to look for in the vocabulary.
reverse : bool
If set to true, key is assumed to be a value inside of the vocabulary and thus all values are searched for key.
Expand source code
def lookup(self, key: object, reverse: bool = False) -> object:
        """
        Looks up the counterpart of $key.

        Parameters
        ----------
        key : object (str, list or dict)
                The key to look for in the vocabulary.
        reverse : bool
                If set to true, key is assumed to be a value inside of the
                vocabulary and thus all values are searched for key.
        """

        if reverse: return self._lookup_value(key)
        else: return self._lookup_key(key)
def values(self) ‑> List[object]
Expand source code
def values(self) -> List[object]:
        return [entry["value"] for entry in self.content]
class VocabularyManager (client: Client)

The VocabularyManager takes care of loading local InputForms and querying vocabularies from the Coscine servers. Local InputForms are stored in src/data in json format. It makes use of the Cache class thus making it more efficient at querying vocabularies.

Initializes the VocabularyManager with a client instance for talking to the Coscine servers.

Expand source code
class VocabularyManager:
        """
        The VocabularyManager takes care of loading local InputForms and
        querying vocabularies from the Coscine servers. Local InputForms
        are stored in src/data in json format.
        It makes use of the Cache class thus making it more efficient at
        querying vocabularies.
        """

        client: Client
        _builtins: dict

###############################################################################

        def __init__(self, client: Client) -> None:
                """
                Initializes the VocabularyManager with a client instance for
                talking to the Coscine servers.
                """
                self.client = client
                self._builtins = {
                        "project": json.loads(
                                pkgutil.get_data(__name__, "data/project.json").decode("utf-8")
                        ),
                        "resource": json.loads(
                                pkgutil.get_data(__name__, "data/resource.json").decode("utf-8")
                        )
                }
                for graph in self._builtins: self._builtins[graph] = [
                        FormField(client, element) for element in self._builtins[graph]
                ]

###############################################################################

        def builtin(self, name: str) -> List[FormField]:
                """
                Returns a builtin InputForm as a list of FormFields.

                Parameters
                -----------
                name : str
                        Name of the builtin vocabulary (filename in src/data
                        without filetype).
                """
                if name not in self._builtins:
                        raise ValueError("Invalid builtin InputForm name!")
                return self._builtins[name]

###############################################################################

        def licenses(self, normalize: bool = True) -> Vocabulary:
                """
                Returns a dictionary containing a list of licenses
                available in Coscine.
                """

                uri = self.client.uri("Project", "License")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": []}
                        for entry in data:
                                normalized["en"].append({
                                        "name": entry["displayName"],
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

        def resource_types(self, normalize: bool = True) -> Vocabulary:
                """
                Retrieves a list of the available resource types in Coscine.
                Only enabled (currently usable) resource types are returned.
                """

                uri = self.client.uri("Resources", "ResourceType", "types")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": []}
                        for entry in data:
                                if not entry["isEnabled"]: continue
                                normalized["en"].append({
                                        "name": entry["displayName"],
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

        def application_profiles(self, normalize: bool = True) -> Vocabulary:
                """
                Returns a list of all available Coscine application profiles.
                """

                uri = self.client.uri("Metadata", "Metadata", "profiles")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": []}
                        for entry in data:
                                name = urllib.parse.urlparse(entry)[2]
                                name = os.path.relpath(name, "/coscine/ap/")
                                normalized["en"].append({
                                        "name": name,
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

        def application_profile(self, path: str) -> ApplicationProfile:
                """
                Retrieves a specific Coscine application profile.

                Parameters
                -----------
                path : str
                        Path/Url to the application profile.
                        (e.g. Resource.data["applicationProfile"]))
                id : str, default: None
                        Coscine resource ID.
                
                Returns
                -------
                ApplicationProfile
                        A parsed application profile.
                """

                uri = self.client.uri("Metadata", "Metadata", "profiles", path)
                data = self.client.static_request(uri)
                graph = json.dumps(data[0]["@graph"])
                return ApplicationProfile(graph)

###############################################################################

        def instance(self, link: str) -> Vocabulary:
                """
                Retrieves a data instance. Instances are always normalized.

                Parameters
                -----------
                link : str
                        link to the instance
                """

                uri = self.client.uri("Metadata", "Metadata", "instances", link)
                instance = self.client.static_request(uri)
                return Vocabulary(self.client, instance)

###############################################################################

        def organizations(self, normalize: bool = True, filter: str = "") -> Vocabulary:
                """
                Queries the organizations (e.g. 'RWTH Aachen University') available
                for selection in Coscine.
                """

                if filter:
                        raise NotImplementedError("Handling of filter argument not implemented!")
                else:
                        uri = self.client.uri("Organization", "Organization", "-", "ror")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": []}
                        for entry in data["data"]:
                                normalized["en"].append({
                                        "name": entry["displayName"],
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

        def visibility(self, normalize: bool = True) -> Vocabulary:
                """
                Returns the key-value mapping of the Coscine project visibility field.

                Returns
                -------
                dict
                        Key-value mapped Coscine project visibility field.
                """

                uri = self.client.uri("Project", "Visibility")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": []}
                        for entry in data:
                                normalized["en"].append({
                                        "name": entry["displayName"],
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

###############################################################################

        def disciplines(self, normalize: bool = True) -> Vocabulary:
                """
                Queries the scientific disciplines available for selection in Coscine.

                Returns
                -------
                dict
                        Dictionary containing the disciplines.
                """

                uri = self.client.uri("Project", "Discipline")
                data = self.client.static_request(uri)
                if normalize:
                        normalized: dict = {"en": [], "de": []}
                        for entry in data:
                                normalized["en"].append({
                                        "name": entry["displayNameEn"],
                                        "value": entry
                                })
                                normalized["de"].append({
                                        "name": entry["displayNameDe"],
                                        "value": entry
                                })
                        data = normalized
                return Vocabulary(self.client, data)

Class variables

var client : Client

Methods

def application_profile(self, path: str) ‑> ApplicationProfile

Retrieves a specific Coscine application profile.

Parameters

path : str
Path/Url to the application profile. (e.g. Resource.data["applicationProfile"]))
id : str, default: None
Coscine resource ID.

Returns

ApplicationProfile
A parsed application profile.
Expand source code
def application_profile(self, path: str) -> ApplicationProfile:
        """
        Retrieves a specific Coscine application profile.

        Parameters
        -----------
        path : str
                Path/Url to the application profile.
                (e.g. Resource.data["applicationProfile"]))
        id : str, default: None
                Coscine resource ID.
        
        Returns
        -------
        ApplicationProfile
                A parsed application profile.
        """

        uri = self.client.uri("Metadata", "Metadata", "profiles", path)
        data = self.client.static_request(uri)
        graph = json.dumps(data[0]["@graph"])
        return ApplicationProfile(graph)
def application_profiles(self, normalize: bool = True) ‑> Vocabulary

Returns a list of all available Coscine application profiles.

Expand source code
def application_profiles(self, normalize: bool = True) -> Vocabulary:
        """
        Returns a list of all available Coscine application profiles.
        """

        uri = self.client.uri("Metadata", "Metadata", "profiles")
        data = self.client.static_request(uri)
        if normalize:
                normalized: dict = {"en": []}
                for entry in data:
                        name = urllib.parse.urlparse(entry)[2]
                        name = os.path.relpath(name, "/coscine/ap/")
                        normalized["en"].append({
                                "name": name,
                                "value": entry
                        })
                data = normalized
        return Vocabulary(self.client, data)
def builtin(self, name: str) ‑> List[FormField]

Returns a builtin InputForm as a list of FormFields.

Parameters

name : str
Name of the builtin vocabulary (filename in src/data without filetype).
Expand source code
def builtin(self, name: str) -> List[FormField]:
        """
        Returns a builtin InputForm as a list of FormFields.

        Parameters
        -----------
        name : str
                Name of the builtin vocabulary (filename in src/data
                without filetype).
        """
        if name not in self._builtins:
                raise ValueError("Invalid builtin InputForm name!")
        return self._builtins[name]
def disciplines(self, normalize: bool = True) ‑> Vocabulary

Queries the scientific disciplines available for selection in Coscine.

Returns

dict
Dictionary containing the disciplines.
Expand source code
def disciplines(self, normalize: bool = True) -> Vocabulary:
        """
        Queries the scientific disciplines available for selection in Coscine.

        Returns
        -------
        dict
                Dictionary containing the disciplines.
        """

        uri = self.client.uri("Project", "Discipline")
        data = self.client.static_request(uri)
        if normalize:
                normalized: dict = {"en": [], "de": []}
                for entry in data:
                        normalized["en"].append({
                                "name": entry["displayNameEn"],
                                "value": entry
                        })
                        normalized["de"].append({
                                "name": entry["displayNameDe"],
                                "value": entry
                        })
                data = normalized
        return Vocabulary(self.client, data)
def instance(self, link: str) ‑> Vocabulary

Retrieves a data instance. Instances are always normalized.

Parameters

link : str
link to the instance
Expand source code
def instance(self, link: str) -> Vocabulary:
        """
        Retrieves a data instance. Instances are always normalized.

        Parameters
        -----------
        link : str
                link to the instance
        """

        uri = self.client.uri("Metadata", "Metadata", "instances", link)
        instance = self.client.static_request(uri)
        return Vocabulary(self.client, instance)
def licenses(self, normalize: bool = True) ‑> Vocabulary

Returns a dictionary containing a list of licenses available in Coscine.

Expand source code
def licenses(self, normalize: bool = True) -> Vocabulary:
        """
        Returns a dictionary containing a list of licenses
        available in Coscine.
        """

        uri = self.client.uri("Project", "License")
        data = self.client.static_request(uri)
        if normalize:
                normalized: dict = {"en": []}
                for entry in data:
                        normalized["en"].append({
                                "name": entry["displayName"],
                                "value": entry
                        })
                data = normalized
        return Vocabulary(self.client, data)
def organizations(self, normalize: bool = True, filter: str = '') ‑> Vocabulary

Queries the organizations (e.g. 'RWTH Aachen University') available for selection in Coscine.

Expand source code
def organizations(self, normalize: bool = True, filter: str = "") -> Vocabulary:
        """
        Queries the organizations (e.g. 'RWTH Aachen University') available
        for selection in Coscine.
        """

        if filter:
                raise NotImplementedError("Handling of filter argument not implemented!")
        else:
                uri = self.client.uri("Organization", "Organization", "-", "ror")
        data = self.client.static_request(uri)
        if normalize:
                normalized: dict = {"en": []}
                for entry in data["data"]:
                        normalized["en"].append({
                                "name": entry["displayName"],
                                "value": entry
                        })
                data = normalized
        return Vocabulary(self.client, data)
def resource_types(self, normalize: bool = True) ‑> Vocabulary

Retrieves a list of the available resource types in Coscine. Only enabled (currently usable) resource types are returned.

Expand source code
def resource_types(self, normalize: bool = True) -> Vocabulary:
        """
        Retrieves a list of the available resource types in Coscine.
        Only enabled (currently usable) resource types are returned.
        """

        uri = self.client.uri("Resources", "ResourceType", "types")
        data = self.client.static_request(uri)
        if normalize:
                normalized: dict = {"en": []}
                for entry in data:
                        if not entry["isEnabled"]: continue
                        normalized["en"].append({
                                "name": entry["displayName"],
                                "value": entry
                        })
                data = normalized
        return Vocabulary(self.client, data)
def visibility(self, normalize: bool = True) ‑> Vocabulary

Returns the key-value mapping of the Coscine project visibility field.

Returns

dict
Key-value mapped Coscine project visibility field.
Expand source code
def visibility(self, normalize: bool = True) -> Vocabulary:
        """
        Returns the key-value mapping of the Coscine project visibility field.

        Returns
        -------
        dict
                Key-value mapped Coscine project visibility field.
        """

        uri = self.client.uri("Project", "Visibility")
        data = self.client.static_request(uri)
        if normalize:
                normalized: dict = {"en": []}
                for entry in data:
                        normalized["en"].append({
                                "name": entry["displayName"],
                                "value": entry
                        })
                data = normalized
        return Vocabulary(self.client, data)