cuemsutils 0.0.4.post1__tar.gz → 0.0.5__tar.gz

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.
@@ -1,3 +1,7 @@
1
+ ## Local development files
2
+ dev/local
3
+ tests/tmp
4
+
1
5
  # Byte-compiled / optimized / DLL files
2
6
  __pycache__/
3
7
  *.py[cod]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuemsutils
3
- Version: 0.0.4.post1
3
+ Version: 0.0.5
4
4
  Summary: Reusable classes and methods for CueMS system
5
5
  Project-URL: Documentation, https://github.com/stagesoft/cuems-utils#readme
6
6
  Project-URL: Issues, https://github.com/stagesoft/cuems-utils/issues
@@ -18,12 +18,10 @@ Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Programming Language :: Python :: Implementation :: CPython
19
19
  Classifier: Programming Language :: Python :: Implementation :: PyPy
20
20
  Requires-Python: >=3.8
21
+ Requires-Dist: json-fix==1.0.0
21
22
  Requires-Dist: lxml==5.3.0
22
23
  Requires-Dist: timecode
23
24
  Requires-Dist: xmlschema==3.4.3
24
- Provides-Extra: test
25
- Requires-Dist: pytest; extra == 'test'
26
- Requires-Dist: pytest-cov; extra == 'test'
27
25
  Description-Content-Type: text/markdown
28
26
 
29
27
  # cuems-utils
@@ -37,6 +35,7 @@ Reusable classes and methods for CueMS system
37
35
  ## Table of Contents
38
36
 
