zou 0.20.73__py3-none-any.whl → 0.20.75__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.
@@ -209,6 +209,10 @@ class AssetsCsvImportResource(BaseCsvProjectImportResource):
209
209
  else:
210
210
  asset_new_values["data"] = entity.data.copy()
211
211
 
212
+ resolution = row.get("Resolution", None)
213
+ if resolution is not None:
214
+ asset_new_values["data"]["resolution"] = resolution
215
+
212
216
  for name, descriptor in self.descriptor_fields.items():
213
217
  if name in row:
214
218
  if descriptor["data_type"] == "boolean":
@@ -229,6 +229,10 @@ class ShotsCsvImportResource(BaseCsvProjectImportResource):
229
229
  if fps is not None:
230
230
  shot_new_values["data"]["fps"] = fps
231
231
 
232
+ resolution = row.get("Resolution", None)
233
+ if resolution is not None:
234
+ shot_new_values["data"]["resolution"] = resolution
235
+
232
236
  for name, descriptor in self.descriptor_fields.items():
233
237
  if name in row:
234
238
  if descriptor["data_type"] == "boolean":
@@ -2029,19 +2029,14 @@ class OpenTasksStatsResource(Resource, ArgsMixin):
2029
2029
  additionalProperties:
2030
2030
  type: object
2031
2031
  properties:
2032
- task_types:
2033
- type: object
2034
- additionalProperties:
2035
- type: object
2036
- properties:
2037
- total:
2038
- type: integer
2039
- done:
2040
- type: integer
2041
- estimation:
2042
- type: integer
2043
- duration:
2044
- type: integer
2032
+ total:
2033
+ type: integer
2034
+ done:
2035
+ type: integer
2036
+ estimation:
2037
+ type: integer
2038
+ duration:
2039
+ type: integer
2045
2040
  400:
2046
2041
  description: Bad request
2047
2042
  """
@@ -617,7 +617,7 @@ class FiltersResource(Resource, ArgsMixin):
617
617
  requestBody:
618
618
  required: true
619
619
  content:
620
- application/x-www-form-urlencoded:
620
+ application/json:
621
621
  schema:
622
622
  type: object
623
623
  required:
@@ -781,7 +781,7 @@ class FilterGroupsResource(Resource, ArgsMixin):
781
781
  requestBody:
782
782
  required: true
783
783
  content:
784
- application/x-www-form-urlencoded:
784
+ application/json:
785
785
  schema:
786
786
  type: object
787
787
  required:
@@ -963,8 +963,7 @@ class DesktopLoginLogsResource(Resource, ArgsMixin):
963
963
 
964
964
  def post(self):
965
965
  """
966
- Create a desktop login log. Desktop login logs can
967
- only be created by the current user.
966
+ Create a desktop login log.
968
967
  ---
969
968
  tags:
970
969
  - User
@@ -973,7 +972,7 @@ class DesktopLoginLogsResource(Resource, ArgsMixin):
973
972
  requestBody:
974
973
  required: true
975
974
  content:
976
- application/x-www-form-urlencoded:
975
+ application/json:
977
976
  schema:
978
977
  type: object
979
978
  properties:
@@ -1149,7 +1148,7 @@ class NotificationResource(Resource, ArgsMixin):
1149
1148
  requestBody:
1150
1149
  required: true
1151
1150
  content:
1152
- application/x-www-form-urlencoded:
1151
+ application/json:
1153
1152
  schema:
1154
1153
  type: object
1155
1154
  properties:
@@ -1174,13 +1173,13 @@ class MarkAllNotificationsAsReadResource(Resource):
1174
1173
 
1175
1174
  def post(self):
1176
1175
  """
1177
- Mark all notifications as read for the current user.
1176
+ Mark all notifications as read.
1178
1177
  ---
1178
+ description: It applies to all notifications of the current user.
1179
1179
  tags:
1180
1180
  - User
1181
1181
  responses:
1182
1182
  200:
1183
- description: All notifications marked as read
1184
1183
  content:
1185
1184
  application/json:
1186
1185
  schema:
@@ -1198,8 +1197,9 @@ class HasTaskSubscribedResource(Resource):
1198
1197
 
1199
1198
  def get(self, task_id):
1200
1199
  """
1201
- Return true if current user has subscribed to given task.
1200
+ Check task subscription
1202
1201
  ---
1202
+ description: Return true if current user has subscribed to given task.
1203
1203
  tags:
1204
1204
  - User
1205
1205
  parameters:
@@ -1227,12 +1227,13 @@ class TaskSubscribeResource(Resource):
1227
1227
 
