zou 0.19.62__py3-none-any.whl → 0.19.64__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.
Files changed (35) hide show
  1. zou/__init__.py +1 -1
  2. zou/app/blueprints/crud/base.py +3 -2
  3. zou/app/blueprints/crud/comments.py +13 -0
  4. zou/app/blueprints/crud/custom_action.py +1 -1
  5. zou/app/blueprints/crud/department.py +1 -1
  6. zou/app/blueprints/crud/entity.py +1 -1
  7. zou/app/blueprints/crud/entity_type.py +1 -1
  8. zou/app/blueprints/crud/file_status.py +1 -1
  9. zou/app/blueprints/crud/metadata_descriptor.py +2 -1
  10. zou/app/blueprints/crud/organisation.py +1 -1
  11. zou/app/blueprints/crud/output_file.py +1 -1
  12. zou/app/blueprints/crud/output_type.py +1 -1
  13. zou/app/blueprints/crud/person.py +1 -1
  14. zou/app/blueprints/crud/playlist.py +1 -1
  15. zou/app/blueprints/crud/preview_background_file.py +1 -1
  16. zou/app/blueprints/crud/preview_file.py +1 -1
  17. zou/app/blueprints/crud/project.py +1 -1
  18. zou/app/blueprints/crud/project_status.py +1 -1
  19. zou/app/blueprints/crud/software.py +1 -1
  20. zou/app/blueprints/crud/status_automation.py +1 -1
  21. zou/app/blueprints/crud/studio.py +1 -1
  22. zou/app/blueprints/crud/task.py +1 -1
  23. zou/app/blueprints/crud/task_status.py +1 -1
  24. zou/app/blueprints/crud/task_type.py +1 -1
  25. zou/app/blueprints/crud/working_file.py +1 -1
  26. zou/app/blueprints/search/resources.py +18 -6
  27. zou/app/blueprints/tasks/resources.py +6 -1
  28. zou/app/services/breakdown_service.py +3 -1
  29. zou/app/services/chats_service.py +2 -2
  30. {zou-0.19.62.dist-info → zou-0.19.64.dist-info}/METADATA +11 -11
  31. {zou-0.19.62.dist-info → zou-0.19.64.dist-info}/RECORD +35 -35
  32. {zou-0.19.62.dist-info → zou-0.19.64.dist-info}/WHEEL +1 -1
  33. {zou-0.19.62.dist-info → zou-0.19.64.dist-info}/LICENSE +0 -0
  34. {zou-0.19.62.dist-info → zou-0.19.64.dist-info}/entry_points.txt +0 -0
  35. {zou-0.19.62.dist-info → zou-0.19.64.dist-info}/top_level.txt +0 -0
zou/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.19.62"
1
+ __version__ = "0.19.64"
@@ -127,7 +127,7 @@ class BaseModelsResource(Resource, ArgsMixin):
127
127
 
128
128
  return query
129
129
 
130
- def check_read_permissions(self):
130
+ def check_read_permissions(self, options=None):
131
131
  return permissions.check_admin_permissions()
132
132
 
133
133
  def add_project_permission_filter(self, query):
@@ -165,13 +165,14 @@ class BaseModelsResource(Resource, ArgsMixin):
165
165
  description: Permission denied
