Module piate.api.resources.collections

Expand source code
from dataclasses import dataclass, field
from typing import Optional, Dict, Generator

from dataclasses_json import dataclass_json, Undefined

from piate.api.resources import BaseResource
from piate.api.response import (
    MetadataType,
    Metadata,
    MetadataResource,
    create_paged_response_class_v2,
)
from piate.api.version import APIVersion


@dataclass_json(undefined=Undefined.RAISE)
@dataclass
class CollectionNameLanguage:
    self: MetadataResource
    code: str
    name: str
    is_official: bool


@dataclass_json(undefined=Undefined.RAISE)
@dataclass
class CollectionName:
    short_name: str
    full_name: str

    year: Optional[int] = field(default=None)
    language: Optional[CollectionNameLanguage] = field(default=None)

    institution_code: Optional[str] = field(default=None)
    institution_name: Optional[str] = field(default=None)


@dataclass_json(undefined=Undefined.RAISE)
@dataclass
class Collection:
    code: str
    id: int
    name: CollectionName
    description: str

    type: MetadataType
    metadata: Metadata
    self: MetadataResource
    update: MetadataResource
    delete: MetadataResource

    def compact(self) -> Dict:
        return dict(
            code=self.code, id=self.id, name=self.name, description=self.description
        )


CollectionPagedResponse = create_paged_response_class_v2(Collection)


class Collections(BaseResource):
    def pages(self) -> Generator[CollectionPagedResponse, None, None]:
        page = self._first_page()
        yield page

        while page.next is not None:
            page = CollectionPagedResponse.from_dict(
                self.session.get_metadata_resource(page.next)
            )
            yield page

    def _first_page(self) -> CollectionPagedResponse:
        response = self.session.get(
            "/collections",
            {"expand": "true", "offset": 0, "limit": 10},
            version=APIVersion.V2,
            do_auth=False,
        )
        return CollectionPagedResponse.from_dict(response)

Classes

class Collection (code: str, id: int, name: CollectionName, description: str, type: MetadataType, metadata: Metadata, self: MetadataResource, update: MetadataResource, delete: MetadataResource)

Collection(code: str, id: int, name: piate.api.resources.collections.CollectionName, description: str, type: piate.api.response.MetadataType, metadata: piate.api.response.Metadata, self: piate.api.response.MetadataResource, update: piate.api.response.MetadataResource, delete: piate.api.response.MetadataResource)

Expand source code
@dataclass_json(undefined=Undefined.RAISE)
@dataclass
class Collection:
    code: str
    id: int
    name: CollectionName
    description: str

    type: MetadataType
    metadata: Metadata
    self: MetadataResource
    update: MetadataResource
    delete: MetadataResource

    def compact(self) -> Dict:
        return dict(
            code=self.code, id=self.id, name=self.name, description=self.description
        )

Class variables

var code : str
var dataclass_json_config
var deleteMetadataResource
var description : str
var id : int
var metadataMetadata
var nameCollectionName
var selfMetadataResource
var typeMetadataType
var updateMetadataResource

Static methods

def from_dict(kvs: Union[dict, list, str, int, float, bool, ForwardRef(None)], *, infer_missing=False) ‑> ~A
Expand source code
@classmethod
def from_dict(cls: Type[A],
              kvs: Json,
              *,
              infer_missing=False) -> A:
    return _decode_dataclass(cls, kvs, infer_missing)
def from_json(s: Union[str, bytes, bytearray], *, parse_float=None, parse_int=None, parse_constant=None, infer_missing=False, **kw) ‑> ~A
Expand source code
@classmethod
def from_json(cls: Type[A],
              s: JsonData,
              *,
              parse_float=None,
              parse_int=None,
              parse_constant=None,
              infer_missing=False,
              **kw) -> A:
    kvs = json.loads(s,
                     parse_float=parse_float,
                     parse_int=parse_int,
                     parse_constant=parse_constant,
                     **kw)
    return cls.from_dict(kvs, infer_missing=infer_missing)
