zou 0.20.15__py3-none-any.whl → 0.20.16__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
zou/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.20.15"
1
+ __version__ = "0.20.16"
@@ -140,7 +140,6 @@ class AssetsAndTasksResource(Resource, ArgsMixin):
140
140
  description: All assets with tasks
141
141
  """
142
142
  criterions = query.get_query_criterions_from_request(request)
143
- page = self.get_page()
144
143
  check_criterion_access(criterions)
145
144
  if permissions.has_vendor_permissions():
146
145
  criterions["assigned_to"] = persons_service.get_current_user()[
@@ -150,7 +149,7 @@ class AssetsAndTasksResource(Resource, ArgsMixin):
150
149
  str(department.id)
151
150
  for department in persons_service.get_current_user_raw().departments
152
151
  ]
153
- return assets_service.get_assets_and_tasks(criterions, page)
152
+ return assets_service.get_assets_and_tasks(criterions)
154
153
 
155
154
 
156
155
  class AssetTypeResource(Resource):
@@ -47,8 +47,6 @@ class TasksResource(BaseModelsResource, ArgsMixin):
47
47
  name_filter,
48
48
  criterions,
49
49
  ) = super().build_filters(options)
50
- if "project_id" in criterions:
51
- del criterions["project_id"]
52
50
  if "episode_id" in criterions:
53
51
  del criterions["episode_id"]
54
52
  return (
@@ -61,7 +59,6 @@ class TasksResource(BaseModelsResource, ArgsMixin):
61
59
  def apply_filters(self, query, options):
62
60
  query = super().apply_filters(query, options)
63
61
 
64
- project_id = options.get("project_id", None)
65
62
  episode_id = options.get("episode_id", None)
66
63
  if episode_id is not None:
67
64
  Sequence = aliased(Entity)
@@ -70,10 +67,6 @@ class TasksResource(BaseModelsResource, ArgsMixin):
70
67
  .join(Sequence, Entity.parent_id == Sequence.id)
71
68
  .filter(Sequence.parent_id == episode_id)
72
69
  )
73
- elif project_id is not None:
74
- query = query.join(Entity, Task.entity_id == Entity.id).filter(
75
- Entity.project_id == project_id
76
- )
77
70
 
78
71
  return query
79
72
 
@@ -3,6 +3,7 @@ from sqlalchemy_utils import UUIDType
3
3
  from zou.app import db
4
4
  from zou.app.models.serializer import SerializerMixin
5
5
  from zou.app.models.base import BaseMixin
6
+ from zou.app.utils import fields
6
7
 
7
8
 
8
9
  class AttachmentFile(db.Model, BaseMixin, SerializerMixin):
@@ -31,12 +32,14 @@ class AttachmentFile(db.Model, BaseMixin, SerializerMixin):
31
32
  return "<AttachmentFile %s>" % self.id
32
33
 
33
34
  def present(self):
34
- return {
35
- "id": str(self.id),
36
- "name": self.name,
37
- "extension": self.extension,
38
- "size": self.size,
39
- }
35
+ return fields.serialize_dict(
36
+ {
37
+ "id": self.id,
38
+ "name": self.name,
39
+ "extension": self.extension,
40
+ "size": self.size,
41
+ }
42
+ )
40
43
 
41
44
  @classmethod
42
45
  def create_from_import(cls, data):
zou/app/models/chat.py CHANGED
@@ -3,6 +3,7 @@ from sqlalchemy_utils import UUIDType
3
3
  from zou.app import db
4
4
  from zou.app.models.serializer import SerializerMixin
5
5
  from zou.app.models.base import BaseMixin
6
+ from zou.app.utils import fields
6
7
 
7
8
 
8
9
  class ChatParticipant(db.Model):
@@ -37,8 +38,10 @@ class Chat(db.Model, BaseMixin, SerializerMixin):
37
38
  return "<Message of %s>" % self.object_id
38
39
 
39
40
  def present(self):
40
- return {
41
- "id": str(self.id),
42
- "object_id": str(self.object_id),
43
- "last_message": self.last_message,
44
- }
41
+ return fields.serialize_dict(
42
+ {
43
+ "id": self.id,
44
+ "object_id": self.object_id,
45
+ "last_message": self.last_message,
46
+ }
47
+ )
@@ -3,6 +3,7 @@ from sqlalchemy_utils import UUIDType, ChoiceType
3
3
  from zou.app import db
4
4
  from zou.app.models.serializer import SerializerMixin
5
5
  from zou.app.models.base import BaseMixin
6
+ from zou.app.utils import fields
6
7
 
7
8
  from sqlalchemy.dialects.postgresql import JSONB
8
9
 
@@ -82,16 +83,19 @@ class PreviewFile(db.Model, BaseMixin, SerializerMixin):
82
83
  return (previous_data, True)
83
84
 
84
85
  def present(self):
85
- return {
86
- "id": str(self.id),
87
- "name": self.name,
88
- "original_name": self.original_name,
89
- "extension": self.extension,
90
- "revision": self.revision,
91
- "position": self.position,
92
- "file_size": self.file_size,
93
- "status": str(self.status),
94
- "validation_status": str(self.validation_status),
95
- "task_id": str(self.task_id),
96
- "person_id": str(self.person_id),
97
- }
86
+ return fields.serialize_dict(
87
+ {
88
+ "id": self.id,
89
+ "name": self.name,
90
+ "original_name": self.original_name,
91
+ "extension": self.extension,
92
+ "revision": self.revision,
93
+ "position": self.position,
94
+ "file_size": self.file_size,
95
+ "status": self.status,
96
+ "validation_status": self.validation_status,
97
+ "task_id": self.task_id,
98
+ "person_id": self.person_id,
99
+ "created_at": self.created_at,
100
+ }
101
+ )
@@ -169,7 +169,7 @@ def get_full_assets(criterions={}):
169
169
  return assets
170
170
 
171
171
 
172
- def get_assets_and_tasks(criterions={}, page=1, with_episode_ids=False):
172
+ def get_assets_and_tasks(criterions={}, with_episode_ids=False):
173
173
  """