166
166
  """
167
167
  try:
168
- self.check_read_permissions()
169
168
  query = self.model.query
170
169
  if not request.args:
170
+ self.check_read_permissions()
171
171
  query = self.add_project_permission_filter(query)
172
172
  return self.all_entries(query)
173
173
  else:
174
174
  options = request.args
175
+ self.check_read_permissions(options)
175
176
  query = self.apply_filters(query, options)
176
177
  query = self.add_project_permission_filter(query)
177
178
  page = int(options.get("page", "-1"))
@@ -28,6 +28,19 @@ class CommentsResource(BaseModelsResource):
28
28
  def __init__(self):
29
29
  BaseModelsResource.__init__(self, Comment)
30
30
 
31
+ def check_read_permissions(self, options=None):
32
+ if options is not None:
33
+ if "project_id" in options:
34
+ user_service.check_project_access(options["project_id"])
35
+ if (
36
+ permissions.has_vendor_permissions()
37
+ or permissions.has_client_permissions()
38
+ ):
39
+ raise permissions.PermissionDenied
40
+ else:
41
+ return True
42
+ return permissions.check_admin_permissions()
43
+
31
44
 
32
45
  class CommentResource(BaseModelResource):
33
46
  def __init__(self):
@@ -9,7 +9,7 @@ class CustomActionsResource(BaseModelsResource):
9
9
  def __init__(self):
10
10
  BaseModelsResource.__init__(self, CustomAction)
11
11
 
12
- def check_read_permissions(self):
12
+ def check_read_permissions(self, options=None):
13
13
  user_service.block_access_to_vendor()
14
14
  return True
15
15
 
@@ -9,7 +9,7 @@ class DepartmentsResource(BaseModelsResource):
9
9
  def __init__(self):
10
10
  BaseModelsResource.__init__(self, Department)
11
11
 
12
- def check_read_permissions(self):
12
+ def check_read_permissions(self, options=None):
13
13
  return True
14
14
 
15
15
  def post_creation(self, instance):
@@ -61,7 +61,7 @@ class EntitiesResource(BaseModelsResource, EntityEventMixin):
61
61
  def emit_create_event(self, entity_dict):
62
62
  self.emit_event("new", entity_dict)
63
63
 
64
- def check_read_permissions(self):
64
+ def check_read_permissions(self, options=None):
65
65
  return True
66
66
 
67
67
  def add_project_permission_filter(self, query):
@@ -20,7 +20,7 @@ class EntityTypesResource(BaseModelsResource):
20
20
  for asset_type in query.all()
21
21
  ]
22
22
 
23
- def check_read_permissions(self):
23
+ def check_read_permissions(self, options=None):
24
24
  return True
25
25
 
26
26
  def emit_create_event(self, instance_dict):
@@ -6,7 +6,7 @@ class FileStatusesResource(BaseModelsResource):
6
6
  def __init__(self):
7
7
  BaseModelsResource.__init__(self, FileStatus)
8
8
 
9
- def check_read_permissions(self):
9
+ def check_read_permissions(self, options=None):
10
10
  return True
11
11
 
12
12
 
@@ -6,6 +6,7 @@ from zou.app.models.metadata_descriptor import (
6
6
  from zou.app.blueprints.crud.base import BaseModelResource, BaseModelsResource
7
7
  from zou.app.utils import permissions
8
8
  from zou.app.models.project import Project
9
+ from zou.app.services import user_service
9
10
 
10
11
  from zou.app.services.exception import (
11
12
  WrongParameterException,
@@ -16,7 +17,7 @@ class MetadataDescriptorsResource(BaseModelsResource):
16
17
  def __init__(self):
17
18
  BaseModelsResource.__init__(self, MetadataDescriptor)
18
19
 
19
- def check_read_permissions(self):
20
+ def check_read_permissions(self, options=None):
20
21
  return not permissions.has_vendor_permissions()
21
22
 
22
23
  def add_project_permission_filter(self, query):
@@ -8,7 +8,7 @@ class OrganisationsResource(BaseModelsResource):
8
8
  def __init__(self):
9
9
  BaseModelsResource.__init__(self, Organisation)
10
10
 
11
- def check_read_permissions(self):
11
+ def check_read_permissions(self, options=None):
12
12
  return True
13
13
 
14
14
 
@@ -17,7 +17,7 @@ class OutputFilesResource(BaseModelsResource):
17
17
  def __init__(self):
18
18
  BaseModelsResource.__init__(self, OutputFile)
19
19
 
20
- def check_read_permissions(self):
20
+ def check_read_permissions(self, options=None):
21
21
  user_service.block_access_to_vendor()
22
22
  return True
23
23
 
@@ -12,7 +12,7 @@ class OutputTypesResource(BaseModelsResource):
12
12
  def __init__(self):
13
13
  BaseModelsResource.__init__(self, OutputType)
14
14
 
15
- def check_read_permissions(self):
15
+ def check_read_permissions(self, options=None):
16
16
  return True
17
17
 
18
18
 
@@ -52,7 +52,7 @@ class PersonsResource(BaseModelsResource):
52
52
  for person in query.all()
53
53
  ]
54
54
 
55
- def check_read_permissions(self):
55
+ def check_read_permissions(self, options=None):
56
56
  return True
57
57
 
58
58
  def check_create_permissions(self, data):
@@ -9,7 +9,7 @@ class PlaylistsResource(BaseModelsResource):
9
9
  def __init__(self):
10
10
  BaseModelsResource.__init__(self, Playlist)
11
11
 
12
- def check_read_permissions(self):
12
+ def check_read_permissions(self, options=None):
13
13
  return True
14
14
 
15
15
  def check_create_permissions(self, playlist):
@@ -9,7 +9,7 @@ class PreviewBackgroundFilesResource(BaseModelsResource):
9
9
  def __init__(self):
10
10
  BaseModelsResource.__init__(self, PreviewBackgroundFile)
11
11
 
12
- def check_read_permissions(self):
12
+ def check_read_permissions(self, options=None):
13
13
  return True
14
14
 
15
15
  def update_data(self, data):
@@ -37,7 +37,7 @@ class PreviewFilesResource(BaseModelsResource):
37
37
 
38
38
  return query
39
39
 
40
- def check_read_permissions(self):
40
+ def check_read_permissions(self, options=None):
41
41
  return True
42
42
 
43
43
 
@@ -31,7 +31,7 @@ class ProjectsResource(BaseModelsResource):
31
31
  else:
32
32
  return query.filter(user_service.build_related_projects_filter())
33
33
 
34
- def check_read_permissions(self):
34
+ def check_read_permissions(self, options=None):
35
35
  return True
36
36
 
37
37
  def check_creation_integrity(self, data):
@@ -6,7 +6,7 @@ class ProjectStatussResource(BaseModelsResource):
6
6
  def __init__(self):
7
7
  BaseModelsResource.__init__(self, ProjectStatus)
8
8
 
9
- def check_read_permissions(self):
9
+ def check_read_permissions(self, options=None):
10
10
  return True
11
11
 
12
12
 
@@ -12,7 +12,7 @@ class SoftwaresResource(BaseModelsResource):
12
12
  def __init__(self):
13
13
  BaseModelsResource.__init__(self, Software)
14
14
 
15
- def check_read_permissions(self):
15
+ def check_read_permissions(self, options=None):
16
16
  return True
17
17
 
18
18
 
@@ -13,7 +13,7 @@ class StatusAutomationsResource(BaseModelsResource):
13
13
  def __init__(self):
14
14
  BaseModelsResource.__init__(self, StatusAutomation)
15
15
 
16
- def check_read_permissions(self):
16
+ def check_read_permissions(self, options=None):
17
17
  user_service.block_access_to_vendor()
18
18
  return True
19
19
 
@@ -9,7 +9,7 @@ class StudiosResource(BaseModelsResource):
9
9
  def __init__(self):
10
10
  BaseModelsResource.__init__(self, Studio)
11
11
 
12
- def check_read_permissions(self):
12
+ def check_read_permissions(self, options=None):
13
13
  return True
14
14
 
15
15
  def post_creation(self, instance):
@@ -28,7 +28,7 @@ class TasksResource(BaseModelsResource, ArgsMixin):
28
28
  def __init__(self):
29
29
  BaseModelsResource.__init__(self, Task)
30
30
 
31
- def check_read_permissions(self):
31
+ def check_read_permissions(self, options=None):
32
32
  return True
33
33
 
34
34
  def add_project_permission_filter(self, query):
@@ -7,7 +7,7 @@ class TaskStatusesResource(BaseModelsResource):
7
7
  def __init__(self):
8
8
  BaseModelsResource.__init__(self, TaskStatus)
9
9
 
10
- def check_read_permissions(self):
10
+ def check_read_permissions(self, options=None):
11
11
  return True
12
12
 
13
13
  def post_creation(self, instance):
@@ -9,7 +9,7 @@ class TaskTypesResource(BaseModelsResource):
9
9
  def __init__(self):
10
10
  BaseModelsResource.__init__(self, TaskType)
11
11
 
12
- def check_read_permissions(self):
12
+ def check_read_permissions(self, options=None):
13
13
  return True
14
14
 
15
15
  def update_data(self, data):
@@ -16,7 +16,7 @@ class WorkingFilesResource(BaseModelsResource):
16
16
  def __init__(self):
17
17
  BaseModelsResource.__init__(self, WorkingFile)
18
18
 
19
- def check_read_permissions(self):
19
+ def check_read_permissions(self, options=None):
20
20
  """
