diff --git a/chowda/fields.py b/chowda/fields.py index c1a87575..8ac45f27 100644 --- a/chowda/fields.py +++ b/chowda/fields.py @@ -51,12 +51,12 @@ class SonyCiAssetThumbnail(BaseField): label: str = 'Thumbnail' display_template: str = 'displays/sony_ci_asset_thumbnail.html' read_only: bool = True - exclude_from_create: bool = True + exclude_from_edit: bool = True render_function_key: str = 'sony_ci_asset_thumbnail' async def parse_obj(self, request: Request, obj: Any) -> Any: - return obj.thumbnails_by_type.get('standard') + return obj.thumbnails_by_type.get('small') @dataclass diff --git a/chowda/views.py b/chowda/views.py index b09ca4c9..40c419e9 100644 --- a/chowda/views.py +++ b/chowda/views.py @@ -30,9 +30,15 @@ from chowda.utils import validate_media_file_guids -class BaseModelView(ModelView): +class ChowdaModelView(ModelView): """Base permissions for all views""" + page_size_options: ClassVar[list[int]] = [10, 25, 100, 1000, -1] + + +class ClammerModelView(ChowdaModelView): + """Base Clammer permissions for all protected views""" + def can_create(self, request: Request) -> bool: return get_user(request).is_clammer @@ -43,7 +49,7 @@ def can_edit(self, request: Request) -> bool: return get_user(request).is_clammer -class AdminModelView(ModelView): +class AdminModelView(ClammerModelView): """Base Admin permissions for all protected views""" def is_accessible(self, request: Request) -> bool: @@ -60,7 +66,7 @@ def can_edit(self, request: Request) -> bool: return get_user(request).is_admin -class CollectionView(BaseModelView): +class CollectionView(ClammerModelView): exclude_fields_from_list: ClassVar[list[Any]] = [Collection.media_files] exclude_fields_from_detail: ClassVar[list[Any]] = [Collection.id] @@ -152,7 +158,7 @@ async def create_multiple_batches(self, request: Request, pks: List[Any]) -> str return f'Created Batches from {", ".join(names)}' -class BatchView(BaseModelView): +class BatchView(ClammerModelView): exclude_fields_from_create: ClassVar[list[Any]] = [Batch.id] exclude_fields_from_edit: ClassVar[list[Any]] = [Batch.id] exclude_fields_from_list: ClassVar[list[Any]] = [Batch.media_files] @@ -283,8 +289,9 @@ async def combine_batches(self, request: Request, pks: List[Any]) -> str: return f'Combined {len(pks)} Batch(es)' -class MediaFileView(BaseModelView): +class MediaFileView(ClammerModelView): pk_attr: str = 'guid' + actions: ClassVar[List[str]] = ['create_new_batch'] fields: ClassVar[list[str]] = [ @@ -295,6 +302,7 @@ class MediaFileView(BaseModelView): 'mmif_json', ] exclude_fields_from_list: ClassVar[list[str]] = ['mmif_json'] + page_size_options: ClassVar[list[int]] = [10, 25, 100, 500, 2000, 10000] def can_create(self, request: Request) -> bool: return get_user(request).is_admin @@ -337,7 +345,7 @@ class UserView(AdminModelView): fields: ClassVar[list[Any]] = ['first_name', 'last_name', 'email'] -class ClamsAppView(BaseModelView): +class ClamsAppView(ClammerModelView): fields: ClassVar[list[Any]] = ['name', 'endpoint', 'description', 'pipelines'] @@ -387,6 +395,8 @@ class SonyCiAssetView(AdminModelView): 'media_files', ] + page_size_options: ClassVar[list[int]] = [10, 25, 100, 500, 2000, 10000] + def can_create(self, request: Request) -> bool: """Sony Ci Assets are ingested from Sony Ci API, not created from the UI.""" return False diff --git a/static/js/custom_render.js b/static/js/custom_render.js index 10e17e57..c068cc48 100644 --- a/static/js/custom_render.js +++ b/static/js/custom_render.js @@ -2,7 +2,7 @@ Object.assign(render, { media_file_guid_links: function render(data, type, full, meta, fieldOptions) { // Render a list of media files to a string of links to media files return data.map( - (guid) => ` ${guid} ` + guid => ` ${guid} ` ) }, media_file_count: function render(data, type, full, meta, fieldOptions) { @@ -18,7 +18,7 @@ Object.assign(render, { fieldOptions ) { return data - ? `` + ? `` : null }, })