1228
1228
  def post(self, task_id):
1229
1229
  """
1230
- Create a subscription entry for given task and current user. When a user
1231
- subscribes, he gets notified everytime a comment is posted on the task.
1230
+ Create a subscription entry
1232
1231
  ---
1233
1232
  tags:
1234
1233
  - User
1235
- description: When a user subscribes, he gets notified everytime a
1234
+ description: It applies to given task and current user. When a user
1235
+ subscribed, he gets notified everytime a comment is posted on the task.
1236
+ When a user subscribes, he gets notified everytime a
1236
1237
  comment is posted on the task.
1237
1238
  parameters:
1238
1239
  - in: path
zou/app/models/day_off.py CHANGED
@@ -19,3 +19,6 @@ class DayOff(db.Model, BaseMixin, SerializerMixin):
19
19
  db.UniqueConstraint("person_id", "date", name="day_off_uc"),
20
20
  db.CheckConstraint("date <= end_date", name="day_off_date_check"),
21
21
  )
22
+
23
+ def serialize_safe(self, **kwargs):
24
+ return self.serialize(ignored_attrs=["description"], **kwargs)
zou/app/models/person.py CHANGED
@@ -192,15 +192,18 @@ class Person(db.Model, BaseMixin, SerializerMixin):
192
192
  data["fido_devices"] = self.fido_devices()
193
193
  return data
194
194
 
195
- def serialize_safe(self, relations=False, milliseconds=False):
196
- data = self.serialize(relations=relations, milliseconds=milliseconds)
197
- del data["password"]
198
- del data["totp_secret"]
199
- del data["email_otp_secret"]
200
- del data["otp_recovery_codes"]
201
- del data["fido_credentials"]
202
- del data["jti"]
203
- return data
195
+ def serialize_safe(self, **kwargs):
196
+ return self.serialize(
197
+ ignored_attrs=[
198
+ "password",
199
+ "totp_secret",
200
+ "email_otp_secret",
201
+ "otp_recovery_codes",
202
+ "fido_credentials",
203
+ "jti",
204
+ ],
205
+ **kwargs,
206
+ )
204
207
 
205
208
  def present_minimal(self, relations=False, milliseconds=False):
206
209
  data = SerializerMixin.serialize(
@@ -303,9 +303,12 @@ def _run_status_automation(automation, task, person_id):
303
303
 
304
304
  elif automation["out_field_type"] == "ready_for":
305
305
  try:
306
- asset = assets_service.update_asset(
307
- task["entity_id"],
308
- {"ready_for": automation["out_task_type_id"]},
306
+ data = {"ready_for": automation["out_task_type_id"]}
307
+ asset = assets_service.update_asset(task["entity_id"], data)
308
+ events.emit(
309
+ "asset:update",
310
+ {"asset_id": task["entity_id"], "data": data},
311
+ project_id=task["project_id"],
309
312
  )
310
313
  breakdown_service.refresh_casting_stats(asset)
311
314
  except AssetNotFoundException:
@@ -1,6 +1,7 @@
1
1
  import datetime
2
2
 
3
3
  from dateutil import relativedelta
4
+ from collections import defaultdict
4
5
 
5
6
  from sqlalchemy import func
6
7
  from sqlalchemy.exc import DataError
@@ -18,7 +19,7 @@ from zou.app.models.person import Person
18
19
 
19
20
  from zou.app.utils import fields, date_helpers
20
21
 
21
- from zou.app.services import user_service
22
+ from zou.app.services import user_service, projects_service
22
23
  from zou.app.services.exception import WrongDateFormatException
23
24
 
24
25
 
@@ -572,3 +573,70 @@ def get_project_month_time_spents(project_id, timezone=None):
572
573
  "total"
573
574
  ] += time_spent.duration
574
575
  return data
576
+
577
+
578
+ def get_project_task_type_time_spents(
579
+ project_id, task_type_id, start_date, end_date
580
+ ):
581
+ """
582
+ Returns time spents for project and task type in a date range.
583
+ """
584
+ try:
585
+ query = TimeSpent.query.join(Task).filter(
586
+ Task.project_id == project_id, Task.task_type_id == task_type_id
587
+ )
588
+ if start_date is not None:
589
+ query = query.filter(
590
+ TimeSpent.date >= func.cast(start_date, TimeSpent.date.type)
591
+ )
592
+ if end_date is not None:
593
+ query = query.filter(
594
+ TimeSpent.date <= func.cast(end_date, TimeSpent.date.type)
595
+ )
596
+
597
+ time_spents = query.order_by(TimeSpent.date.desc()).all()
598
+
599
+ result = defaultdict(list)
600
+ for ts in time_spents:
601
+ result[str(ts.person_id)].append(ts.serialize())
602
+
603
+ except DataError:
604
+ raise WrongDateFormatException
605
+ return dict(result)
606
+
607
+
608
+ def get_day_offs_between_for_project(
609
+ project_id,
610
+ start_date=None,
611
+ end_date=None,
612
+ safe=False,
613
+ current_user_id=None,
614
+ ):
615
+ """
616
+ Get all day off entries for project, start and end date.
617
+ """
618
+ project = projects_service.get_project(project_id, relations=True)
619
+ try:
620
+ query = DayOff.query.filter(DayOff.person_id.in_(project["team"]))
621
+ if start_date is not None:
622
+ query = query.filter(
623
+ func.cast(start_date, DayOff.end_date.type) <= DayOff.end_date
624
+ )
625
+ if end_date is not None:
626
+ query = query.filter(
627
+ func.cast(end_date, DayOff.date.type) >= DayOff.date
628
+ )
629
+
630
+ days_offs = query.order_by(DayOff.date).all()
631
+
632
+ result = defaultdict(list)
633
+ for day_off in days_offs:
634
+ day_off_person_id = str(day_off.person_id)
635
+ result[day_off_person_id].append(
636
+ day_off.serialize_safe()
637
+ if safe and current_user_id != day_off_person_id
638
+ else day_off.serialize()
639
+ )
640
+ except DataError:
641
+ raise WrongDateFormatException
642
+ return dict(result)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zou
3
- Version: 0.20.73
3
+ Version: 0.20.75
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
@@ -21,8 +21,8 @@ Classifier: Topic :: Multimedia :: Graphics
21
21
  Requires-Python: >=3.10, <3.14
22
22
  License-File: LICENSE
23
23
  Requires-Dist: babel==2.17.0
24
- Requires-Dist: click==8.2.1
25
- Requires-Dist: discord.py==2.6.2
24
+ Requires-Dist: click==8.3.0
25
+ Requires-Dist: discord.py==2.6.3
26
26
  Requires-Dist: email-validator==2.3.0
27
27
  Requires-Dist: ffmpeg-python==0.2.0
28
28
  Requires-Dist: fido2==2.0.0
@@ -41,7 +41,7 @@ Requires-Dist: flask-socketio==5.5.1
41
41
  Requires-Dist: flask==3.1.2
42
42
  Requires-Dist: gazu==0.10.36
43
43
  Requires-Dist: gevent-websocket==0.10.1
44
- Requires-Dist: gevent==25.8.1
44
+ Requires-Dist: gevent==25.9.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
@@ -55,8 +55,8 @@ Requires-Dist: OpenTimelineIO==0.17.0
55
55
  Requires-Dist: OpenTimelineIO-Plugins==0.17.0
56
56
  Requires-Dist: orjson==3.11.3
57
57
  Requires-Dist: pillow==11.3.0
58
- Requires-Dist: psutil==7.0.0
59
- Requires-Dist: psycopg[binary]==3.2.9
58
+ Requires-Dist: psutil==7.1.0
59
+ Requires-Dist: psycopg[binary]==3.2.10
60
60
  Requires-Dist: pyotp==2.9.0
61
61
  Requires-Dist: pysaml2==7.5.2
62
62
  Requires-Dist: python-nomad==2.1.0
@@ -65,11 +65,11 @@ Requires-Dist: python-socketio==5.13.0
65
65
  Requires-Dist: pytz==2025.2
66
66
  Requires-Dist: redis==5.2.1
67
67
  Requires-Dist: requests==2.32.5
68
- Requires-Dist: rq==2.5.0
68
+ Requires-Dist: rq==2.6.0
69
69
  Requires-Dist: semver==3.0.4
70
70
  Requires-Dist: slackclient==2.9.4
71
71
  Requires-Dist: spdx-license-list==3.27.0
72
- Requires-Dist: sqlalchemy_utils==0.41.2
72
+ Requires-Dist: sqlalchemy_utils==0.42.0
73
73
  Requires-Dist: sqlalchemy==2.0.43
74
74
  Requires-Dist: tabulate==0.9.0
75
75
  Requires-Dist: tomlkit==0.13.3
@@ -81,17 +81,17 @@ Requires-Dist: gevent; extra == "prod"
81
81
  Provides-Extra: dev
82
82
  Requires-Dist: wheel; extra == "dev"
83
83
  Provides-Extra: test
84
- Requires-Dist: fakeredis==2.31.0; extra == "test"
84
+ Requires-Dist: fakeredis==2.31.3; extra == "test"
85
85
  Requires-Dist: mixer==7.2.2; extra == "test"
86
- Requires-Dist: pytest-cov==6.2.1; extra == "test"
87
- Requires-Dist: pytest==8.4.1; extra == "test"
86
+ Requires-Dist: pytest-cov==7.0.0; extra == "test"
87
+ Requires-Dist: pytest==8.4.2; extra == "test"
88
88
  Provides-Extra: monitoring
89
89
  Requires-Dist: prometheus-flask-exporter==0.23.2; extra == "monitoring"
90
90
  Requires-Dist: pygelf==0.4.3; extra == "monitoring"
91
- Requires-Dist: sentry-sdk==2.35.1; extra == "monitoring"
91
+ Requires-Dist: sentry-sdk==2.39.0; extra == "monitoring"
92
92
  Provides-Extra: lint
93
93
  Requires-Dist: autoflake==2.3.1; extra == "lint"
94
- Requires-Dist: black==25.1.0; extra == "lint"
94
+ Requires-Dist: black==25.9.0; extra == "lint"
95
95
  Requires-Dist: pre-commit==4.3.0; extra == "lint"
96
96
  Dynamic: license-file
97
97
  Dynamic: requires-python
@@ -1,4 +1,4 @@
1
- zou/__init__.py,sha256=9N-gYCTePnyeOefVbNNdVa_3GXg3A2X4uYw26hqCmZk,24
1
+ zou/__init__.py,sha256=WaRGkUs0CThomz5212CALhrybWnq3dLxxUd7Txzzgiw,24
2
2
  zou/cli.py,sha256=N9FyrL4TDgIiCUa-I3xIzOgiVLM14kz8_QLQ48y51oE,22767
3
3
  zou/debug.py,sha256=1fawPbkD4wn0Y9Gk0BiBFSa-CQe5agFi8R9uJYl2Uyk,520
4
4
  zou/event_stream.py,sha256=9O1PE_vDW8p3yfHJNSZ8w0ybD-660x8oGN0izgJdTjM,8575
@@ -18,7 +18,7 @@ zou/app/blueprints/breakdown/resources.py,sha256=vpE6aTdSPS3KSuGhgFIXxgYf3LXwjUj
18
18
  zou/app/blueprints/chats/__init__.py,sha256=YGmwGvddg3MgSYVIh-hmkX8t2em9_LblxBeJzFqFJD4,558
19
19
  zou/app/blueprints/chats/resources.py,sha256=ekKH8BghL4MAh-ZzT8IDPVy8cYAbCRAYwzjjkIa4DmU,5934
20
20
  zou/app/blueprints/comments/__init__.py,sha256=WqpJ7-_dK1cInGTFJAxQ7syZtPCotwq2oO20UEnk1h4,1532
21
- zou/app/blueprints/comments/resources.py,sha256=6HKzH6eIqgT78BU4gy0IcExyE52fi9QrRimkqNvUNCw,19482
21
+ zou/app/blueprints/comments/resources.py,sha256=8YLmrj02bJUMdW3G1TF1H-DFxI63EyuMuHEEyxf9RBo,19682
22
22
  zou/app/blueprints/concepts/__init__.py,sha256=sP_P4mfYvfMcgeE6MHZYP3eD0Lz0Lwit5-CFuVnA-Jg,894
23
23
  zou/app/blueprints/concepts/resources.py,sha256=hXVK0ON5vu2VDporVLrQdb5HjyxpVrXLoTq-ObLiO_Y,10114
24
24
  zou/app/blueprints/crud/__init__.py,sha256=bzjCUL2BAYuufiWcP1n83JAp1TKXEMqTeN6wMOha76M,9667
@@ -72,7 +72,7 @@ zou/app/blueprints/departments/resources.py,sha256=OrsMYJj3l5MgB27XgSRp8Mzzf1V9Y
72
72
  zou/app/blueprints/edits/__init__.py,sha256=jR6dURRPHZJcU4DVFsNghLW1iGm3CwEzs1LPbdof158,1152
73
73
  zou/app/blueprints/edits/resources.py,sha256=hRIKFFZGpCDGhCwPQhWtUGOedotrR-C6xXWPPqVaVwU,13211
74
74
  zou/app/blueprints/entities/__init__.py,sha256=v-qt2dl3s3tmK_ur-cpDHNPmcL0A6xCybczyuidjUCo,713
75
- zou/app/blueprints/entities/resources.py,sha256=UdbB8WAKcBN23zvIK2gZ5VlZvaon1fanSlaMO6XcLn0,3160
75
+ zou/app/blueprints/entities/resources.py,sha256=aeAKa903Qazyr2m_AXbEPUsFjslSFzK2aR5FnYN1voE,7155
76
76
  zou/app/blueprints/events/__init__.py,sha256=Vb0gO7Bpj_2Dpx9hhKd2SZW2qqnJrFVoDpJjFOmoMZw,394
77
77
  zou/app/blueprints/events/resources.py,sha256=ukx-WY9c7qhfYDB3BH8ni3UhQOjHFaI6xCtAKADOLWE,3182
78
78
  zou/app/blueprints/export/__init__.py,sha256=W3U93VD-dHlozFVSt_RDvP7h7K_FqgHPLA__W5H1DkE,1574
@@ -89,19 +89,19 @@ zou/app/blueprints/export/csv/task_types.py,sha256=PCEEhOQcdOJv_38i-KNxbkGeNzmQ8
89
89
  zou/app/blueprints/export/csv/tasks.py,sha256=CHFcs9S3eLIz6psE6Q6mZ-OSur_GrpBeLn98Nh9NNcA,4121
90
90
  zou/app/blueprints/export/csv/time_spents.py,sha256=yYPtilOxfQD5mBwyh9h-PbTQBpab-vMrec35tYUw4fQ,2984
91
91
  zou/app/blueprints/files/__init__.py,sha256=7Wty30JW2OXIn-tBFXOWWmPuHnsnxPpH3jNtHvvr9tY,3987
92
- zou/app/blueprints/files/resources.py,sha256=B9VcXBGG11aduY-F76A1EljqVvsZFDMIziS2wJxdEy4,69087
92
+ zou/app/blueprints/files/resources.py,sha256=G2Xal8di3LFTETT54VqOGEzXYObsln4oc3L-Lf8FpRY,84021
93
93
  zou/app/blueprints/index/__init__.py,sha256=Dh3oQiirpg8RCkfVOuk3irIjSvUvuRf0jPxE6oGubz0,828
94
- zou/app/blueprints/index/resources.py,sha256=1V43X-FPEJ-Zf4IMAdv2ZtBo2X1XFu9iCA2oTn405p0,8345
94
+ zou/app/blueprints/index/resources.py,sha256=nLLrFK-gJv0S_eDVPOS36xFes_3MjT3vGqDQHbI5kPk,14728
95
95
  zou/app/blueprints/news/__init__.py,sha256=HxBXjC15dVbotNAZ0CLf02iwUjxJr20kgf8_kT_9nwM,505
96
- zou/app/blueprints/news/resources.py,sha256=2KwNH7loiCnuxa-QnrDLhmO-GYsq28wVXYrK9MrKjv0,7298
96
+ zou/app/blueprints/news/resources.py,sha256=Zb3nelGgT4EsFyrFY6fPh-oFrjLAsmaHR3mevYYKI2M,11441
97
97
  zou/app/blueprints/persons/__init__.py,sha256=0cnHHw3K_8OEMm0qOi3wKVomSAg9IJSnVjAXabMeHks,3893
98
- zou/app/blueprints/persons/resources.py,sha256=6IwIG7YeiBnQPLeHx_xRWVkqEohD60NGr5KfQ5Gy4nY,42028
98
+ zou/app/blueprints/persons/resources.py,sha256=ooX3bIEYwEQPUeLGzbagEJpFBlxzpUAdDAJo2ICjMY4,46519
99
99
  zou/app/blueprints/playlists/__init__.py,sha256=vuEk1F3hFHsmuKWhdepMoLyOzmNKDn1YrjjfcaIz0lQ,1596
100
- zou/app/blueprints/playlists/resources.py,sha256=RwcnvyyC7pkO2Sat2agSs8CNREmHoUqsVa9vZof5sDA,17596
100
+ zou/app/blueprints/playlists/resources.py,sha256=dD50WpKkIyaDar4nfYS2GfC_5e8mncV7yFKXuh7prY4,22719
101
101
  zou/app/blueprints/previews/__init__.py,sha256=ihC6OQ9AUjnZ2JeMnjRh_tKGO0UmAjOwhZnOivc3BnQ,4460
102
102
  zou/app/blueprints/previews/resources.py,sha256=mRFVMl4fi4mptE1qMG68GAIg868HMiE7AFnQYnszSAU,53345
103
- zou/app/blueprints/projects/__init__.py,sha256=RlKWld3A3kvMfyvH6uVN7cWXOtYOqnMjwUsrBIqXndg,5634
104
- zou/app/blueprints/projects/resources.py,sha256=kYMjJB91yQWmziE8zx3j7bahpKHKzGChGX5AhHzR_Hk,50721
103
+ zou/app/blueprints/projects/__init__.py,sha256=ZX59ZmMIAI11zNy_RjLacOQnEcSJdwRIr68KwOYiB2k,5918
104
+ zou/app/blueprints/projects/resources.py,sha256=a3Il_DHOEx9zauUf-ifvnJADC1-KRllHvFIP5RILurM,64933
105
105
  zou/app/blueprints/search/__init__.py,sha256=QCjQIY_85l_orhdEiqav_GifjReuwsjZggN3V0GeUVY,356
106
106
  zou/app/blueprints/search/resources.py,sha256=XhNewgF4y0Tj9TIZt-2b0c5Whu43YsoeLuNZG2EHFg4,4797
107
107
  zou/app/blueprints/shots/__init__.py,sha256=EcG9qmAchlucqg1M6-RqWGfuKpa5Kq6RgyLZNSsjUr4,4225
@@ -110,12 +110,12 @@ zou/app/blueprints/source/__init__.py,sha256=H7K-4TDs4pc5EJvcYTYMJBHesxyqsE5-xq7
110
110
  zou/app/blueprints/source/kitsu.py,sha256=4lWdqxaKDzwx-5POAIHIgZ6ODbDMOOVRxaSb_FOLcCk,5012
111
111
  zou/app/blueprints/source/otio.py,sha256=5H3DlM0fAbKIbKob787Ve0F7a70fE1ihpXga14PPZ1M,13413
112
112
  zou/app/blueprints/source/csv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
- zou/app/blueprints/source/csv/assets.py,sha256=m7Q_wYuKuckbM7rS0sci0-Rxi2h_zNRi-R0PHSBJv0k,10792
113
+ zou/app/blueprints/source/csv/assets.py,sha256=ys9yJnoQUVr8S2i-u0RuwLCbucE2CWQS2uPyYQMamzM,10941
114
114
  zou/app/blueprints/source/csv/base.py,sha256=1WcvpQv5FrJvE5nyRbJ1Nqrye4OgoTEBItYbHga-Uj4,4373
115
115
  zou/app/blueprints/source/csv/casting.py,sha256=aaFK8565NWgm0_OaeY0Q2DI5T7QX3rr1Cntkv2myKLk,5614
116
116
  zou/app/blueprints/source/csv/edits.py,sha256=NnxSqjAeeS_NvKywQPYJxvlOUiPEXUHLjGKcqiG4J_M,8384
117
117
  zou/app/blueprints/source/csv/persons.py,sha256=QciJ47B3rAPyUQTAeToCUAhEai16J4s37oOErjdC_Vw,2582
118
- zou/app/blueprints/source/csv/shots.py,sha256=zmFbf8qOGiA1byp5TBLdQhnTePph5Ny3l7_LXFrktZQ,9746
118
+ zou/app/blueprints/source/csv/shots.py,sha256=UeEhq0NqALE2MVJ8NH7JUJYmf-2DwiJgr80iVImDnhI,9894
119
119
  zou/app/blueprints/source/csv/task_type_estimations.py,sha256=9UwuMIm-40J8EX_h8X8qZBVL7bDCWJK3UMGHWfd71yc,6485
120
120
  zou/app/blueprints/source/shotgun/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
121
  zou/app/blueprints/source/shotgun/assets.py,sha256=vuRvy0oUszImYRawrbWC2h7CHYSBvGXDJPoa6ZqpG_U,4980
@@ -135,9 +135,9 @@ zou/app/blueprints/source/shotgun/tasks.py,sha256=XXBRe9QhhS-kuZeV3HitOnpf7mmWVx
135
135
  zou/app/blueprints/source/shotgun/team.py,sha256=GF7y2BwDeFJCiidtG68icfCi-uV1-b96YKiH8KR54iE,1819
136
136
  zou/app/blueprints/source/shotgun/versions.py,sha256=8Mb35e5p3FLbbiu6AZb9tJErDKz2pPRBdIYu80Ayj7w,2292
137
137
  zou/app/blueprints/tasks/__init__.py,sha256=udtTZJVViawRAPu8dO_OoyVzQTheLYWTHeTnrC-2RDA,4331
138
- zou/app/blueprints/tasks/resources.py,sha256=npQQbc0XAhIYLMCtOZAzAkBu-Q1iHUlXjHRvpE___3Y,63190
138
+ zou/app/blueprints/tasks/resources.py,sha256=WVNu30pj5snz1TXjla5ZzED2CkToTNAsmJF0RcYnYBk,62938
139
139
  zou/app/blueprints/user/__init__.py,sha256=H9zCHcVobC6jq6dTToXKAjnZmDA0a9gChHiIP3BcZsc,4586
140
- zou/app/blueprints/user/resources.py,sha256=0VeXiY02cmeMSTbE6Ij4l6tU-rpVWG9eqDR9UZgWDks,49588
140
+ zou/app/blueprints/user/resources.py,sha256=kyNfqkMhAQ286fQmhHV2bM5Vl9kk7Wv_52cRwxo2gpM,49508
141
141
  zou/app/file_trees/default.json,sha256=ryUrEmQYE8B_WkzCoQLgmem3N9yNwMIWx9G8p3HfG9o,2310
142
142
  zou/app/file_trees/simple.json,sha256=VBI43Z3rjQxtTpVCq3ktUgS0UB8x-aTowKL9LXuXCFI,3149
143
143
  zou/app/indexer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -154,7 +154,7 @@ zou/app/models/chat_message.py,sha256=8w7xtoqCW_CRoGKrF4ba5w-oyAHIRh-2ms3p5sQQor
154
154
  zou/app/models/comment.py,sha256=aDi64Yny5RvlSDace5ydUqxI7_hhugBVnO6EvR19tAE,6040
155
155
  zou/app/models/custom_action.py,sha256=wx5ASKJ2oG-ivASZbVf1nLiL7zELgQBJ8U1jDdvGkuU,578
156
156
  zou/app/models/data_import_error.py,sha256=dCyzaX0KATa0F8h5V3sTPlXz-XNl1VNkflRfJuaCmsg,425
157
- zou/app/models/day_off.py,sha256=WMZs7oMhUBpMnNyvhgpl1j6egZ5J0drnrF1dH3N5cII,691
157
+ zou/app/models/day_off.py,sha256=pG5EKnohhdTkYgSQl4h1CrGQ6Woa8b-DGmS-DL5q7pw,803
158
158
  zou/app/models/department.py,sha256=j8nxMJRE6wvqlDY68uPRephQTSny4sr06qs0wbzlkzc,2095
159
159
  zou/app/models/desktop_login_log.py,sha256=fdgqEXAQkHw6CtRU_Y-CuboaZA9QWJc9OzklvbdPBJY,546
160
160
  zou/app/models/entity.py,sha256=-pW30_KWeKll5fTrLBAQ_O24KxUL6G5E8cj6xUAY8M8,8569
@@ -170,7 +170,7 @@ zou/app/models/notification.py,sha256=1ODOymGPeB4oxgX_3WhOgIL_Lsz-JR7miDkBS6W8t_
170
170
  zou/app/models/organisation.py,sha256=R69AR1JDZSs6YeXDalmz3ewmrSMDv9Mr8AZAHn09Iu0,1365
171
171
  zou/app/models/output_file.py,sha256=hyLGrpsgrk0aisDXppRQrB7ItCwyuyw-X0ZwVAHabsA,2569
172
172
  zou/app/models/output_type.py,sha256=us_lCUCEvuP4vi_XmmOcEl1J2MtZhMX5ZheBqEFCgWA,381
173
- zou/app/models/person.py,sha256=EiyzAQAZ3jypRXBIAIYCexv7AacqA9JUe5rODsLUxPo,8114
173
+ zou/app/models/person.py,sha256=EnndhMwVArOM1ZJqazX5q_LL-aq-JPeKtm_goy2y_Og,8089
174
174
  zou/app/models/playlist.py,sha256=YGgAk84u0_fdIEY02Dal4kfk8APVZvWFwWYV74qvrio,1503
175
175
  zou/app/models/plugin.py,sha256=zNs9Qi1h_v_6edZs5GHRSKItaAG4Gnlk1FQKumiiv68,766
176
176
  zou/app/models/preview_background_file.py,sha256=j8LgRmY7INnlB07hFwwB-8ssQrRC8vsb8VcpsTbt6tA,559
@@ -200,7 +200,7 @@ zou/app/services/base_service.py,sha256=OZd0STFh-DyBBdwsmA7DMMnrwv4C8wJUbShvZ1is
200
200
  zou/app/services/breakdown_service.py,sha256=-bH1KUq9-No_OKnQtWK4XEU1w7uDPJnzWFMrKNkS1K0,27593
201
201
  zou/app/services/budget_service.py,sha256=uMU1vJr7kyxtkvMz_Nm7DyhW6qvSGYGqRHEQTxsHYCc,5468
202
202
  zou/app/services/chats_service.py,sha256=pqnT-RCltdf9Dp4t-2NtOSawGk0jyNhVPTgERZ_nYvk,8297
203
- zou/app/services/comments_service.py,sha256=u62elfDISSOEP_GNXBUEqgnLoisK3hS8-S9UDPB1Gd8,22106
203
+ zou/app/services/comments_service.py,sha256=Y77sFEsMEf5Q9Od7RgLEmHwSB59_te-bJlX7s7syzfI,22264
204
204
  zou/app/services/concepts_service.py,sha256=uH0leb23Op48wc1bHlUV2-I97QROsIemKr80F0UwnoM,11213
205
205
  zou/app/services/custom_actions_service.py,sha256=fWISEOOdthadrxeHuacEel5Xj6msn0yWXJQDG1gzvsY,297
206
206
  zou/app/services/deletion_service.py,sha256=UPojg4oyyCKjUObfwv9nY6tD0SVDeimpv0xgbcSmyyk,17372
@@ -229,7 +229,7 @@ zou/app/services/status_automations_service.py,sha256=tVio7Sj7inhvKS4UOyRhcdpwr_
229
229
  zou/app/services/sync_service.py,sha256=iWxx1kOGEXympHmSBBQWtDZWNtumdxp8kppee0OefMo,41811
230
230
  zou/app/services/tasks_service.py,sha256=ZLUi6_XhLU_SLwERFHx4QwcXdS-ncrVH_rIl-Lt-9yE,69993
231
231
  zou/app/services/telemetry_services.py,sha256=xQm1h1t_JxSFW59zQGf4NuNdUi1UfMa_6pQ-ytRbmGA,1029
232
- zou/app/services/time_spents_service.py,sha256=8sYnepgeo4yohNFRNiEedqFfL2vuJ78GZSHOpRmp52Q,16502
232
+ zou/app/services/time_spents_service.py,sha256=E0RU5dcoME1MZrxohKWmRMDTD_irwT8HUUhXHeR7kng,18635
233
233
  zou/app/services/user_service.py,sha256=inFNPsAb11odskiidXAOzNGlY5S2DvFYuYCeGGN_1lc,52990
234
234
  zou/app/stores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
235
235
  zou/app/stores/auth_tokens_store.py,sha256=-qOJPybLHvnMOq3PWk073OW9HJwOHGhFLZeOIlX1UVw,1290
@@ -469,9 +469,9 @@ zou/remote/normalize_movie.py,sha256=zNfEY3N1UbAHZfddGONTg2Sff3ieLVWd4dfZa1dpnes
469
469
  zou/remote/playlist.py,sha256=AsDo0bgYhDcd6DfNRV6r6Jj3URWwavE2ZN3VkKRPbLU,3293
470
470
  zou/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
471
471
  zou/utils/movie.py,sha256=d67fIL9dVBKt-E_qCGXRbNNdbJaJR5sHvZeX3hf8ldE,16559
472
- zou-0.20.73.dist-info/licenses/LICENSE,sha256=dql8h4yceoMhuzlcK0TT_i-NgTFNIZsgE47Q4t3dUYI,34520
473
- zou-0.20.73.dist-info/METADATA,sha256=jGQvWdZ4Z0s4yTLv-E2yVc7OmT-qenSS2erRkO8VwJM,6697
474
- zou-0.20.73.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
475
- zou-0.20.73.dist-info/entry_points.txt,sha256=PelQoIx3qhQ_Tmne7wrLY-1m2izuzgpwokoURwSohy4,130
476
- zou-0.20.73.dist-info/top_level.txt,sha256=4S7G_jk4MzpToeDItHGjPhHx_fRdX52zJZWTD4SL54g,4
477
- zou-0.20.73.dist-info/RECORD,,
472
+ zou-0.20.75.dist-info/licenses/LICENSE,sha256=dql8h4yceoMhuzlcK0TT_i-NgTFNIZsgE47Q4t3dUYI,34520
473
+ zou-0.20.75.dist-info/METADATA,sha256=IRv9nsvhgVz_XrDixkS0PTUVzMBk4vXuvaZueB8de4k,6698
474
+ zou-0.20.75.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
475
+ zou-0.20.75.dist-info/entry_points.txt,sha256=PelQoIx3qhQ_Tmne7wrLY-1m2izuzgpwokoURwSohy4,130
476
+ zou-0.20.75.dist-info/top_level.txt,sha256=4S7G_jk4MzpToeDItHGjPhHx_fRdX52zJZWTD4SL54g,4
477
+ zou-0.20.75.dist-info/RECORD,,
File without changes