21
21
  Overriding so that people without admin credentials can still access
22
22
  this resource.
@@ -78,12 +78,24 @@ class SearchResource(Resource, ArgsMixin):
78
78
  query, limit=limit, offset=offset
79
79
  )
80
80
  if "assets" in index_names:
81
- results["assets"] = index_service.search_assets(
82
- query, project_ids, limit=limit, offset=offset
83
- )
81
+ if (
82
+ len(project_ids) == 0
83
+ and not permissions.has_admin_permissions()
84
+ ):
85
+ results["assets"] = []
86
+ else:
87
+ results["assets"] = index_service.search_assets(
88
+ query, project_ids, limit=limit, offset=offset
89
+ )
84
90
  if "shots" in index_names:
85
- results["shots"] = index_service.search_shots(
86
- query, project_ids, limit=limit, offset=offset
87
- )
91
+ if (
92
+ len(project_ids) == 0
93
+ and not permissions.has_admin_permissions()
94
+ ):
95
+ results["shots"] = []
96
+ else:
97
+ results["shots"] = index_service.search_shots(
98
+ query, project_ids, limit=limit, offset=offset
99
+ )
88
100
 
89
101
  return results
@@ -1518,7 +1518,6 @@ class ProjectCommentsResource(Resource, ArgsMixin):
1518
1518
  """
1519
1519
 
1520
1520
  @jwt_required()
1521
- @permissions.require_admin
1522
1521
  def get(self, project_id):
1523
1522
  """
1524
1523
  Retrieve all comments to tasks related to given project.
@@ -1538,6 +1537,12 @@ class ProjectCommentsResource(Resource, ArgsMixin):
1538
1537
  description: All comments to tasks related to given project
