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
},
})