chris.models.collection_links
1import dataclasses 2import functools 3from dataclasses import dataclass 4from typing import Iterator 5 6from serde import deserialize 7 8from chris.models.types import ApiUrl, UserUrl, AdminUrl 9 10 11@deserialize 12@dataclass(frozen=True) 13class AbstractCollectionLinks: 14 @classmethod 15 def has_field(cls, field_name: str) -> bool: 16 return field_name in cls._field_names() 17 18 @classmethod 19 def _field_names(cls) -> Iterator[str]: 20 return (f.name for f in dataclasses.fields(cls)) 21 22 def get(self, collection_name: str) -> str: 23 url = self._dict.get(collection_name, None) 24 if url is None: 25 raise TypeError( 26 f'{self.__class__} does not have link for "{collection_name}"' 27 ) 28 return url 29 30 @functools.cached_property 31 def _dict(self) -> dict[str, str]: 32 return dataclasses.asdict(self) 33 34 35@deserialize 36@dataclass(frozen=True) 37class AnonymousCollectionLinks(AbstractCollectionLinks): 38 chrisinstance: ApiUrl 39 files: ApiUrl 40 compute_resources: ApiUrl 41 plugin_metas: ApiUrl 42 plugins: ApiUrl 43 plugin_instances: ApiUrl 44 pipelines: ApiUrl 45 pipeline_instances: ApiUrl 46 workflows: ApiUrl 47 tags: ApiUrl 48 uploadedfiles: ApiUrl 49 pacsfiles: ApiUrl 50 servicefiles: ApiUrl 51 filebrowser: ApiUrl 52 53 54@deserialize 55@dataclass(frozen=True) 56class CollectionLinks(AnonymousCollectionLinks): 57 user: UserUrl 58 59 60@deserialize 61@dataclass(frozen=True) 62class AdminCollectionLinks(CollectionLinks): 63 admin: AdminUrl 64 65 66@deserialize 67@dataclass(frozen=True) 68class AdminApiCollectionLinks(AbstractCollectionLinks): 69 compute_resources: ApiUrl
@deserialize
@dataclass(frozen=True)
class
AbstractCollectionLinks:
12@deserialize 13@dataclass(frozen=True) 14class AbstractCollectionLinks: 15 @classmethod 16 def has_field(cls, field_name: str) -> bool: 17 return field_name in cls._field_names() 18 19 @classmethod 20 def _field_names(cls) -> Iterator[str]: 21 return (f.name for f in dataclasses.fields(cls)) 22 23 def get(self, collection_name: str) -> str: 24 url = self._dict.get(collection_name, None) 25 if url is None: 26 raise TypeError( 27 f'{self.__class__} does not have link for "{collection_name}"' 28 ) 29 return url 30 31 @functools.cached_property 32 def _dict(self) -> dict[str, str]: 33 return dataclasses.asdict(self)
36@deserialize 37@dataclass(frozen=True) 38class AnonymousCollectionLinks(AbstractCollectionLinks): 39 chrisinstance: ApiUrl 40 files: ApiUrl 41 compute_resources: ApiUrl 42 plugin_metas: ApiUrl 43 plugins: ApiUrl 44 plugin_instances: ApiUrl 45 pipelines: ApiUrl 46 pipeline_instances: ApiUrl 47 workflows: ApiUrl 48 tags: ApiUrl 49 uploadedfiles: ApiUrl 50 pacsfiles: ApiUrl 51 servicefiles: ApiUrl 52 filebrowser: ApiUrl
AnonymousCollectionLinks( chrisinstance: chris.models.types.ApiUrl, files: chris.models.types.ApiUrl, compute_resources: chris.models.types.ApiUrl, plugin_metas: chris.models.types.ApiUrl, plugins: chris.models.types.ApiUrl, plugin_instances: chris.models.types.ApiUrl, pipelines: chris.models.types.ApiUrl, pipeline_instances: chris.models.types.ApiUrl, workflows: chris.models.types.ApiUrl, tags: chris.models.types.ApiUrl, uploadedfiles: chris.models.types.ApiUrl, pacsfiles: chris.models.types.ApiUrl, servicefiles: chris.models.types.ApiUrl, filebrowser: chris.models.types.ApiUrl)
Inherited Members
55@deserialize 56@dataclass(frozen=True) 57class CollectionLinks(AnonymousCollectionLinks): 58 user: UserUrl
CollectionLinks( chrisinstance: chris.models.types.ApiUrl, files: chris.models.types.ApiUrl, compute_resources: chris.models.types.ApiUrl, plugin_metas: chris.models.types.ApiUrl, plugins: chris.models.types.ApiUrl, plugin_instances: chris.models.types.ApiUrl, pipelines: chris.models.types.ApiUrl, pipeline_instances: chris.models.types.ApiUrl, workflows: chris.models.types.ApiUrl, tags: chris.models.types.ApiUrl, uploadedfiles: chris.models.types.ApiUrl, pacsfiles: chris.models.types.ApiUrl, servicefiles: chris.models.types.ApiUrl, filebrowser: chris.models.types.ApiUrl, user: chris.models.types.UserUrl)
Inherited Members
61@deserialize 62@dataclass(frozen=True) 63class AdminCollectionLinks(CollectionLinks): 64 admin: AdminUrl
AdminCollectionLinks( chrisinstance: chris.models.types.ApiUrl, files: chris.models.types.ApiUrl, compute_resources: chris.models.types.ApiUrl, plugin_metas: chris.models.types.ApiUrl, plugins: chris.models.types.ApiUrl, plugin_instances: chris.models.types.ApiUrl, pipelines: chris.models.types.ApiUrl, pipeline_instances: chris.models.types.ApiUrl, workflows: chris.models.types.ApiUrl, tags: chris.models.types.ApiUrl, uploadedfiles: chris.models.types.ApiUrl, pacsfiles: chris.models.types.ApiUrl, servicefiles: chris.models.types.ApiUrl, filebrowser: chris.models.types.ApiUrl, user: chris.models.types.UserUrl, admin: chris.models.types.AdminUrl)
Inherited Members
67@deserialize 68@dataclass(frozen=True) 69class AdminApiCollectionLinks(AbstractCollectionLinks): 70 compute_resources: ApiUrl
AdminApiCollectionLinks(compute_resources: chris.models.types.ApiUrl)