1539
1538
  """
1540
1539
  projects_service.get_project(project_id)
1540
+ user_service.check_project_access(project_id)
1541
+ if (
1542
+ permissions.has_vendor_permissions()
1543
+ or permissions.has_client_permissions()
1544
+ ):
1545
+ raise permissions.PermissionDenied
1541
1546
  page = self.get_page()
1542
1547
  return tasks_service.get_comments_for_project(project_id, page)
1543
1548
 
@@ -829,7 +829,9 @@ def _get_task_type_priority_map(project_id):
829
829
 
830
830
  def _is_asset_ready(asset, task, priority_map):
831
831
  is_ready = False
832
- if "ready_for" in asset and asset["ready_for"] is not None:
832
+ if asset["is_shared"] and asset["project_id"] != str(task.project_id):
833
+ is_ready = True
834
+ elif "ready_for" in asset and asset["ready_for"] is not None:
833
835
  priority_ready = priority_map.get(asset["ready_for"], -1) or -1
834
836
  priority_task = priority_map.get(str(task.task_type_id), 0) or 0
835
837
  is_ready = priority_task <= priority_ready
@@ -155,8 +155,8 @@ def create_chat_message(chat_id, person_id, message, files=None):
155
155
  "chat:new-message",
156
156
  data={
157
157
  "chat_id": chat_id,
158
- "chat_message_id": str(message.id),
159
- "last_message": chat.last_message,
158
+ "chat_message_id": serialized_message["id"],
159
+ "last_message": serialized_message["created_at"],
160
160
  },
161
161
  persist=False,
162
162
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zou
3
- Version: 0.19.62
3
+ Version: 0.19.64
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
@@ -41,18 +41,18 @@ Requires-Dist: flask-socketio ==5.4.1
41
41
  Requires-Dist: flask ==3.0.3
42
42
  Requires-Dist: gazu ==0.10.16
43
43
  Requires-Dist: gevent-websocket ==0.10.1
44
- Requires-Dist: gevent ==24.10.3
44
+ Requires-Dist: gevent ==24.11.1
45
45
  Requires-Dist: gunicorn ==23.0.0
46
46
  Requires-Dist: isoweek ==1.3.3
47
47
  Requires-Dist: itsdangerous ==2.2.0
48
48
  Requires-Dist: Jinja2 ==3.1.4
49
49
  Requires-Dist: ldap3 ==2.9.1
50
50
  Requires-Dist: matterhook ==0.2
51
- Requires-Dist: meilisearch ==0.31.5
51
+ Requires-Dist: meilisearch ==0.31.6
52
52
  Requires-Dist: opencv-python ==4.10.0.84
53
53
  Requires-Dist: OpenTimelineIO ==0.17.0
54
54
  Requires-Dist: OpenTimelineIO-Plugins ==0.17.0
55
- Requires-Dist: orjson ==3.10.9
55
+ Requires-Dist: orjson ==3.10.11
56
56
  Requires-Dist: pillow ==11.0.0
57
57
  Requires-Dist: psutil ==6.1.0
58
58
  Requires-Dist: psycopg[binary] ==3.2.3
@@ -62,16 +62,16 @@ Requires-Dist: python-nomad ==2.0.1
62
62
  Requires-Dist: python-slugify ==8.0.4
63
63
  Requires-Dist: python-socketio ==5.11.4
64
64
  Requires-Dist: pytz ==2024.2
65
- Requires-Dist: redis ==5.1.1
65
+ Requires-Dist: redis ==5.2.0
66
66
  Requires-Dist: requests ==2.32.3
67
- Requires-Dist: rq ==1.16.2
67
+ Requires-Dist: rq ==2.0.0
68
68
  Requires-Dist: slackclient ==2.9.4
69
69
  Requires-Dist: sqlalchemy-utils ==0.41.2
70
70
  Requires-Dist: sqlalchemy ==2.0.36
71
71
  Requires-Dist: ua-parser ==0.18.0
72
- Requires-Dist: werkzeug ==3.0.4
72
+ Requires-Dist: werkzeug ==3.0.6
73
73
  Requires-Dist: numpy ==2.0.1 ; python_version == "3.9"
74
- Requires-Dist: numpy ==2.1.2 ; python_version >= "3.10"
74
+ Requires-Dist: numpy ==2.1.3 ; python_version >= "3.10"
75
75
  Provides-Extra: dev
76
76
  Requires-Dist: wheel ; extra == 'dev'
77
77
  Provides-Extra: lint
@@ -81,14 +81,14 @@ Requires-Dist: pre-commit ==4.0.1 ; extra == 'lint'
81
81
  Provides-Extra: monitoring
82
82
  Requires-Dist: prometheus-flask-exporter ==0.23.1 ; extra == 'monitoring'
83
83
  Requires-Dist: pygelf ==0.4.2 ; extra == 'monitoring'
84
- Requires-Dist: sentry-sdk ==2.17.0 ; extra == 'monitoring'
84
+ Requires-Dist: sentry-sdk ==2.18.0 ; extra == 'monitoring'
85
85
  Provides-Extra: prod
86
86
  Requires-Dist: gunicorn ; extra == 'prod'
87
87
  Requires-Dist: gevent ; extra == 'prod'
88
88
  Provides-Extra: test
89
- Requires-Dist: fakeredis ==2.25.1 ; extra == 'test'
89
+ Requires-Dist: fakeredis ==2.26.1 ; extra == 'test'
90
90
  Requires-Dist: mixer ==7.2.2 ; extra == 'test'
91
- Requires-Dist: pytest-cov ==5.0.0 ; extra == 'test'
91
+ Requires-Dist: pytest-cov ==6.0.0 ; extra == 'test'
92
92
  Requires-Dist: pytest ==8.3.3 ; extra == 'test'
93
93
 
94
94
  .. figure:: https://zou.cg-wire.com/kitsu.png
@@ -1,4 +1,4 @@
1
- zou/__init__.py,sha256=unhz4yVdT0xiFqdhlZFjTPNdCDfcWzTATRx59qghN_k,24
1
+ zou/__init__.py,sha256=AE0rp3sVhFtsB8DowQYoE-zLLutz3QrJPjwvcxH2Z-w,24
2
2
  zou/cli.py,sha256=E7rinikQMEAoSzyV4VH2IrTR4HRDBgqHAcYswEfyFnU,18893
3
3
  zou/debug.py,sha256=1fawPbkD4wn0Y9Gk0BiBFSa-CQe5agFi8R9uJYl2Uyk,520
4
4
  zou/event_stream.py,sha256=_tue9Ry3aqCniZpKGhWJaY1Eo_fd6zOAfnzPvh_mJzU,8489
@@ -24,43 +24,43 @@ zou/app/blueprints/concepts/resources.py,sha256=maJNrBAWX0bKbDKtOZc3YFp4nTVtIdkk
24
24
  zou/app/blueprints/crud/__init__.py,sha256=qn7xkEh2EG0mPS_RBmm0GgYr0O1jnmI8ymXZnFWZCz8,8361
25
25
  zou/app/blueprints/crud/asset_instance.py,sha256=va3mw79aPKry2m9PYAmjVePTScigewDjwD1c672f0y0,1335
26
26
  zou/app/blueprints/crud/attachment_file.py,sha256=FJA5nKli-9l4p-Mka-tNRNRFil6dNC7QMN3N2MBBN_w,1346
27
- zou/app/blueprints/crud/base.py,sha256=Xug7fzv_aYFdHsf8Jty5753YmktVOL-7LtKIxBekdqY,16140
27
+ zou/app/blueprints/crud/base.py,sha256=7simulGJtcH1JaWSQCVenxQGD71LPuPL6V9mdOgpsYw,16211
28
28
  zou/app/blueprints/crud/chat.py,sha256=Sq1r0y9ANjS113PUpwgAhnjYsxxLKMCM-a7DJ_icF00,344
29
29
  zou/app/blueprints/crud/chat_message.py,sha256=bEEUoV0sNzu5sntNS6fpLh5NC6wWiycWCXtTE-t4yG4,387
30
- zou/app/blueprints/crud/comments.py,sha256=YH4cllfGloPMcIq1tgpT5pSvKTwNJ1zpkUssrK_OjiU,8334
31
- zou/app/blueprints/crud/custom_action.py,sha256=Nf6S6YBxePg4-nfaPTroIYZGWt9fJEHC719DOKJ8R98,978
30
+ zou/app/blueprints/crud/comments.py,sha256=_FOEs2qNqpOqSmAxu8hI3FWK63ik1Uc7PJS3XU5bTLw,8851
31
+ zou/app/blueprints/crud/custom_action.py,sha256=zz8E1IgtaV44BGC7m9t7YSQ9t_fYTtoxl_qRn20XijI,992
32
32
  zou/app/blueprints/crud/day_off.py,sha256=hr_cSBG-r7i_an2AkRmgTPtzbwojaI6el_JDUHgBBx4,2571
33
- zou/app/blueprints/crud/department.py,sha256=AAN_qxZDQGS-mR1kRS_2qGx1D7PKT3h_Ke3IXtJ_F90,973
34
- zou/app/blueprints/crud/entity.py,sha256=WdAmVoK1nwo_JmzVKls-DV-rK6miu3y9wZELGDo3Fqw,9731
33
+ zou/app/blueprints/crud/department.py,sha256=6UVd4OhloboQAHd6vtDjwdTNgx3tf9XyBAcb4IXnmt0,987
34
+ zou/app/blueprints/crud/entity.py,sha256=3ny1BJv0NHkV6hE8IiKoYGcVaRVKjY__uEwBVKOdvAw,9745
35
35
  zou/app/blueprints/crud/entity_link.py,sha256=PlHGy3RPDUVdwWtOpQegz-wZCcxe9FZw_80nUVBy1Ac,819
36
- zou/app/blueprints/crud/entity_type.py,sha256=Q32S4FCVHYGCcymjETEmjmNOCyWhtw1TpW1gznyY6m8,2332
36
+ zou/app/blueprints/crud/entity_type.py,sha256=fYMtAY6nZjyPy7EUBFgNPhPNJ9a_PN4e8cIURBzeNa8,2346
37
37
  zou/app/blueprints/crud/event.py,sha256=bay2ggg5Oa69lOxNYGkHVQdSKuMxGhk2wqWP7QApKUg,589
38
- zou/app/blueprints/crud/file_status.py,sha256=g2YM_0pscO0GAd-VOzTnl7EF57BS_7zbAwCt1WlNujs,509
39
- zou/app/blueprints/crud/metadata_descriptor.py,sha256=Dc9_HOPCroqI7XDPiO6nrbmLfzaRIR0pFgg41Lq2sj0,2063
38
+ zou/app/blueprints/crud/file_status.py,sha256=vw9NR5HiArorW2pZwxYb701f5ubUIxrNhdhVFnVoDTw,523
39
+ zou/app/blueprints/crud/metadata_descriptor.py,sha256=lerwRK8MZiP8WKNHsUTdn1KBk7A_cTnfAy0BaMKMPgA,2119
40
40
  zou/app/blueprints/crud/milestone.py,sha256=UIMsyCNS7ZRePjo08yyzubLEo6fcK-RAsVvrfjXoclA,839
41
41
  zou/app/blueprints/crud/news.py,sha256=0baKn4OLEVY7ljWgpJEypo2Pgzhlp8GJxjim78oqLtg,344
42
42
  zou/app/blueprints/crud/notification.py,sha256=A-KNH0IDNCXlE4AddNxvmsD_7a9HqHGo_rI-Z_pdzus,530
43
- zou/app/blueprints/crud/organisation.py,sha256=bNGo3Dtir2o_cHk0vDPs4cJw7mRWlSwPf2oA4lDQUyU,859
44
- zou/app/blueprints/crud/output_file.py,sha256=jWSagq4LxwtFQH0XL_LjXaiW9FRn8T4k0tv1EbmPfg0,3954
45
- zou/app/blueprints/crud/output_type.py,sha256=eYJXLPkUCRj9-v5mc3rxqEHM3yycmf6rVAoaOfbnAcU,1998
46
- zou/app/blueprints/crud/person.py,sha256=FPvMt4ChXnfH6DheQL_jagakO6ic123UkOmsIM0cG_s,9281
47
- zou/app/blueprints/crud/playlist.py,sha256=ZXaz-hHPej6XYKo_RUfJ2QnGOh2W8-y9hTkPZCUp7Zk,1876
48
- zou/app/blueprints/crud/preview_background_file.py,sha256=WzOfag5qhz5B3-XDObYRC8TO4X-kIo1sHOnMCV62IEo,2437
49
- zou/app/blueprints/crud/preview_file.py,sha256=252EDEdF-wQaL9ZhqQv5j9z_JKK5WeYwidJfFafArjo,3831
50
- zou/app/blueprints/crud/project.py,sha256=YqBJsWCZsNVE93H2xN0wCXozz7iHBi9vs7cgwb8DTI8,8272
51
- zou/app/blueprints/crud/project_status.py,sha256=7q78eGCJAg4ZofqBJWBeHsLVpmtxfP9Blpg8-ZYduC8,526
43
+ zou/app/blueprints/crud/organisation.py,sha256=DLK0BabSZU2Y4CAoEg5Zkzutb87rCMiyguEC9WdxmoU,873
44
+ zou/app/blueprints/crud/output_file.py,sha256=tz0NOoEUobNa8RMjl195S6uNP7PsPM-ajMOYWdHUhhE,3968
45
+ zou/app/blueprints/crud/output_type.py,sha256=Uu7Q5iv-4SZDnxHkLk0vUE1N4k0bBUivXQUTsc58BU8,2012
46
+ zou/app/blueprints/crud/person.py,sha256=TmxvZfu143TnjAaRqp8MBJ1bBQFnCPMBeZ_wyiUs7KY,9295
47
+ zou/app/blueprints/crud/playlist.py,sha256=he8iXoWnjBVXzkB_y8aGnZ6vQ_7hGSf-ALofLFoqx1U,1890
48
+ zou/app/blueprints/crud/preview_background_file.py,sha256=TRJlVQ3nGOYVkA6kxIlNrip9bjkUaknVNCIUYw8uJYk,2451
49
+ zou/app/blueprints/crud/preview_file.py,sha256=j5tw7fW4m6QUMTg99cwQlq3yZ5WKHfRuUwRlssBkMDU,3845
50
+ zou/app/blueprints/crud/project.py,sha256=nYCnD_0QHaUZsSNAeXmpsJAkNB_G1IWJzK1etfKWEis,8286
51
+ zou/app/blueprints/crud/project_status.py,sha256=XIiIsAfaD5sLZA6wT3UL4FZQpnoOcqPzYfFIWrp9Svs,540
52
52
  zou/app/blueprints/crud/schedule_item.py,sha256=1dbNKbftNG3if38Hzh1uslCAu3BE4jOqWhLV0590A90,1400
53
53
  zou/app/blueprints/crud/search_filter.py,sha256=qR0crZFfaOd2YxFcPMKhAj1SXCc-YW9Wk4UA07dDgMQ,393
54
54
  zou/app/blueprints/crud/search_filter_group.py,sha256=bdCLP1EmSatSNQXW8qYjqXQ1_dqluxUeEe7wEpcP_R0,424
55
- zou/app/blueprints/crud/software.py,sha256=8UmSPMX-V210nlX0k_RafV930tYqPayt2mBOyDSsqNQ,1960
56
- zou/app/blueprints/crud/status_automation.py,sha256=VYgqYlPDmXG38qvACY2UXZNVVqiWjjZM0jD2_2746Kw,2347
57
- zou/app/blueprints/crud/studio.py,sha256=GviLxRFt8SDE9F58MoVLdXLE1DXq9IlaZB23RrQiz5g,937
55
+ zou/app/blueprints/crud/software.py,sha256=oKFINQh3DcVTd0Ap_cvgsgvhrIbGPjVBKucwkRpcI3Q,1974
56
+ zou/app/blueprints/crud/status_automation.py,sha256=BY846JKmFMpTZBZ0DlWXpQ-LHwCpOwAWU8qekK89yk0,2361
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=efhEWUZUs8HMRaze8ORvi8qoZ3fAfJ154BXtZQunBos,5729
60
- zou/app/blueprints/crud/task_status.py,sha256=SAWI7qG_9QsBZY5CpjZABYE0zuCimVzhfZfyEfQ_Rj8,1468
61
- zou/app/blueprints/crud/task_type.py,sha256=c_UIIEJjYpwuy7DB2zADWCppr4wOOyDNqhc4JaeSaJM,1801
59
+ zou/app/blueprints/crud/task.py,sha256=SpiDqppAbwSGY-fZDqTUYGAQPIBFj20Qlje1kzgKuXo,5743
60
+ zou/app/blueprints/crud/task_status.py,sha256=roRbBJtyoaNrXv5nkVIPLH6K5vdJjGQtiWFvqlfbo9s,1482
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
63
- zou/app/blueprints/crud/working_file.py,sha256=mGg1tkmlhyM0-18TWMoEPVIcwT-JTq5qhLx9umH0OGg,3439
63
+ zou/app/blueprints/crud/working_file.py,sha256=z-6x9Ef8RetQeivQ9zaXClge2UjaInZH99cYf15V3ac,3453
64
64
  zou/app/blueprints/edits/__init__.py,sha256=jR6dURRPHZJcU4DVFsNghLW1iGm3CwEzs1LPbdof158,1152
65
65
  zou/app/blueprints/edits/resources.py,sha256=IvgqEhIvjF6OO7VNK6i5w6NKEoFQyKfuZJ7aJxdt5rk,13249
66
66
  zou/app/blueprints/entities/__init__.py,sha256=v-qt2dl3s3tmK_ur-cpDHNPmcL0A6xCybczyuidjUCo,713
@@ -95,7 +95,7 @@ zou/app/blueprints/previews/resources.py,sha256=yuSs7-VOYdeSrTDwktx_3uyugxMN1r73
95
95
  zou/app/blueprints/projects/__init__.py,sha256=Pn3fA5bpNFEPBzxTKJ2foV6osZFflXXSM2l2uZh3ktM,3927
96
96
  zou/app/blueprints/projects/resources.py,sha256=E91Vj9EzId2pxiL50JRfrThiyif1PmzWS1oPeMThzQI,31544
97
97
  zou/app/blueprints/search/__init__.py,sha256=QCjQIY_85l_orhdEiqav_GifjReuwsjZggN3V0GeUVY,356
98
- zou/app/blueprints/search/resources.py,sha256=ni-dX8Xfib_0FonLttoXgntXBR957-xhifPSQHHnOnY,2696
98
+ zou/app/blueprints/search/resources.py,sha256=_QgRlUuxCPgY-ip5r2lGFtXNcGSE579JsCSrVf8ajVU,3093
99
99
  zou/app/blueprints/shots/__init__.py,sha256=HfgLneZBYUMa2OGwIgEZTz8zrIEYFRiYmRbreBPYeYw,4076
100
100
  zou/app/blueprints/shots/resources.py,sha256=_Zkxk_XFwuT_b6vWOx9p3VyMuD2PAo-xKJRATsGjPdQ,49965
101
101
  zou/app/blueprints/source/__init__.py,sha256=H7K-4TDs4pc5EJvcYTYMJBHesxyqsE5-xq7J8ckOS2g,6093
@@ -127,7 +127,7 @@ zou/app/blueprints/source/shotgun/tasks.py,sha256=XXBRe9QhhS-kuZeV3HitOnpf7mmWVx
127
127
  zou/app/blueprints/source/shotgun/team.py,sha256=GF7y2BwDeFJCiidtG68icfCi-uV1-b96YKiH8KR54iE,1819
128
128
  zou/app/blueprints/source/shotgun/versions.py,sha256=8Mb35e5p3FLbbiu6AZb9tJErDKz2pPRBdIYu80Ayj7w,2292
129
129
  zou/app/blueprints/tasks/__init__.py,sha256=pNUqVEVX1KVu1IzRRJNsziPkhWKXqgyvQsNp7LbmIxo,4342
130
- zou/app/blueprints/tasks/resources.py,sha256=b5z4OolidyKdKTP5kuZLk7tDLhgDs5W3rkH4ZWlwB0Y,56020
130
+ zou/app/blueprints/tasks/resources.py,sha256=VjEZPdd80MJ2gPgBVZx7la5EsCGDBLaOHRMgGJgVb4o,56215
131
131
  zou/app/blueprints/user/__init__.py,sha256=H9zCHcVobC6jq6dTToXKAjnZmDA0a9gChHiIP3BcZsc,4586
132
132
  zou/app/blueprints/user/resources.py,sha256=loCigQvPCoRw6nVu_9TIY7pjUByJgk6vutFPSo0MwzI,39891
133
133
  zou/app/file_trees/default.json,sha256=ryUrEmQYE8B_WkzCoQLgmem3N9yNwMIWx9G8p3HfG9o,2310
@@ -183,8 +183,8 @@ zou/app/services/assets_service.py,sha256=J7o1ewK2bevJNjeXyaGp99PH0G5Yxbm2edxfX9
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
186
- zou/app/services/breakdown_service.py,sha256=n6xLoFGSEH2JXUKiXKq2NGVZZg_AIORtA05d5D4uaB4,27480
187
- zou/app/services/chats_service.py,sha256=9jw8Rh9PEovpYu_cxxYicTFQFQhc-ObGlteFQwQCC-M,8273
186
+ zou/app/services/breakdown_service.py,sha256=DJvi5muf3WDcTx9vBVrut6sqarCRUzI2B0Qar4lNHYc,27581
187
+ zou/app/services/chats_service.py,sha256=pqnT-RCltdf9Dp4t-2NtOSawGk0jyNhVPTgERZ_nYvk,8297
188
188
  zou/app/services/comments_service.py,sha256=CUr0CZGkR95OrHDRJnhAZAikBLtWhM-5uLIoxI4gNtA,18589
189
189
  zou/app/services/concepts_service.py,sha256=KGvk6lF5udj3SWn40X9KE8OAigrLCZUKEz9_CW7EMgQ,11440
190
190
  zou/app/services/custom_actions_service.py,sha256=fWISEOOdthadrxeHuacEel5Xj6msn0yWXJQDG1gzvsY,297
@@ -413,9 +413,9 @@ zou/remote/normalize_movie.py,sha256=zNfEY3N1UbAHZfddGONTg2Sff3ieLVWd4dfZa1dpnes
413
413
  zou/remote/playlist.py,sha256=AsDo0bgYhDcd6DfNRV6r6Jj3URWwavE2ZN3VkKRPbLU,3293
414
414
  zou/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
415
415
  zou/utils/movie.py,sha256=u9LCEOvmkxwm-KiZ6jKNdB9LSC6XXUDwJpVx8LkDwJg,16416
416
- zou-0.19.62.dist-info/LICENSE,sha256=dql8h4yceoMhuzlcK0TT_i-NgTFNIZsgE47Q4t3dUYI,34520
417
- zou-0.19.62.dist-info/METADATA,sha256=ihSxeyqLc_VfXdgdBmHLM-u_kg8CG11n1xgENXh9m8Y,6676
418
- zou-0.19.62.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
419
- zou-0.19.62.dist-info/entry_points.txt,sha256=PelQoIx3qhQ_Tmne7wrLY-1m2izuzgpwokoURwSohy4,130
420
- zou-0.19.62.dist-info/top_level.txt,sha256=4S7G_jk4MzpToeDItHGjPhHx_fRdX52zJZWTD4SL54g,4
421
- zou-0.19.62.dist-info/RECORD,,
416
+ zou-0.19.64.dist-info/LICENSE,sha256=dql8h4yceoMhuzlcK0TT_i-NgTFNIZsgE47Q4t3dUYI,34520
417
+ zou-0.19.64.dist-info/METADATA,sha256=C-XgzvidRw9iFYCbEg3gXBgcVa7XVocH5OdY0dPG1Pw,6676
418
+ zou-0.19.64.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
419
+ zou-0.19.64.dist-info/entry_points.txt,sha256=PelQoIx3qhQ_Tmne7wrLY-1m2izuzgpwokoURwSohy4,130
420
+ zou-0.19.64.dist-info/top_level.txt,sha256=4S7G_jk4MzpToeDItHGjPhHx_fRdX52zJZWTD4SL54g,4
421
+ zou-0.19.64.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.5.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes