Source code for coscine.common
###############################################################################
# Coscine Python SDK
# Copyright (c) 2020-2023 RWTH Aachen University
# Licensed under the terms of the MIT License
# For more information on Coscine visit https://www.coscine.de/.
###############################################################################
"""
Provides common classes shared among multiple modules.
"""
from datetime import date, datetime
from isodate import parse_datetime
[docs]
class MaintenanceNotice:
"""
Models maintenance notices set in Coscine.
"""
_data: dict
@property
def title(self) -> str:
"""
The title or name of the maintenance notice.
"""
return self._data.get("displayName") or ""
@property
def link(self) -> str:
"""
The URL link to the detailed maintenance notice.
"""
return self._data.get("href") or ""
@property
def type(self) -> str:
"""
The type of maintenance.
"""
return self._data.get("type") or ""
@property
def body(self) -> str:
"""
The body or description of the notice.
"""
return self._data.get("body") or ""
@property
def starts_date(self) -> date:
"""
Date when the maintenance goes active.
"""
value: str = self._data.get("startsDate") or "1998-01-01"
return parse_datetime(value).date()
@property
def ends_date(self) -> date:
"""
Date when the maintenance ends.
"""
value = self._data.get("endsDate") or "1998-01-01"
return parse_datetime(value).date()
def __init__(self, data: dict) -> None:
self._data = data
def __str__(self) -> str:
return self.title
[docs]
class SearchResult:
"""
This class models the search results returned by Coscine upon
a search request.
"""
_data: dict
@property
def uri(self) -> str:
"""
Link to the result (i.e. a project or resource or file).
"""
return self._data.get("uri") or ""
@property
def type(self) -> str:
"""
The search category the result falls into (e.g. project).
"""
return self._data.get("type") or ""
@property
def source(self) -> str:
"""
The source text that matches in some way or another the search query.
"""
return self._data.get("source") or ""
def __init__(self, data: dict) -> None:
self._data = data
def __str__(self) -> str:
return self.uri
[docs]
class ApiToken:
"""
This class models the Coscine API token.
"""
_data: dict
@property
def id(self) -> str:
"""
Unique Coscine-internal identifier for the API token.
"""
return self._data.get("id") or ""
@property
def name(self) -> str:
"""
The name assigned to the API token by the creator upon creation.
"""
return self._data.get("name") or ""
@property
def created(self) -> date:
"""
Timestamp of when the API token was created.
"""
value = self._data.get("creationDate") or "1998-01-01"
return parse_datetime(value).date()
@property
def expires(self) -> date:
"""
Timestamp of when the API token will expire.
"""
value = self._data.get("expiryDate") or "1998-01-01"
return parse_datetime(value).date()
@property
def expired(self) -> bool:
"""
Evaluates to True if the API token is expired.
"""
return datetime.now().date() > self.expires
@property
def owner(self) -> str:
"""
Unique Coscine-internal user id of the owner of the API token.
"""
return self._data["owner"]["id"]
def __init__(self, data: dict) -> None:
self._data = data
def __str__(self) -> str:
return self.name
[docs]
class Language:
"""
Models the languages available in Coscine.
"""
_data: dict
@property
def id(self) -> str:
"""
Unique and constant Coscine internal identifier for
the respective language option.
"""
return self._data.get("id") or ""
@property
def name(self) -> str:
"""
The full name of the language option.
"""
return self._data.get("displayName") or ""
@property
def abbreviation(self) -> str:
"""
The abbreviated name of the language option.
"""
return self._data.get("abbreviation") or ""
def __init__(self, data: dict) -> None:
self._data = data
def __str__(self) -> str:
return self.name
[docs]
class AcademicTitle:
"""
Models the Academic Titles available in Coscine.
"""
_data: dict
@property
def id(self) -> str:
"""
Unique and constant Coscine internal identifier for
the respective Academic Title.
"""
return self._data.get("id") or ""
@property
def name(self) -> str:
"""
The name of the Academic Title, e.g. "Prof." or "Dr."
"""
return self._data.get("displayName") or ""
def __init__(self, data: dict) -> None:
self._data = data
def __str__(self) -> str:
return self.name
[docs]
class Discipline:
"""
Models the disciplines available in Coscine.
"""
_data: dict
@property
def id(self) -> str:
"""
The Coscine-internal unique identifier for the discipline.
"""
return self._data.get("id") or ""
@property
def uri(self) -> str:
"""
The uri of the discipline.
"""
return self._data.get("uri") or ""
@property
def name(self) -> str:
"""
The human-readable name of the discipline.
"""
return self._data.get("displayNameEn") or ""
def __init__(self, data: dict) -> None:
self._data = data
def __str__(self) -> str:
return self.name
[docs]
def serialize(self) -> dict:
"""
Returns the machine-readable representation of the discipline
data instance.
"""
return self._data
[docs]
class License:
"""
Models the licenses available in Coscine.
"""
_data: dict
@property
def id(self) -> str:
"""
The Coscine-internal unique identifier for the license.
"""
return self._data.get("id") or ""
@property
def name(self) -> str:
"""
The human-readable name of the license.
"""
return self._data.get("displayName") or ""
def __init__(self, data: dict) -> None:
self._data = data
def __str__(self) -> str:
return self.name
[docs]
def serialize(self) -> dict:
"""
Returns the machine-readable representation of the license
data instance.
"""
return self._data
[docs]
class Organization:
"""
Models organization information for organizations in Coscine.
"""
_data: dict
@property
def uri(self) -> str:
"""
The organization's ror uri.
"""
return self._data.get("uri") or ""
@property
def name(self) -> str:
"""
The full name of the organization.
"""
return self._data.get("displayName") or ""
@property
def email(self) -> str:
"""
Contact email address of the organization.
"""
return self._data.get("email") or ""
def __init__(self, data: dict) -> None:
self._data = data
def __str__(self) -> str:
return self.name
[docs]
def serialize(self) -> dict:
"""
Returns the machine-readable representation of the organization
data instance.
"""
return self._data
[docs]
class User:
"""
This class provides an interface around userdata in Coscine.
"""
_data: dict
@property
def id(self) -> str:
"""
The unique Coscine-internal user id for a user.
"""
return self._data.get("id") or ""
@property
def display_name(self) -> str:
"""
The full name of a Coscine user as displayed
in the Coscine web interface.
"""
return self._data.get("displayName") or ""
@property
def first_name(self) -> str:
"""
The first name of a Coscine user.
"""
return self._data.get("givenName") or ""
@property
def last_name(self) -> str:
"""
The family name of a Coscine user.
"""
return self._data.get("familyName") or ""
@property
def email(self) -> str | list[str]:
"""
The email address or list of email addresses of a user.
In case the user has not associated an email address with their
account 'None' is returned.
"""
if "email" in self._data:
return self._data.get("email") or ""
return self._data.get("emails") or []
@property
def title(self) -> AcademicTitle | None:
"""
The academic title of a user.
In case the user has not set a title in their user profile
'None' is returned.
"""
title = self._data.get("title")
if title is not None:
title = AcademicTitle(title)
return title
def __init__(self, data: dict) -> None:
self._data = data
def __str__(self) -> str:
return self.display_name
[docs]
class Visibility:
"""
Models the visibility settings available in Coscine.
"""
_data: dict
@property
def id(self) -> str:
"""
Coscine-internal identifier for the visibility setting.
"""
return self._data.get("id") or ""
@property
def name(self) -> str:
"""
Human-readable name of the visibility setting.
"""
return self._data.get("displayName") or ""
def __init__(self, data: dict) -> None:
self._data = data
def __str__(self) -> str:
return self.name
[docs]
def serialize(self) -> dict:
"""
Returns the machine-readable representation of the visibility
data instance.
"""
return self._data