39
37
  - [Installation](#installation)
38
+ - [Release notes](#v005)
40
39
  - [License](#license)
41
40
 
42
41
  ## Installation
@@ -45,6 +44,22 @@ Reusable classes and methods for CueMS system
45
44
  pip install cuemsutils
46
45
  ```
47
46
 
47
+ ## Release notes
48
+
49
+ ### v0.0.5
50
+ - All properties of objects are lowercase exept the ones representing classes (e.g. `CueList` at `CuemsScript` and `Media` at `MediaCue`).
51
+ - Parameters renamed for clarity:
52
+ - `uuid` -> `id`
53
+ - `loaded` -> `autoload`
54
+ - `bott_*` -> `bottom_*`
55
+ - User facing classes can be exported directly (e.g. `from cuemsutils.cues import AudioCue, VideoCue`)
56
+ - `Cue` is not longer an accepted object for script validation
57
+ - `ui_properties` has become an `CuemsDict` object to facilitate modifications and requierements for UI development.
58
+ - `CuemsScript` object has method `to_json` to convert its contents to json format. Internally works via `json.dumps` and specific calls to methods `__json__` when available at class level.
59
+
60
+ ### v0.0.4
61
+ - `Logger` fixed to allow empty `extra` parameter
62
+
48
63
  ## License
49
64
 
50
65
  `cuemsutils` is distributed under the terms of the [GPL v3](https://www.gnu.org/licenses/gpl-3.0.html) license.
@@ -9,6 +9,7 @@ Reusable classes and methods for CueMS system
9
9
  ## Table of Contents
10
10
 
11
11
  - [Installation](#installation)
12
+ - [Release notes](#v005)
12
13
  - [License](#license)
13
14
 
14
15
  ## Installation
@@ -17,6 +18,22 @@ Reusable classes and methods for CueMS system
17
18
  pip install cuemsutils
18
19
  ```
19
20
 
21
+ ## Release notes
22
+
23
+ ### v0.0.5
24
+ - All properties of objects are lowercase exept the ones representing classes (e.g. `CueList` at `CuemsScript` and `Media` at `MediaCue`).
25
+ - Parameters renamed for clarity:
26
+ - `uuid` -> `id`
27
+ - `loaded` -> `autoload`
28
+ - `bott_*` -> `bottom_*`
29
+ - User facing classes can be exported directly (e.g. `from cuemsutils.cues import AudioCue, VideoCue`)
30
+ - `Cue` is not longer an accepted object for script validation
31
+ - `ui_properties` has become an `CuemsDict` object to facilitate modifications and requierements for UI development.
32
+ - `CuemsScript` object has method `to_json` to convert its contents to json format. Internally works via `json.dumps` and specific calls to methods `__json__` when available at class level.
33
+
34
+ ### v0.0.4
35
+ - `Logger` fixed to allow empty `extra` parameter
36
+
20
37
  ## License
21
38
 
22
39
  `cuemsutils` is distributed under the terms of the [GPL v3](https://www.gnu.org/licenses/gpl-3.0.html) license.
@@ -26,17 +26,12 @@ classifiers = [
26
26
  "Programming Language :: Python :: Implementation :: PyPy",
27
27
  ]
28
28
  dependencies = [
29
+ "json-fix==1.0.0",
29
30
  "timecode",
30
31
  "lxml==5.3.0",
31
32
  "xmlschema==3.4.3"
32
33
  ]
33
34
 
34
- [project.optional-dependencies]
35
- test = [
36
- "pytest",
37
- "pytest-cov",
38
- ]
39
-
40
35
  [project.urls]
41
36
  Documentation = "https://github.com/stagesoft/cuems-utils#readme"
42
37
  Issues = "https://github.com/stagesoft/cuems-utils/issues"
@@ -51,12 +46,16 @@ include = ["src/cuemsutils/xml/schemas"]
51
46
  [tool.hatch.build.targets.wheel]
52
47
  packages = ["src/cuemsutils"]
53
48
 
54
- [tool.hatch.envs.types]
55
- extra-dependencies = [
56
- "mypy>=1.0.0"
49
+ [[tool.hatch.envs.hatch-test.matrix]]
50
+ python = ["3.11"]
51
+
52
+ [tool.hatch.envs.test]
53
+ dependencies = [
54
+ "pytest",
55
+ "pytest-cov",
56
+ "pytest-mock",
57
+ "coverage[toml]"
57
58
  ]
58
- [tool.hatch.envs.types.scripts]
59
- check = "mypy --install-types --non-interactive {args:src/cuemsutils tests}"
60
59
 
61
60
  [tool.coverage.run]
62
61
  source_pkgs = ["cuemsutils", "tests"]
@@ -69,8 +68,16 @@ cuemsutils = ["src/cuemsutils", "*/cuems-utils/src/cuemsutils"]
69
68
  tests = ["tests", "*/cuems-utils/tests"]
70
69
 
71
70
  [tool.coverage.report]
71
+ show_missing = true
72
72
  exclude_lines = [
73
73
  "no cov",
74
74
  "if __name__ == .__main__.:",
75
75
  "if TYPE_CHECKING:",
76
76
  ]
77
+
78
+ [tool.hatch.envs.types]
79
+ extra-dependencies = [
80
+ "mypy>=1.0.0"
81
+ ]
82
+ [tool.hatch.envs.types.scripts]
83
+ check = "mypy --install-types --non-interactive {args:src/cuemsutils tests}"
@@ -20,17 +20,17 @@
20
20
  <xs:complexType>
21
21
  <!-- Which is a sequence of one of each of these objects -->
22
22
  <xs:all>
23
- <!-- The uuid, TODO specify the uuid format in a type -->
24
- <xs:element name="uuid" type="cms:UuidType" />
23
+ <!-- The root cuelist of our project, mainly a cuelist at the root -->
24
+ <xs:element name="CueList" type="cms:CueListType" />
25
+ <!-- Long description of the script (0 - 255 chars) -->
26
+ <xs:element name="description" type="cms:DescriptionStringType" />
27
+ <!-- The id, TODO specify the uuid format in a type -->
28
+ <xs:element name="id" type="cms:UuidType" />
25
29
  <!-- The name, mainly a string, we can check lengths here too if desired -->
26
30
  <xs:element name="name" type="cms:NameStringType" /> <!-- 3 - 60 chars -->
27
- <!-- Long description of the script -->
28
- <xs:element name="description" type="cms:DescriptionStringType" /> <!-- 0 - 255 chars -->
29
31
  <!-- The date, Todo specify the date formant in a type-->
30
32
  <xs:element name="created" type="cms:DateType" />
31
33
  <xs:element name="modified" type="cms:DateType" />
32
- <!-- The root cuelist of our project, mainly a cuelist at the root -->
33
- <xs:element name="CueList" type="cms:CueListType" />
34
34
  </xs:all>
35
35
  <xs:assert test="modified &gt;= created" />
36
36
  </xs:complexType>
@@ -48,15 +48,16 @@
48
48
 
49
49
  <xs:complexType name="CommonPropertiesType">
50
50
  <xs:sequence>
51
+ <!-- A flag to indicate auto arming -->
52
+ <xs:element name="autoload" type="cms:BoolType" />
51
53
  <xs:element name="description" type="cms:DescriptionStringType" />
52
- <!-- A flag to disable to cue -->
54
+ <!-- A flag to enable|disable to cue -->
53
55
  <xs:element name="enabled" type="cms:BoolType" />
54
- <xs:element name="id" type="xs:string" />
55
- <!-- A flag to indicate auto arming -->
56
- <xs:element name="loaded" type="cms:BoolType" />
56
+ <!-- Its own id as uuid -->
57
+ <xs:element name="id" type="cms:UuidType" />
57
58
  <xs:element name="loop" type="cms:LoopType" /> <!-- -1/0/n -->
58
- <!-- Its time mark -->
59
59
  <xs:element name="name" type="cms:NameStringType" />
60
+ <!-- Its time mark -->
60
61
  <xs:element name="offset" type="cms:CTimecodeType" />
61
62
  <!-- Execution options -->
62
63
  <xs:element name="post_go" type="cms:PostGoType" /> <!-- Types: pause/go/go_at_end -->
@@ -65,10 +66,8 @@
65
66
  <xs:element name="target" type="cms:TargetType" /> <!-- target uuid or none -->
66
67
  <!-- Timecode behaviour flag -->
67
68
  <xs:element name="timecode" type="cms:BoolType" />
68
- <!-- Its own uuid -->
69
- <!-- <xs:element name="ui_properties" type="cms:UuidType" /> -->
70
- <xs:element name="uuid" type="cms:UuidType" />
71
- <!-- <xs:element name="ui_properties" type="cms:UiPropertiesType" /> -->
69
+ <!-- Dictionary of options for UI settings -->
70
+ <xs:element name="ui_properties" type="cms:UiPropertiesType" />
72
71
  </xs:sequence>
73
72
  </xs:complexType>
74
73
 
@@ -88,9 +87,7 @@
88
87
  <xs:choice minOccurs="0" maxOccurs="unbounded">
89
88
  <!-- Can have any other cuelists, recursively -->
90
89
  <xs:element name="CueList" type="cms:CueListType" />
91
- <!-- Can have any cues -->
92
- <xs:element name="Cue" type="cms:CueType" />
93
- <!-- Can be also specific type cues -->
90
+ <!-- Can have any specific type cues -->
94
91
  <xs:element name="AudioCue" type="cms:AudioCueType" />
95
92
  <xs:element name="DmxCue" type="cms:DmxCueType" />
96
93
  <xs:element name="VideoCue" type="cms:VideoCueType" />
@@ -98,14 +95,106 @@
98
95
  </xs:choice>
99
96
  </xs:complexType>
100
97
 
98
+ <!-- MediaCue -->
99
+ <xs:complexType name="MediaCueType">
100
+ <xs:complexContent>
101
+ <xs:extension base="cms:CueType">
102
+ <xs:sequence>
103
+ <xs:element name="Media" type="cms:MediaType" />
104
+ <xs:element name="outputs" type="cms:OutputsType" />
105
+ </xs:sequence>
106
+ </xs:extension>
107
+ </xs:complexContent>
108
+ </xs:complexType>
109
+
110
+ <!-- COMPLEX DATA TYPES -->
111
+ <xs:complexType name="CTimecodeType">
112
+ <!-- Can be a timecode field or an empty NoneType field -->
113
+ <xs:choice minOccurs="0">
114
+ <xs:element name="CTimecode" type="cms:TimecodeType" />
115
+ </xs:choice>
116
+ </xs:complexType>
117
+
118
+ <xs:complexType name="Coordinates">
119
+ <xs:sequence>
120
+ <xs:element name="x" type="xs:integer" />
121
+ <xs:element name="y" type="xs:integer" />
122
+ </xs:sequence>
123
+ </xs:complexType>
124
+
125
+ <xs:complexType name="MediaType">
126
+ <xs:sequence minOccurs="0" maxOccurs="1">
127
+ <xs:element name="file_name" type="xs:string" />
128
+ <xs:element name="regions" type="cms:RegionsType" />
129
+ </xs:sequence>
130
+ </xs:complexType>
131
+
132
+ <xs:complexType name="OutputsType">
133
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
134
+ <xs:element name="AudioCueOutput" type="cms:AudioCueOutputsType" />
135
+ <xs:element name="VideoCueOutput" type="cms:VideoCueOutputsType" />
136
+ </xs:choice>
137
+ </xs:complexType>
138
+
139
+ <xs:complexType name="RegionsType">
140
+ <xs:sequence minOccurs="1" maxOccurs="unbounded">
141
+ <xs:element name="Region" type="cms:RegionType" />
142
+ </xs:sequence>
143
+ </xs:complexType>
144
+
145
+ <xs:complexType name="RegionType">
146
+ <xs:sequence minOccurs="1">
147
+ <xs:element name="id" type="xs:nonNegativeInteger" />
148
+ <xs:element name="loop" type="xs:nonNegativeInteger" />
149
+ <xs:element name="in_time" type="cms:CTimecodeType" />
150
+ <xs:element name="out_time" type="cms:CTimecodeType" />
151
+ </xs:sequence>
152
+ </xs:complexType>
153
+
154
+ <xs:complexType name="UiPropertiesType">
155
+ <xs:all>
156
+ <xs:element name="id" type="xs:integer" minOccurs="0" />
157
+ <xs:element name="timeline_position" type="cms:Coordinates" minOccurs="0" />
158
+ <xs:element name="warning" type="xs:integer" minOccurs="0" />
159
+ </xs:all>
160
+ </xs:complexType>
161
+
162
+ <!-- ACTION -->
163
+ <xs:complexType name="ActionCueType">
164
+ <xs:complexContent>
165
+ <xs:extension base="cms:CueType">
166
+ <xs:sequence>
167
+ <xs:element name="action_target" type="cms:TargetType" />
168
+ <xs:element name="action_type" type="cms:ActionType" minOccurs="0" />
169
+ </xs:sequence>
170
+ </xs:extension>
171
+ </xs:complexContent>
172
+ </xs:complexType>
173
+
174
+ <xs:simpleType name="ActionType">
175
+ <xs:restriction base="xs:string">
176
+ <xs:enumeration value="play" />
177
+ <xs:enumeration value="pause" />
178
+ <xs:enumeration value="stop" />
179
+ <xs:enumeration value="load" />
180
+ <xs:enumeration value="unload" />
181
+ <xs:enumeration value="enable" />
182
+ <xs:enumeration value="disable" />
183
+ <xs:enumeration value="fade_in" />
184
+ <xs:enumeration value="fade_out" />
185
+ <xs:enumeration value="wait" />
186
+ <xs:enumeration value="go_to" />
187
+ <xs:enumeration value="pause_project" />
188
+ <xs:enumeration value="resume_project" />
189
+ </xs:restriction>
190
+ </xs:simpleType>
191
+
101
192
  <!-- AUDIO -->
102
193
  <xs:complexType name="AudioCueType">
103
194
  <xs:complexContent>
104
- <xs:extension base="cms:CueType">
195
+ <xs:extension base="cms:MediaCueType">
105
196
  <xs:sequence>
106
- <xs:element name="media" type="cms:MediaType" />
107
197
  <xs:element name="master_vol" type="cms:PercentType" />
108
- <xs:element name="Outputs" type="cms:OutputsType" />
109
198
  </xs:sequence>
110
199
  </xs:extension>
111
200
  </xs:complexContent>
@@ -136,13 +225,7 @@
136
225
  <!-- VIDEO -->
137
226
  <xs:complexType name="VideoCueType">
138
227
  <xs:complexContent>
139
- <xs:extension base="cms:CueType">
140
- <xs:sequence>
141
- <!-- A video media file path which can be none -->
142
- <xs:element name="Media" type="cms:MediaType" />
143
- <!-- An outputs section -->
144
- <xs:element name="Outputs" type="cms:OutputsType" />
145
- </xs:sequence>
228
+ <xs:extension base="cms:MediaCueType">
146
229
  </xs:extension>
147
230
  </xs:complexContent>
148
231
  </xs:complexType>
@@ -170,8 +253,8 @@
170
253
  <xs:sequence>
171
254
  <xs:element name="top_left" type="cms:Coordinates" />
172
255
  <xs:element name="top_right" type="cms:Coordinates" />
173
- <xs:element name="bott_left" type="cms:Coordinates" />
174
- <xs:element name="bott_right" type="cms:Coordinates" />
256
+ <xs:element name="bottom_left" type="cms:Coordinates" />
257
+ <xs:element name="bottom_right" type="cms:Coordinates" />
175
258
  </xs:sequence>
176
259
  </xs:complexType>
177
260
 
@@ -237,87 +320,6 @@
237
320
  </xs:simpleContent>
238
321
  </xs:complexType>
239
322
 
240
- <!-- ACTION -->
241
- <xs:complexType name="ActionCueType">
242
- <xs:complexContent>
243
- <xs:extension base="cms:CueType">
244
- <xs:sequence>
245
- <xs:element name="action_type" type="cms:ActionType" minOccurs="0" />
246
- <xs:element name="action_target" type="cms:TargetType" />
247
- </xs:sequence>
248
- </xs:extension>
249
- </xs:complexContent>
250
- </xs:complexType>
251
-
252
- <xs:simpleType name="ActionType">
253
- <xs:restriction base="xs:string">
254
- <xs:enumeration value="play" />
255
- <xs:enumeration value="pause" />
256
- <xs:enumeration value="stop" />
257
- <xs:enumeration value="load" />
258
- <xs:enumeration value="unload" />
259
- <xs:enumeration value="enable" />
260
- <xs:enumeration value="disable" />
261
- <xs:enumeration value="fade_in" />
262
- <xs:enumeration value="fade_out" />
263
- <xs:enumeration value="wait" />
264
- <xs:enumeration value="go_to" />
265
- <xs:enumeration value="pause_project" />
266
- <xs:enumeration value="resume_project" />
267
- </xs:restriction>
268
- </xs:simpleType>
269
-
270
- <!-- COMPLEX DATA TYPES -->
271
- <xs:complexType name="CTimecodeType">
272
- <!-- Can be a timecode field or an empty NoneType field -->
273
- <xs:choice minOccurs="0">
274
- <xs:element name="CTimecode" type="cms:TimecodeType" />
275
- </xs:choice>
276
- </xs:complexType>
277
-
278
- <xs:complexType name="Coordinates">
279
- <xs:sequence>
280
- <xs:element name="x" type="xs:integer" />
281
- <xs:element name="y" type="xs:integer" />
282
- </xs:sequence>
283
- </xs:complexType>
284
-
285
- <xs:complexType name="MediaType">
286
- <xs:sequence minOccurs="0" maxOccurs="1">
287
- <xs:element name="file_name" type="xs:string" />
288
- <xs:element name="regions" type="cms:RegionsType" />
289
- </xs:sequence>
290
- </xs:complexType>
291
-
292
- <xs:complexType name="OutputsType">
293
- <xs:choice minOccurs="0" maxOccurs="unbounded">
294
- <xs:element name="AudioCueOutput" type="cms:AudioCueOutputsType" />
295
- <xs:element name="VideoCueOutput" type="cms:VideoCueOutputsType" />
296
- </xs:choice>
297
- </xs:complexType>
298
-
299
- <xs:complexType name="RegionsType">
300
- <xs:sequence minOccurs="1" maxOccurs="unbounded">
301
- <xs:element name="region" type="cms:RegionType" />
302
- </xs:sequence>
303
- </xs:complexType>
304
-
305
- <xs:complexType name="RegionType">
306
- <xs:sequence minOccurs="1">
307
- <xs:element name="id" type="xs:nonNegativeInteger" />
308
- <xs:element name="loop" type="xs:nonNegativeInteger" />
309
- <xs:element name="in_time" type="cms:CTimecodeType" />
310
- <xs:element name="out_time" type="cms:CTimecodeType" />
311
- </xs:sequence>
312
- </xs:complexType>
313
-
314
- <xs:complexType name="UiPropertiesType">
315
- <xs:all minOccurs="0">
316
- <xs:element name="timeline_position" type="cms:Coordinates" />
317
- <xs:element name="warning" type="xs:integer" />
318
- </xs:all>
319
- </xs:complexType>
320
-
321
323
  <!-- SIMPLE DATA TYPES -->
322
324
  <xs:simpleType name="BoolType">
323
325
  <xs:restriction base="xs:string">
File without changes