zou 0.20.15__py3-none-any.whl → 0.20.17__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 +1 -1
- zou/app/blueprints/assets/resources.py +1 -2
- zou/app/blueprints/comments/resources.py +4 -3
- zou/app/blueprints/crud/task.py +0 -7
- zou/app/blueprints/previews/resources.py +40 -32
- zou/app/config.py +1 -0
- zou/app/models/attachment_file.py +9 -6
- zou/app/models/chat.py +8 -5
- zou/app/models/preview_file.py +17 -13
- zou/app/services/assets_service.py +1 -1
- zou/app/services/playlists_service.py +8 -11
- zou/app/services/user_service.py +1 -0
- zou/app/utils/fs.py +3 -0
- zou/app/utils/monitoring.py +2 -0
- {zou-0.20.15.dist-info → zou-0.20.17.dist-info}/METADATA +9 -9
- {zou-0.20.15.dist-info → zou-0.20.17.dist-info}/RECORD +20 -20
- {zou-0.20.15.dist-info → zou-0.20.17.dist-info}/LICENSE +0 -0
- {zou-0.20.15.dist-info → zou-0.20.17.dist-info}/WHEEL +0 -0
- {zou-0.20.15.dist-info → zou-0.20.17.dist-info}/entry_points.txt +0 -0
- {zou-0.20.15.dist-info → zou-0.20.17.dist-info}/top_level.txt +0 -0
zou/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.20.
|
|
1
|
+
__version__ = "0.20.17"
|
|
@@ -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
|
|
152
|
+
return assets_service.get_assets_and_tasks(criterions)
|
|
154
153
|
|
|
155
154
|
|
|
156
155
|
class AssetTypeResource(Resource):
|
|
@@ -83,9 +83,10 @@ class DownloadAttachmentResource(Resource):
|
|
|
83
83
|
),
|
|
84
84
|
)
|
|
85
85
|
except Exception:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
87
|
+
current_app.logger.error(
|
|
88
|
+
f"Attachment file was not found for: {attachment_file_id}"
|
|
89
|
+
)
|
|
89
90
|
abort(404)
|
|
90
91
|
|
|
91
92
|
|
zou/app/blueprints/crud/task.py
CHANGED
|
@@ -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
|
|
|
@@ -653,9 +653,10 @@ class PreviewFileMovieResource(BasePreviewFileResource):
|
|
|
653
653
|
instance_id, last_modified=self.last_modified
|
|
654
654
|
)
|
|
655
655
|
except FileNotFound:
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
656
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
657
|
+
current_app.logger.error(
|
|
658
|
+
"Movie file was not found for: %s" % instance_id
|
|
659
|
+
)
|
|
659
660
|
abort(404)
|
|
660
661
|
|
|
661
662
|
|
|
@@ -698,9 +699,10 @@ class PreviewFileLowMovieResource(BasePreviewFileResource):
|
|
|
698
699
|
instance_id, last_modified=self.last_modified
|
|
699
700
|
)
|
|
700
701
|
except FileNotFound:
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
702
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
703
|
+
current_app.logger.error(
|
|
704
|
+
"Movie file was not found for: %s" % instance_id
|
|
705
|
+
)
|
|
704
706
|
abort(404)
|
|
705
707
|
|
|
706
708
|
|
|
@@ -740,9 +742,10 @@ class PreviewFileMovieDownloadResource(BasePreviewFileResource):
|
|
|
740
742
|
last_modified=self.last_modified,
|
|
741
743
|
)
|
|
742
744
|
except FileNotFound:
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
745
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
746
|
+
current_app.logger.error(
|
|
747
|
+
"Movie file was not found for: %s" % instance_id
|
|
748
|
+
)
|
|
746
749
|
abort(404)
|
|
747
750
|
|
|
748
751
|
|
|
@@ -800,9 +803,10 @@ class PreviewFileResource(BasePreviewFileResource):
|
|
|
800
803
|
)
|
|
801
804
|
|
|
802
805
|
except FileNotFound:
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
807
|
+
current_app.logger.error(
|
|
808
|
+
"Non-movie file was not found for: %s" % instance_id
|
|
809
|
+
)
|
|
806
810
|
abort(404)
|
|
807
811
|
|
|
808
812
|
|
|
@@ -869,9 +873,10 @@ class PreviewFileDownloadResource(BasePreviewFileResource):
|
|
|
869
873
|
last_modified=self.last_modified,
|
|
870
874
|
)
|
|
871
875
|
except FileNotFound:
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
876
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
877
|
+
current_app.logger.error(
|
|
878
|
+
"Standard file was not found for: %s" % instance_id
|
|
879
|
+
)
|
|
875
880
|
abort(404)
|
|
876
881
|
|
|
877
882
|
|
|
@@ -935,10 +940,11 @@ class AttachmentThumbnailResource(Resource):
|
|
|
935
940
|
),
|
|
936
941
|
)
|
|
937
942
|
except FileNotFound:
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
943
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
944
|
+
current_app.logger.error(
|
|
945
|
+
"Picture file was not found for attachment: %s"
|
|
946
|
+
% (attachment_file_id)
|
|
947
|
+
)
|
|
942
948
|
abort(404)
|
|
943
949
|
|
|
944
950
|
|
|
@@ -982,9 +988,10 @@ class BasePreviewPictureResource(BasePreviewFileResource):
|
|
|
982
988
|
last_modified=self.last_modified,
|
|
983
989
|
)
|
|
984
990
|
except FileNotFound:
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
991
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
992
|
+
current_app.logger.error(
|
|
993
|
+
"Picture file was not found for: %s" % instance_id
|
|
994
|
+
)
|
|
988
995
|
abort(404)
|
|
989
996
|
|
|
990
997
|
|
|
@@ -1166,14 +1173,13 @@ class BaseThumbnailResource(Resource):
|
|
|
1166
1173
|
),
|
|
1167
1174
|
)
|
|
1168
1175
|
except FileNotFound:
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1176
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
1177
|
+
current_app.logger.error(
|
|
1178
|
+
"Thumbnail file was not found for: %s" % instance_id
|
|
1179
|
+
)
|
|
1172
1180
|
abort(404)
|
|
1173
|
-
except IOError:
|
|
1174
|
-
current_app.logger.error(
|
|
1175
|
-
"Thumbnail file was not found for: %s" % instance_id
|
|
1176
|
-
)
|
|
1181
|
+
except IOError as e:
|
|
1182
|
+
current_app.logger.error(e)
|
|
1177
1183
|
abort(404)
|
|
1178
1184
|
|
|
1179
1185
|
|
|
@@ -1680,9 +1686,11 @@ class PreviewBackgroundFileResource(Resource):
|
|
|
1680
1686
|
),
|
|
1681
1687
|
)
|
|
1682
1688
|
except FileNotFound:
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1689
|
+
if config.LOG_FILE_NOT_FOUND:
|
|
1690
|
+
current_app.logger.error(
|
|
1691
|
+
"Preview background file was not found for: %s"
|
|
1692
|
+
% instance_id
|
|
1693
|
+
)
|
|
1686
1694
|
raise PreviewBackgroundFileNotFoundException
|
|
1687
1695
|
|
|
1688
1696
|
|
zou/app/config.py
CHANGED
|
@@ -142,6 +142,7 @@ LOGS_MODE = os.getenv("LOGS_MODE", "default")
|
|
|
142
142
|
LOGS_HOST = os.getenv("LOGS_HOST", "localhost")
|
|
143
143
|
LOGS_PORT = os.getenv("LOGS_PORT", 2202)
|
|
144
144
|
LOGS_TOKEN = os.getenv("LOGS_TOKEN")
|
|
145
|
+
LOG_FILE_NOT_FOUND = envtobool("LOG_FILE_NOT_FOUND", True)
|
|
145
146
|
|
|
146
147
|
SENTRY_ENABLED = envtobool("SENTRY_ENABLED", False)
|
|
147
148
|
SENTRY_DSN = os.getenv("SENTRY_DSN", "")
|
|
@@ -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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
+
)
|
zou/app/models/preview_file.py
CHANGED
|
@@ -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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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={},
|
|
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
|
|
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
|
-
|
|
269
|
-
for
|
|
270
|
-
|
|
271
|
-
previews[entity_id][task_type_id]
|
|
272
|
-
|
|
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:
|
zou/app/services/user_service.py
CHANGED
zou/app/utils/fs.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import shutil
|
|
3
3
|
import time
|
|
4
|
+
from flask_fs.errors import FileNotFound
|
|
4
5
|
|
|
5
6
|
import errno
|
|
6
7
|
|
|
@@ -44,6 +45,8 @@ def get_file_path_and_file(
|
|
|
44
45
|
):
|
|
45
46
|
if config.FS_BACKEND == "local":
|
|
46
47
|
file_path = get_local_path(prefix, instance_id)
|
|
48
|
+
if is_unvalid_file(file_path, file_size):
|
|
49
|
+
raise FileNotFound
|
|
47
50
|
else:
|
|
48
51
|
file_path = os.path.join(
|
|
49
52
|
config.TMP_DIR, "cache-%s-%s.%s" % (prefix, instance_id, extension)
|
zou/app/utils/monitoring.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from flask_jwt_extended.exceptions import NoAuthorizationError
|
|
2
2
|
from jwt import ExpiredSignatureError
|
|
3
3
|
from werkzeug.exceptions import Forbidden, NotFound
|
|
4
|
+
from flask_fs.errors import FileNotFound
|
|
4
5
|
|
|
5
6
|
from zou.app import config
|
|
6
7
|
from zou.app.utils import permissions
|
|
@@ -37,6 +38,7 @@ def init_monitoring(app):
|
|
|
37
38
|
NotFound,
|
|
38
39
|
Forbidden,
|
|
39
40
|
ExpiredSignatureError,
|
|
41
|
+
FileNotFound,
|
|
40
42
|
],
|
|
41
43
|
)
|
|
42
44
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: zou
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.17
|
|
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,7 +41,7 @@ Requires-Dist: flask-jwt-extended==4.7.1
|
|
|
41
41
|
Requires-Dist: flask-migrate==4.1.0
|
|
42
42
|
Requires-Dist: flask-socketio==5.5.1
|
|
43
43
|
Requires-Dist: flask==3.1.0
|
|
44
|
-
Requires-Dist: gazu==0.10.
|
|
44
|
+
Requires-Dist: gazu==0.10.27
|
|
45
45
|
Requires-Dist: gevent-websocket==0.10.1
|
|
46
46
|
Requires-Dist: gevent==24.11.1
|
|
47
47
|
Requires-Dist: gunicorn==23.0.0
|
|
@@ -52,17 +52,17 @@ Requires-Dist: ldap3==2.9.1
|
|
|
52
52
|
Requires-Dist: matterhook==0.2
|
|
53
53
|
Requires-Dist: meilisearch==0.33.1
|
|
54
54
|
Requires-Dist: numpy==2.0.1; python_version == "3.9"
|
|
55
|
-
Requires-Dist: numpy==2.2.
|
|
55
|
+
Requires-Dist: numpy==2.2.3; python_version >= "3.10"
|
|
56
56
|
Requires-Dist: opencv-python==4.11.0.86
|
|
57
57
|
Requires-Dist: OpenTimelineIO==0.17.0
|
|
58
58
|
Requires-Dist: OpenTimelineIO-Plugins==0.17.0
|
|
59
59
|
Requires-Dist: orjson==3.10.15
|
|
60
60
|
Requires-Dist: pillow==11.1.0
|
|
61
|
-
Requires-Dist: psutil==
|
|
61
|
+
Requires-Dist: psutil==7.0.0
|
|
62
62
|
Requires-Dist: psycopg[binary]==3.2.4
|
|
63
63
|
Requires-Dist: pyotp==2.9.0
|
|
64
|
-
Requires-Dist: pysaml2==7.5.
|
|
65
|
-
Requires-Dist: python-nomad==2.0
|
|
64
|
+
Requires-Dist: pysaml2==7.5.2
|
|
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.
|
|
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
|
|
@@ -80,14 +80,14 @@ Requires-Dist: gevent; extra == "prod"
|
|
|
80
80
|
Provides-Extra: dev
|
|
81
81
|
Requires-Dist: wheel; extra == "dev"
|
|
82
82
|
Provides-Extra: test
|
|
83
|
-
Requires-Dist: fakeredis==2.
|
|
83
|
+
Requires-Dist: fakeredis==2.27.0; extra == "test"
|
|
84
84
|
Requires-Dist: mixer==7.2.2; extra == "test"
|
|
85
85
|
Requires-Dist: pytest-cov==6.0.0; extra == "test"
|
|
86
86
|
Requires-Dist: pytest==8.3.4; extra == "test"
|
|
87
87
|
Provides-Extra: monitoring
|
|
88
88
|
Requires-Dist: prometheus-flask-exporter==0.23.1; extra == "monitoring"
|
|
89
89
|
Requires-Dist: pygelf==0.4.2; extra == "monitoring"
|
|
90
|
-
Requires-Dist: sentry-sdk==2.
|
|
90
|
+
Requires-Dist: sentry-sdk==2.21.0; extra == "monitoring"
|
|
91
91
|
Provides-Extra: lint
|
|
92
92
|
Requires-Dist: autoflake==2.3.1; extra == "lint"
|
|
93
93
|
Requires-Dist: black==25.1.0; extra == "lint"
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
zou/__init__.py,sha256=
|
|
1
|
+
zou/__init__.py,sha256=eM75ih3rRMeRs2KAFT1C-wtFC_fhUYsPhS2X2Aa8ILk,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
|
|
5
5
|
zou/job_settings.py,sha256=_aqBhujt2Q8sXRWIbgbDf-LUdXRdBimdtTc-fZbiXoY,202
|
|
6
6
|
zou/app/__init__.py,sha256=zGmaBGBHSS_Px34I3_WZmcse62G_AZJArjm4F6TwmRk,7100
|
|
7
7
|
zou/app/api.py,sha256=JTB_IMVO8EOoyqx9KdRkiIix0chOLi0yGDY-verUJXA,5127
|
|
8
|
-
zou/app/config.py,sha256=
|
|
8
|
+
zou/app/config.py,sha256=qHf5txUICLVbzQH1dTKrrUU1pVzgpevNu27DbJPP0vg,6746
|
|
9
9
|
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=
|
|
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
|
|
@@ -18,7 +18,7 @@ zou/app/blueprints/breakdown/resources.py,sha256=pmGlHLiXFsPRbxf403SiVgGiaBbtK8G
|
|
|
18
18
|
zou/app/blueprints/chats/__init__.py,sha256=YGmwGvddg3MgSYVIh-hmkX8t2em9_LblxBeJzFqFJD4,558
|
|
19
19
|
zou/app/blueprints/chats/resources.py,sha256=4yLFermdwOsnBLs9nx8yxuHWLar24uQWQy0XgsUNDD0,5950
|
|
20
20
|
zou/app/blueprints/comments/__init__.py,sha256=WqpJ7-_dK1cInGTFJAxQ7syZtPCotwq2oO20UEnk1h4,1532
|
|
21
|
-
zou/app/blueprints/comments/resources.py,sha256=
|
|
21
|
+
zou/app/blueprints/comments/resources.py,sha256=Jy20lMmdP-Zeg90P8-k-HQYfE83xW5DMK8B5WX5uFvs,18864
|
|
22
22
|
zou/app/blueprints/concepts/__init__.py,sha256=sP_P4mfYvfMcgeE6MHZYP3eD0Lz0Lwit5-CFuVnA-Jg,894
|
|
23
23
|
zou/app/blueprints/concepts/resources.py,sha256=maJNrBAWX0bKbDKtOZc3YFp4nTVtIdkkAA4H9WA9n1Y,10140
|
|
24
24
|
zou/app/blueprints/crud/__init__.py,sha256=qn7xkEh2EG0mPS_RBmm0GgYr0O1jnmI8ymXZnFWZCz8,8361
|
|
@@ -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=
|
|
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
|
|
@@ -91,7 +91,7 @@ zou/app/blueprints/persons/resources.py,sha256=PfK6epzRn_kbqN6g9qYiH9XWStFlccTVC
|
|
|
91
91
|
zou/app/blueprints/playlists/__init__.py,sha256=vuEk1F3hFHsmuKWhdepMoLyOzmNKDn1YrjjfcaIz0lQ,1596
|
|
92
92
|
zou/app/blueprints/playlists/resources.py,sha256=alRlMHypUFErXLsEYxpFK84cdjFJ3YWwamZtW0KcwLY,17211
|
|
93
93
|
zou/app/blueprints/previews/__init__.py,sha256=ihC6OQ9AUjnZ2JeMnjRh_tKGO0UmAjOwhZnOivc3BnQ,4460
|
|
94
|
-
zou/app/blueprints/previews/resources.py,sha256=
|
|
94
|
+
zou/app/blueprints/previews/resources.py,sha256=gEOPfX47HEfcEHRS-gmF5Ui1ASaxoVt64WNvtLwcPXU,53614
|
|
95
95
|
zou/app/blueprints/projects/__init__.py,sha256=Pn3fA5bpNFEPBzxTKJ2foV6osZFflXXSM2l2uZh3ktM,3927
|
|
96
96
|
zou/app/blueprints/projects/resources.py,sha256=1WBS2FyaY1RSA_T-BdPnc8X9myjTJ127bMDigyoAklk,31979
|
|
97
97
|
zou/app/blueprints/search/__init__.py,sha256=QCjQIY_85l_orhdEiqav_GifjReuwsjZggN3V0GeUVY,356
|
|
@@ -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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
@@ -213,7 +213,7 @@ zou/app/services/sync_service.py,sha256=kJ1LGMNfPh9_BDwGTfoYWHrLZ8OlT0hWk-R8wNt0
|
|
|
213
213
|
zou/app/services/tasks_service.py,sha256=6lJHxVAQ0dxHdO8_2PaVqLwy87s44kvLRj6S9dw-Bvs,68534
|
|
214
214
|
zou/app/services/telemetry_services.py,sha256=xQm1h1t_JxSFW59zQGf4NuNdUi1UfMa_6pQ-ytRbmGA,1029
|
|
215
215
|
zou/app/services/time_spents_service.py,sha256=H9X-60s6oqtY9rtU-K2jKwUSljfkdGlf_9wMr3iVfIA,15158
|
|
216
|
-
zou/app/services/user_service.py,sha256=
|
|
216
|
+
zou/app/services/user_service.py,sha256=74gi_ao4gQenmN95Yf2aRmVyTFTJ8TIZO3joov2SNJ4,50346
|
|
217
217
|
zou/app/stores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
218
218
|
zou/app/stores/auth_tokens_store.py,sha256=-qOJPybLHvnMOq3PWk073OW9HJwOHGhFLZeOIlX1UVw,1290
|
|
219
219
|
zou/app/stores/file_store.py,sha256=yLQDM6mNbj9oe0vsWdBqun7D8Dw-eSjD1yHCCftX0OI,4045
|
|
@@ -235,10 +235,10 @@ zou/app/utils/events.py,sha256=a_W70v0Oi4QJwJzCLVUQ8RTwjlWo-VzAT_hQZCz2HQU,3024
|
|
|
235
235
|
zou/app/utils/fido.py,sha256=qhUWZdDCvgWqydYS4DN1SVkNwdAQkRSV9zs0Xw9O15E,536
|
|
236
236
|
zou/app/utils/fields.py,sha256=uZbKRqeG5_SmbOu3K0W-i-KmlTI1Y7X4rlKcVnu4DzI,3475
|
|
237
237
|
zou/app/utils/flask.py,sha256=t0sC6yEDyzn-vCsijWzI9lpNWoxAYWfui25QtjQi_64,1822
|
|
238
|
-
zou/app/utils/fs.py,sha256=
|
|
238
|
+
zou/app/utils/fs.py,sha256=EIRfKJXtHubVVi8FlDd9s9TcUok91LvRgU0l_B3Fq3w,3356
|
|
239
239
|
zou/app/utils/git.py,sha256=MhmAYvEY-bXsnLvcHUW_NY5V636lJL3H-cdNrTHgLGk,114
|
|
240
240
|
zou/app/utils/logs.py,sha256=lB6kyFmeANxCILUULLqGN8fuq9IY5FcbrVWmLdqWs2U,1404
|
|
241
|
-
zou/app/utils/monitoring.py,sha256=
|
|
241
|
+
zou/app/utils/monitoring.py,sha256=XCpl0QshKD_tSok1vrIu9lB97JsvKLhvxJo3UyeqEoQ,2153
|
|
242
242
|
zou/app/utils/permissions.py,sha256=Oq91C_lN6aGVCtCVUqQhijMQEjXOiMezbngpjybzzQk,3426
|
|
243
243
|
zou/app/utils/query.py,sha256=q8ETGPAqnz0Pt9xWoQt5o7FFAVYUKVCJiWpwefIr-iU,4592
|
|
244
244
|
zou/app/utils/redis.py,sha256=xXEh9pl-3qPbr89dKHvcXSUTC6hd77vv_N8PVcRRZTE,377
|
|
@@ -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.
|
|
420
|
-
zou-0.20.
|
|
421
|
-
zou-0.20.
|
|
422
|
-
zou-0.20.
|
|
423
|
-
zou-0.20.
|
|
424
|
-
zou-0.20.
|
|
419
|
+
zou-0.20.17.dist-info/LICENSE,sha256=dql8h4yceoMhuzlcK0TT_i-NgTFNIZsgE47Q4t3dUYI,34520
|
|
420
|
+
zou-0.20.17.dist-info/METADATA,sha256=lkJtGd3fG9hUuzaxsrEAsG7_CvPPOcSwwTgA95p83bI,6733
|
|
421
|
+
zou-0.20.17.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
422
|
+
zou-0.20.17.dist-info/entry_points.txt,sha256=PelQoIx3qhQ_Tmne7wrLY-1m2izuzgpwokoURwSohy4,130
|
|
423
|
+
zou-0.20.17.dist-info/top_level.txt,sha256=4S7G_jk4MzpToeDItHGjPhHx_fRdX52zJZWTD4SL54g,4
|
|
424
|
+
zou-0.20.17.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|