def schema(*, infer_missing: bool = False, only=None, exclude=(), many: bool = False, context=None, load_only=(), dump_only=(), partial: bool = False, unknown=None) ‑> dataclasses_json.mm.SchemaF[~A]
Expand source code
@classmethod
def schema(cls: Type[A],
           *,
           infer_missing: bool = False,
           only=None,
           exclude=(),
           many: bool = False,
           context=None,
           load_only=(),
           dump_only=(),
           partial: bool = False,
           unknown=None) -> SchemaType:
    Schema = build_schema(cls, DataClassJsonMixin, infer_missing, partial)

    if unknown is None:
        undefined_parameter_action = _undefined_parameter_action_safe(cls)
        if undefined_parameter_action is not None:
            # We can just make use of the same-named mm keywords
            unknown = undefined_parameter_action.name.lower()

    return Schema(only=only,
                  exclude=exclude,
                  many=many,
                  context=context,
                  load_only=load_only,
                  dump_only=dump_only,
                  partial=partial,
                  unknown=unknown)

Methods

def compact(self) ‑> Dict
Expand source code
def compact(self) -> Dict:
    return dict(
        code=self.code, id=self.id, name=self.name, description=self.description
    )
def to_dict(self, encode_json=False) ‑> Dict[str, Union[dict, list, str, int, float, bool, ForwardRef(None)]]
Expand source code
def to_dict(self, encode_json=False) -> Dict[str, Json]:
    return _asdict(self, encode_json=encode_json)
def to_json(self, *, skipkeys: bool = False, ensure_ascii: bool = True, check_circular: bool = True, allow_nan: bool = True, indent: Union[int, str, ForwardRef(None)] = None, separators: Tuple[str, str] = None, default: Callable = None, sort_keys: bool = False, **kw) ‑> str
Expand source code
def to_json(self,
            *,
            skipkeys: bool = False,
            ensure_ascii: bool = True,
            check_circular: bool = True,
            allow_nan: bool = True,
            indent: Optional[Union[int, str]] = None,
            separators: Tuple[str, str] = None,
            default: Callable = None,
            sort_keys: bool = False,
            **kw) -> str:
    return json.dumps(self.to_dict(encode_json=False),
                      cls=_ExtendedEncoder,
                      skipkeys=skipkeys,
                      ensure_ascii=ensure_ascii,
                      check_circular=check_circular,
                      allow_nan=allow_nan,
                      indent=indent,
                      separators=separators,
                      default=default,
                      sort_keys=sort_keys,
                      **kw)
class CollectionName (short_name: str, full_name: str, year: Optional[int] = None, language: Optional[CollectionNameLanguage] = None, institution_code: Optional[str] = None, institution_name: Optional[str] = None)

CollectionName(short_name: str, full_name: str, year: Optional[int] = None, language: Optional[piate.api.resources.collections.CollectionNameLanguage] = None, institution_code: Optional[str] = None, institution_name: Optional[str] = None)

Expand source code
@dataclass_json(undefined=Undefined.RAISE)
@dataclass
class CollectionName:
    short_name: str
    full_name: str

    year: Optional[int] = field(default=None)
    language: Optional[CollectionNameLanguage] = field(default=None)

    institution_code: Optional[str] = field(default=None)
    institution_name: Optional[str] = field(default=None)

Class variables

var dataclass_json_config
var full_name : str
var institution_code : Optional[str]
var institution_name : Optional[str]
var language : Optional[CollectionNameLanguage]
var short_name : str
var year : Optional[int]

Static methods

def from_dict(kvs: Union[dict, list, str, int, float, bool, ForwardRef(None)], *, infer_missing=False) ‑> ~A
Expand source code
@classmethod
def from_dict(cls: Type[A],
              kvs: Json,
              *,
              infer_missing=False) -> A:
    return _decode_dataclass(cls, kvs, infer_missing)
def from_json(s: Union[str, bytes, bytearray], *, parse_float=None, parse_int=None, parse_constant=None, infer_missing=False, **kw) ‑> ~A
Expand source code
@classmethod
def from_json(cls: Type[A],
              s: JsonData,
              *,
              parse_float=None,
              parse_int=None,
              parse_constant=None,
              infer_missing=False,
              **kw) -> A:
    kvs = json.loads(s,
                     parse_float=parse_float,
                     parse_int=parse_int,
                     parse_constant=parse_constant,
                     **kw)
    return cls.from_dict(kvs, infer_missing=infer_missing)
def schema(*, infer_missing: bool = False, only=None, exclude=(), many: bool = False, context=None, load_only=(), dump_only=(), partial: bool = False, unknown=None) ‑> dataclasses_json.mm.SchemaF[~A]
Expand source code
@classmethod
def schema(cls: Type[A],
           *,
           infer_missing: bool = False,
           only=None,
           exclude=(),
           many: bool = False,
           context=None,
           load_only=(),
           dump_only=(),
           partial: bool = False,
           unknown=None) -> SchemaType:
    Schema = build_schema(cls, DataClassJsonMixin, infer_missing, partial)

    if unknown is None:
        undefined_parameter_action = _undefined_parameter_action_safe(cls)
        if undefined_parameter_action is not None:
            # We can just make use of the same-named mm keywords
            unknown = undefined_parameter_action.name.lower()

    return Schema(only=only,
                  exclude=exclude,
                  many=many,
                  context=context,
                  load_only=load_only,
                  dump_only=dump_only,
                  partial=partial,
                  unknown=unknown)

Methods

def to_dict(self, encode_json=False) ‑> Dict[str, Union[dict, list, str, int, float, bool, ForwardRef(None)]]
Expand source code
def to_dict(self, encode_json=False) -> Dict[str, Json]:
    return _asdict(self, encode_json=encode_json)
def to_json(self, *, skipkeys: bool = False, ensure_ascii: bool = True, check_circular: bool = True, allow_nan: bool = True, indent: Union[int, str, ForwardRef(None)] = None, separators: Tuple[str, str] = None, default: Callable = None, sort_keys: bool = False, **kw) ‑> str
Expand source code
def to_json(self,
            *,
            skipkeys: bool = False,
            ensure_ascii: bool = True,
            check_circular: bool = True,
            allow_nan: bool = True,
            indent: Optional[Union[int, str]] = None,
            separators: Tuple[str, str] = None,
            default: Callable = None,
            sort_keys: bool = False,
            **kw) -> str:
    return json.dumps(self.to_dict(encode_json=False),
                      cls=_ExtendedEncoder,
                      skipkeys=skipkeys,
                      ensure_ascii=ensure_ascii,
                      check_circular=check_circular,
                      allow_nan=allow_nan,
                      indent=indent,
                      separators=separators,
                      default=default,
                      sort_keys=sort_keys,
                      **kw)
class CollectionNameLanguage (self: MetadataResource, code: str, name: str, is_official: bool)

CollectionNameLanguage(self: piate.api.response.MetadataResource, code: str, name: str, is_official: bool)

Expand source code
@dataclass_json(undefined=Undefined.RAISE)
@dataclass
class CollectionNameLanguage:
    self: MetadataResource
    code: str
    name: str
    is_official: bool

Class variables

var code : str
var dataclass_json_config
var is_official : bool
var name : str
var selfMetadataResource

Static methods

def from_dict(kvs: Union[dict, list, str, int, float, bool, ForwardRef(None)], *, infer_missing=False) ‑> ~A
Expand source code
@classmethod
def from_dict(cls: Type[A],
              kvs: Json,
              *,
              infer_missing=False) -> A:
    return _decode_dataclass(cls, kvs, infer_missing)
def from_json(s: Union[str, bytes, bytearray], *, parse_float=None, parse_int=None, parse_constant=None, infer_missing=False, **kw) ‑> ~A
Expand source code
@classmethod
def from_json(cls: Type[A],
              s: JsonData,
              *,
              parse_float=None,
              parse_int=None,
              parse_constant=None,
              infer_missing=False,
              **kw) -> A:
    kvs = json.loads(s,
                     parse_float=parse_float,
                     parse_int=parse_int,
                     parse_constant=parse_constant,
                     **kw)
    return cls.from_dict(kvs, infer_missing=infer_missing)
def schema(*, infer_missing: bool = False, only=None, exclude=(), many: bool = False, context=None, load_only=(), dump_only=(), partial: bool = False, unknown=None) ‑> dataclasses_json.mm.SchemaF[~A]
Expand source code
@classmethod
def schema(cls: Type[A],
           *,
           infer_missing: bool = False,
           only=None,
           exclude=(),
           many: bool = False,
           context=None,
           load_only=(),
           dump_only=(),
           partial: bool = False,
           unknown=None) -> SchemaType:
    Schema = build_schema(cls, DataClassJsonMixin, infer_missing, partial)

    if unknown is None:
        undefined_parameter_action = _undefined_parameter_action_safe(cls)
        if undefined_parameter_action is not None:
            # We can just make use of the same-named mm keywords
            unknown = undefined_parameter_action.name.lower()

    return Schema(only=only,
                  exclude=exclude,
                  many=many,
                  context=context,
                  load_only=load_only,
                  dump_only=dump_only,
                  partial=partial,
                  unknown=unknown)

Methods

def to_dict(self, encode_json=False) ‑> Dict[str, Union[dict, list, str, int, float, bool, ForwardRef(None)]]
Expand source code
def to_dict(self, encode_json=False) -> Dict[str, Json]:
    return _asdict(self, encode_json=encode_json)
def to_json(self, *, skipkeys: bool = False, ensure_ascii: bool = True, check_circular: bool = True, allow_nan: bool = True, indent: Union[int, str, ForwardRef(None)] = None, separators: Tuple[str, str] = None, default: Callable = None, sort_keys: bool = False, **kw) ‑> str
Expand source code
def to_json(self,
            *,
            skipkeys: bool = False,
            ensure_ascii: bool = True,
            check_circular: bool = True,
            allow_nan: bool = True,
            indent: Optional[Union[int, str]] = None,
            separators: Tuple[str, str] = None,
            default: Callable = None,
            sort_keys: bool = False,
            **kw) -> str:
    return json.dumps(self.to_dict(encode_json=False),
                      cls=_ExtendedEncoder,
                      skipkeys=skipkeys,
                      ensure_ascii=ensure_ascii,
                      check_circular=check_circular,
                      allow_nan=allow_nan,
                      indent=indent,
                      separators=separators,
                      default=default,
                      sort_keys=sort_keys,
                      **kw)
class Collections (session: Session)
Expand source code
class Collections(BaseResource):
    def pages(self) -> Generator[CollectionPagedResponse, None, None]:
        page = self._first_page()
        yield page

        while page.next is not None:
            page = CollectionPagedResponse.from_dict(
                self.session.get_metadata_resource(page.next)
            )
            yield page

    def _first_page(self) -> CollectionPagedResponse:
        response = self.session.get(
            "/collections",
            {"expand": "true", "offset": 0, "limit": 10},
            version=APIVersion.V2,
            do_auth=False,
        )
        return CollectionPagedResponse.from_dict(response)

Ancestors

Class variables

var sessionSession

Methods

def pages(self) ‑> Generator[create_paged_response_class_v2()..PagedResponse, None, None]
Expand source code
def pages(self) -> Generator[CollectionPagedResponse, None, None]:
    page = self._first_page()
    yield page

    while page.next is not None:
        page = CollectionPagedResponse.from_dict(
            self.session.get_metadata_resource(page.next)
        )
        yield page