174
174
  Get all assets for given criterions with related tasks for each asset.
175
175
  """
@@ -188,7 +188,9 @@ def get_playlist_with_preview_file_revisions(playlist_id):
188
188
  shot["preview_file_status"] = preview_file["status"]
189
189
  shot["preview_file_annotations"] = preview_file["annotations"]
190
190
  shot["preview_file_task_id"] = preview_file["task_id"]
191
- shot["preview_file_previews"] = preview_file["previews"]
191
+ shot["preview_file_previews"] = preview_file.get(
192
+ "previews", []
193
+ )
192
194
  else:
193
195
  del shot["preview_file_id"]
194
196
  except Exception as e:
@@ -234,7 +236,6 @@ def set_preview_files_for_entities(playlist_dict):
234
236
  .all()
235
237
  )
236
238
 
237
- is_pictures = False
238
239
  for preview_file, task_type_id, entity_id in preview_files:
239
240
  entity_id = str(entity_id)
240
241
  task_type_id = str(task_type_id)
@@ -244,9 +245,6 @@ def set_preview_files_for_entities(playlist_dict):
244
245
  if task_type_id not in previews[entity_id]:
245
246
  previews[entity_id][task_type_id] = []
246
247
 
247
- if preview_file.extension == "png":
248
- is_pictures = True
249
-
250
248
  task_id = str(preview_file.task_id)
251
249
  preview_file_id = str(preview_file.id)
252
250
 
@@ -265,12 +263,11 @@ def set_preview_files_for_entities(playlist_dict):
265
263
  previews[entity_id][task_type_id].append(light_preview_file)
266
264
  preview_file_map[preview_file_id] = light_preview_file
267
265
 
268
- if is_pictures:
269
- for entity_id in previews.keys():
270
- for task_type_id in previews[entity_id].keys():
271
- previews[entity_id][task_type_id] = mix_preview_file_revisions(
272
- previews[entity_id][task_type_id]
273
- )
266
+ for entity_id in previews.keys():
267
+ for task_type_id in previews[entity_id].keys():
268
+ previews[entity_id][task_type_id] = mix_preview_file_revisions(
269
+ previews[entity_id][task_type_id]
270
+ )
274
271
 
275
272
  for entity in playlist_dict["shots"]:
276
273
  if str(entity["id"]) in previews:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: zou
3
- Version: 0.20.15
3
+ Version: 0.20.16
4
4
  Summary: API to store and manage the data of your animation production
5
5
  Home-page: https://zou.cg-wire.com
6
6
  Author: CG Wire
@@ -62,7 +62,7 @@ Requires-Dist: psutil==6.1.1
62
62
  Requires-Dist: psycopg[binary]==3.2.4
63
63
  Requires-Dist: pyotp==2.9.0
64
64
  Requires-Dist: pysaml2==7.5.0
65
- Requires-Dist: python-nomad==2.0.1
65
+ Requires-Dist: python-nomad==2.1.0
66
66
  Requires-Dist: python-slugify==8.0.4
67
67
  Requires-Dist: python-socketio==5.12.1
68
68
  Requires-Dist: pytz==2025.1
@@ -71,7 +71,7 @@ Requires-Dist: requests==2.32.3
71
71
  Requires-Dist: rq==2.1.0
72
72
  Requires-Dist: slackclient==2.9.4
73
73
  Requires-Dist: sqlalchemy_utils==0.41.2
74
- Requires-Dist: sqlalchemy==2.0.37
74
+ Requires-Dist: sqlalchemy==2.0.38
75
75
  Requires-Dist: ua-parser==1.0.1
76
76
  Requires-Dist: werkzeug==3.1.3
77
77
  Provides-Extra: prod
@@ -1,4 +1,4 @@
1
- zou/__init__.py,sha256=qx2qBaxijq_GGtI51BGXX5lmkBS7HlcGbPCmaum1Gf8,24
1
+ zou/__init__.py,sha256=H2uay8S6RdWs70UCbs9-a4OHr3MS43oLxQlRC2LPME4,24
2
2
  zou/cli.py,sha256=8JyGrWm7-Ykshv5IBjwlBMn8JkFpHPCADChA9n8loTI,18755
3
3
  zou/debug.py,sha256=1fawPbkD4wn0Y9Gk0BiBFSa-CQe5agFi8R9uJYl2Uyk,520
4
4
  zou/event_stream.py,sha256=EpohqFJwWL0zs-Ic_W5dX5_XSDeCrqHQPL5Re39OnQ0,6382
@@ -10,7 +10,7 @@ zou/app/mixin.py,sha256=eYwfS_CUFvNmldaQXrjsN5mK_gX0wYrBFykfx60uUM8,4897
10
10
  zou/app/swagger.py,sha256=Jr7zsMqJi0V4FledODOdu-aqqVE02jMFzhqVxHK0_2c,54158
11
11
  zou/app/blueprints/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  zou/app/blueprints/assets/__init__.py,sha256=T2zhDagHjXF6jRwOQ8vqokZTkBHyY7XtTI0Rlooamjs,2931
13
- zou/app/blueprints/assets/resources.py,sha256=y1fMLrgO8vFXoJT4srh-FP4IFlGvh_E0NxhQ5AK-9O0,25600
13
+ zou/app/blueprints/assets/resources.py,sha256=Cqdot0vR6ccHNC5b0FVDq2x_Ujankk61N3EKV0A4q3M,25563
14
14
  zou/app/blueprints/auth/__init__.py,sha256=xP874bMWUnLIirOPSEbpe-Q2fBBQrxZGKd0tLZmNJXk,1128
15
15
  zou/app/blueprints/auth/resources.py,sha256=YIhdEVK9WQ7fCYtknwh3dR3TdSdURRm7rBpDxpNSGK0,45608
16
16
  zou/app/blueprints/breakdown/__init__.py,sha256=Dp6GWSGxxWIedpyzTTEKpCRUYEo8oVNVyQhwNvTMmQM,1888
@@ -56,7 +56,7 @@ zou/app/blueprints/crud/software.py,sha256=oKFINQh3DcVTd0Ap_cvgsgvhrIbGPjVBKucwk
56
56
  zou/app/blueprints/crud/status_automation.py,sha256=BY846JKmFMpTZBZ0DlWXpQ-LHwCpOwAWU8qekK89yk0,2361
57
57
  zou/app/blueprints/crud/studio.py,sha256=N0JjQ92ilFuPcFsq2WYBeaeeXHyPDXf_-UtSQpSFN4A,951
58
58
  zou/app/blueprints/crud/subscription.py,sha256=xFV_nvRg2ow6E0JWo4VHgeK_SkKX3K8i80thY3qRCl0,392
59
- zou/app/blueprints/crud/task.py,sha256=7ZMetDs4Z-ZxO0IjyM4y1kmzQUGyLvf0ga6pxZOrNsA,5793
59
+ zou/app/blueprints/crud/task.py,sha256=ZYHngIDkxAOGRPUf7O1i7K8lKq1eeqtMwzDZqZYR0kc,5485
60
60
  zou/app/blueprints/crud/task_status.py,sha256=roRbBJtyoaNrXv5nkVIPLH6K5vdJjGQtiWFvqlfbo9s,1482
61
61
  zou/app/blueprints/crud/task_type.py,sha256=9DUtBaNZqC0yHmunKX_CaUyo-bHjNTX3B-g4zyU5uKc,1815
62
62
  zou/app/blueprints/crud/time_spent.py,sha256=9tfoKJ77OEDTnpKHshO3UMDz_KCoyLq1CWquInm5DY0,3057
@@ -136,10 +136,10 @@ zou/app/indexer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
136
  zou/app/indexer/indexing.py,sha256=s8Jx62itbeptPlxnl1tFozF3e5HKxEMq-pOnwomVumE,3718
137
137
  zou/app/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
138
  zou/app/models/asset_instance.py,sha256=ajfyA3qe6IjoNvd3mM8yr7wk9p4R9WO0qTfqT9ijntg,1714
139
- zou/app/models/attachment_file.py,sha256=d3gldEyKhRyLqGQHBbWVwtmPgtq7oxipxHanZUKWVGI,1377
139
+ zou/app/models/attachment_file.py,sha256=26SAjgGncoUbpgyygXg8tigEBWMgaz9wfn8Kx6dLueM,1470
140
140
  zou/app/models/base.py,sha256=vZoPzdixyRbk0SoDJGEbQ9LFouBaDCA7gVSZ1o_SIhI,8808
141
141
  zou/app/models/build_job.py,sha256=aW6KZXkyMP9d3g8fvcOYk9EAoNMw-6IleZdWbaqLLVw,1286
142
- zou/app/models/chat.py,sha256=yeKqe6o7RRAExx8xD-7dRXzUPhq_dwZffrbIG4HQp1w,1189
142
+ zou/app/models/chat.py,sha256=u-IZB67IYlMMoPooFSKJX2kpXFdshlmRKf7UuwAcA6c,1273
143
143
  zou/app/models/chat_message.py,sha256=8w7xtoqCW_CRoGKrF4ba5w-oyAHIRh-2ms3p5sQQor4,874
144
144
  zou/app/models/comment.py,sha256=sJxLnMNhdgvqm_nlcaRauxsMgFUQyMLxcCK8JkeJQJE,5875
145
145
  zou/app/models/custom_action.py,sha256=wx5ASKJ2oG-ivASZbVf1nLiL7zELgQBJ8U1jDdvGkuU,578
@@ -162,7 +162,7 @@ zou/app/models/output_type.py,sha256=us_lCUCEvuP4vi_XmmOcEl1J2MtZhMX5ZheBqEFCgWA
162
162
  zou/app/models/person.py,sha256=txHmSzokaS-tET_MIjGHxhNNS8CPt-GzUPIhp5baDmU,7714
163
163
  zou/app/models/playlist.py,sha256=YGgAk84u0_fdIEY02Dal4kfk8APVZvWFwWYV74qvrio,1503
164
164
  zou/app/models/preview_background_file.py,sha256=j8LgRmY7INnlB07hFwwB-8ssQrRC8vsb8VcpsTbt6tA,559
165
- zou/app/models/preview_file.py,sha256=Ur45Wau2X3qyKULh04EUcMbnBmaQc8y4IMs5NgELiAQ,3134
165
+ zou/app/models/preview_file.py,sha256=eDPXw0QIdJze_E4kAS8SsyabrefWhIIdwuGmjss7iXo,3282
166
166
  zou/app/models/project.py,sha256=T2gTImmbd5O-U5GySWSwzkR0r_cY2RDr1niwSfOPqeA,8900
167
167
  zou/app/models/project_status.py,sha256=pExaHH7x4Eu8xOqD3_mRRbMzjT2jJZ8rm-9jo7yUGXA,390
168
168
  zou/app/models/schedule_item.py,sha256=coY5uDDuBoctaMICnfCzx4zT5om2E1uu4iq5MDWAPlY,1444
@@ -179,7 +179,7 @@ zou/app/models/task_type.py,sha256=IsixVAfz3pyMf0eQw8x-uFNM9OHNkZpsPLEz_VNQ0hA,1
179
179
  zou/app/models/time_spent.py,sha256=n7i3FO9g1eE_zATkItoCgrGVqq3iMSfdlKSveEZPloc,795
180
180
  zou/app/models/working_file.py,sha256=q0LM3s1ziw_9AmmPDCkwyf1-TJkWTBMgo2LdHyVRwxg,1509
181
181
  zou/app/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
- zou/app/services/assets_service.py,sha256=WOV0XTp5JKNclI9MnYH_4wcWk_u3UYObberaX78Q8u4,23995
182
+ zou/app/services/assets_service.py,sha256=VSGZp2EtFZzaqaT_ysOSDAmnYcp1UYdhY1-WlISxvl8,23987
183
183
  zou/app/services/auth_service.py,sha256=hQpNb21xlr5EiTrXnzpFb4W4GDtglubqA2z_-YIBfnk,22897
184
184
  zou/app/services/backup_service.py,sha256=_ZtZp6wkcVYnHxBosziwLGdrTvsUttXGphiydq53iy8,4840
185
185
  zou/app/services/base_service.py,sha256=OZd0STFh-DyBBdwsmA7DMMnrwv4C8wJUbShvZ1isndU,1383
@@ -201,7 +201,7 @@ zou/app/services/names_service.py,sha256=TOSrintROmxcAlcFQE0i2E3PBLnw81GAztNselp
201
201
  zou/app/services/news_service.py,sha256=eOXkvLhOcgncI2NrgiJEccV28oxZX5CsZVqaE-l4kWQ,9084
202
202
  zou/app/services/notifications_service.py,sha256=7GDRio_mGaRYV5BHOAdpxBZjA_LLYUfVpbwZqy1n9pI,15685
203
203
  zou/app/services/persons_service.py,sha256=ccPP1_anu2J4zH54LKeP7dt1VyVpiYvzfgOS1xXhLrQ,16564
204
- zou/app/services/playlists_service.py,sha256=pAlPHET4jNdST5jsmJrFUkf1SVhfSoML9zdNpZ_88l4,32439
204
+ zou/app/services/playlists_service.py,sha256=Gs5K6jDJmnbdWqNvM3J0cOn0Lfxh_JtoPdEmqYXFSWk,32345
205
205
  zou/app/services/preview_files_service.py,sha256=Yk-vwzHuKTzNkEZfl9DhQRdDuRU006uwZxJ-RKajEkI,35842
206
206
  zou/app/services/projects_service.py,sha256=aIbYaFomy7OX2Pxvkf9w5qauDvkjuc9ummSGNYIpQMY,21249
207
207
  zou/app/services/scenes_service.py,sha256=iXN19HU4njPF5VtZXuUrVJ-W23ZQuQNPC3ADXltbWtU,992
@@ -416,9 +416,9 @@ zou/remote/normalize_movie.py,sha256=zNfEY3N1UbAHZfddGONTg2Sff3ieLVWd4dfZa1dpnes
416
416
  zou/remote/playlist.py,sha256=AsDo0bgYhDcd6DfNRV6r6Jj3URWwavE2ZN3VkKRPbLU,3293
417
417
  zou/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
418
418
  zou/utils/movie.py,sha256=d67fIL9dVBKt-E_qCGXRbNNdbJaJR5sHvZeX3hf8ldE,16559
419
- zou-0.20.15.dist-info/LICENSE,sha256=dql8h4yceoMhuzlcK0TT_i-NgTFNIZsgE47Q4t3dUYI,34520
420
- zou-0.20.15.dist-info/METADATA,sha256=o4r3Y9W25b_qntiXtCV0Eqr052SS0LXNSkzNw98Mge0,6733
421
- zou-0.20.15.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
422
- zou-0.20.15.dist-info/entry_points.txt,sha256=PelQoIx3qhQ_Tmne7wrLY-1m2izuzgpwokoURwSohy4,130
423
- zou-0.20.15.dist-info/top_level.txt,sha256=4S7G_jk4MzpToeDItHGjPhHx_fRdX52zJZWTD4SL54g,4
424
- zou-0.20.15.dist-info/RECORD,,
419
+ zou-0.20.16.dist-info/LICENSE,sha256=dql8h4yceoMhuzlcK0TT_i-NgTFNIZsgE47Q4t3dUYI,34520
420
+ zou-0.20.16.dist-info/METADATA,sha256=Y3kFPwIc_wcpvLRJuqwDa1N7PhokrXxeYtZjvnj1jgo,6733
421
+ zou-0.20.16.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
422
+ zou-0.20.16.dist-info/entry_points.txt,sha256=PelQoIx3qhQ_Tmne7wrLY-1m2izuzgpwokoURwSohy4,130
423
+ zou-0.20.16.dist-info/top_level.txt,sha256=4S7G_jk4MzpToeDItHGjPhHx_fRdX52zJZWTD4SL54g,4
424
+ zou-0.20.16.dist-info/RECORD,,
File without changes
File without changes