labfreed 0.0.18__py2.py3-none-any.whl → 0.0.20__py2.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.
Potentially problematic release.
This version of labfreed might be problematic. Click here for more details.
- labfreed/{QR_Generator → IO}/generate_qr.py +12 -37
- labfreed/{parse_pac.py → IO/parse_pac.py} +2 -2
- labfreed/PAC_ID/extensions.py +0 -3
- labfreed/TREX/data_model.py +2 -2
- labfreed/__init__.py +1 -1
- labfreed/utilities/utility_types.py +1 -31
- labfreed/validation.py +8 -2
- {labfreed-0.0.18.dist-info → labfreed-0.0.20.dist-info}/METADATA +71 -23
- labfreed-0.0.20.dist-info/RECORD +21 -0
- labfreed/utilities/extension_intertpreters.py +0 -4
- labfreed-0.0.18.dist-info/RECORD +0 -22
- {labfreed-0.0.18.dist-info → labfreed-0.0.20.dist-info}/WHEEL +0 -0
- {labfreed-0.0.18.dist-info → labfreed-0.0.20.dist-info}/licenses/LICENSE +0 -0
|
@@ -364,16 +364,16 @@ class VisualMarker:
|
|
|
364
364
|
app = typer.Typer()
|
|
365
365
|
|
|
366
366
|
|
|
367
|
-
def
|
|
367
|
+
def _generate_qr_with_markers(qr_str, text, title, direction):
|
|
368
368
|
if title:
|
|
369
369
|
#try to use standard size 10. Go bigger if 10 does not fit the data
|
|
370
370
|
try:
|
|
371
|
-
qr = segno.make_qr(
|
|
371
|
+
qr = segno.make_qr(qr_str, error="L", version=10)
|
|
372
372
|
except DataOverflowError as e:
|
|
373
|
-
qr = segno.make_qr(
|
|
373
|
+
qr = segno.make_qr(qr_str, error="L")
|
|
374
374
|
v = qr.version
|
|
375
375
|
else:
|
|
376
|
-
qr = segno.make_qr(
|
|
376
|
+
qr = segno.make_qr(qr_str, error="L")
|
|
377
377
|
v = qr.version
|
|
378
378
|
|
|
379
379
|
if(qr.mode != "alphanumeric"):
|
|
@@ -396,42 +396,18 @@ def generate_qr_with_markers(url, text="PAC", title=None, direction = Direction.
|
|
|
396
396
|
combined_matrix = np.concatenate((title_marker, padding, qr_matrix, padding, visual_marker), axis=append_axis)
|
|
397
397
|
else:
|
|
398
398
|
combined_matrix = np.concatenate((qr_matrix, padding, visual_marker), axis=append_axis)
|
|
399
|
-
|
|
399
|
+
|
|
400
400
|
return combined_matrix
|
|
401
|
-
|
|
402
|
-
def generate_qr_with_markers_file(url, text="PAC", title=None, direction = Direction.LEFT_TO_RIGHT, fmt='svg', path=str):
|
|
403
|
-
combined_matrix = generate_qr_with_markers(url, text="PAC", title=None, direction = Direction.LEFT_TO_RIGHT)
|
|
404
|
-
outfile = f'{path}.{fmt}'
|
|
405
|
-
match fmt:
|
|
406
|
-
case 'png':
|
|
407
|
-
segno.writers.write_png(combined_matrix, combined_matrix.shape[::-1], out=outfile, border=9)
|
|
408
|
-
case 'svg':
|
|
409
|
-
segno.writers.write_svg(combined_matrix, combined_matrix.shape[::-1], out=outfile, border=9)
|
|
410
401
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
402
|
+
def save_qr_with_markers(url, text="PAC", title=None, direction = Direction.LEFT_TO_RIGHT, fmt='png', path='qr'):
|
|
403
|
+
combined_matrix = _generate_qr_with_markers(url, text="PAC", title=None, direction = Direction.LEFT_TO_RIGHT)
|
|
404
|
+
outfile = f'{path}.{fmt}'
|
|
414
405
|
match fmt:
|
|
415
406
|
case 'png':
|
|
416
|
-
|
|
407
|
+
writers.write_png(combined_matrix, combined_matrix.shape[::-1], out=outfile, border=9)
|
|
417
408
|
case 'svg':
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
def generate_qr_with_markers_svg(url, text="PAC", title=None, direction = Direction.LEFT_TO_RIGHT, width=None, height=None, border=9, svg_omitsize=False):
|
|
422
|
-
combined_matrix = generate_qr_with_markers(url, text="PAC", title=None, direction = Direction.LEFT_TO_RIGHT)
|
|
423
|
-
with io.BytesIO() as out:
|
|
424
|
-
version = combined_matrix.shape[::-1]
|
|
425
|
-
scalex = width / (version[0] + 2*border) if width else 1
|
|
426
|
-
scaley = height / (version[1] + 2*border) if height else 1
|
|
427
|
-
scale = min(scalex, scaley)
|
|
428
|
-
segno.writers.write_svg(combined_matrix, version, out, border=border,
|
|
429
|
-
xmldecl=False, svgns=True, scale=scale, omitsize=svg_omitsize
|
|
430
|
-
)
|
|
431
|
-
s = out.getvalue().decode()
|
|
432
|
-
return s
|
|
433
|
-
|
|
434
|
-
|
|
409
|
+
writers.write_svg(combined_matrix, combined_matrix.shape[::-1], out=outfile, border=9)
|
|
410
|
+
|
|
435
411
|
|
|
436
412
|
|
|
437
413
|
|
|
@@ -440,8 +416,7 @@ def main(url: Annotated[str, typer.Argument(help="The PAC-ID to be rendered as Q
|
|
|
440
416
|
text: Annotated[str, typer.Option(help="The text of the PAC decoration.")] = "PAC",
|
|
441
417
|
direction: Annotated[Direction, typer.Option(help="The position/direction of the PAC decoration.")] = Direction.TOP_TO_BOTTOM):
|
|
442
418
|
|
|
443
|
-
|
|
444
|
-
img.save('generated_codes', f"{outfile}.svg", format='svg')
|
|
419
|
+
save_qr_with_markers(url, text=text, direction=direction, path=outfile)
|
|
445
420
|
|
|
446
421
|
|
|
447
422
|
|
|
@@ -9,9 +9,9 @@ from labfreed.PAC_ID.extensions import Extension, UnknownExtension
|
|
|
9
9
|
from labfreed.TREX.data_model import TREX
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
from
|
|
12
|
+
from ..PAC_ID.data_model import *
|
|
13
13
|
|
|
14
|
-
from
|
|
14
|
+
from ..validation import ValidationMessage, LabFREEDValidationError
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
labfreed/PAC_ID/extensions.py
CHANGED
labfreed/TREX/data_model.py
CHANGED
|
@@ -436,7 +436,7 @@ class TREX_Table(TREX_Segment):
|
|
|
436
436
|
self.add_validation_message(
|
|
437
437
|
source=f"Table {self.key}",
|
|
438
438
|
type="Error",
|
|
439
|
-
msg=f"Size mismatch: Table header contains {self.
|
|
439
|
+
msg=f"Size mismatch: Table header contains {self.column_names} keys, while most rows have {most_common_len}",
|
|
440
440
|
highlight_pattern = self.key
|
|
441
441
|
)
|
|
442
442
|
expected_row_len = most_common_len
|
|
@@ -527,7 +527,7 @@ class TREX_Table(TREX_Segment):
|
|
|
527
527
|
r.append(Quantity(value=e.value, unit=unit))
|
|
528
528
|
else:
|
|
529
529
|
r.append(e.value_to_python_type())
|
|
530
|
-
|
|
530
|
+
table.append(r)
|
|
531
531
|
return table
|
|
532
532
|
|
|
533
533
|
|
labfreed/__init__.py
CHANGED
|
@@ -1,37 +1,7 @@
|
|
|
1
|
-
from
|
|
2
|
-
import json
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
|
-
from rich import print
|
|
6
|
-
|
|
7
|
-
from typing import Any, Tuple
|
|
8
|
-
from typing_extensions import Annotated
|
|
9
|
-
from pydantic import BaseModel, AfterValidator
|
|
10
|
-
import quantities as pq
|
|
11
|
-
from quantities import units
|
|
1
|
+
from pydantic import BaseModel
|
|
12
2
|
|
|
13
3
|
from labfreed.TREX.unece_units import unece_units
|
|
14
4
|
|
|
15
|
-
def validate_unit(unit_name:str) -> str :
|
|
16
|
-
"""
|
|
17
|
-
Pydantic validator function for the unit.
|
|
18
|
-
Checks if the unit is a valid unit.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Args:
|
|
22
|
-
unit (str): unit symbol, e.g. 'kg'
|
|
23
|
-
|
|
24
|
-
Returns:
|
|
25
|
-
str: the input unit.
|
|
26
|
-
|
|
27
|
-
Errors:
|
|
28
|
-
raises an AssertionError if validation fails
|
|
29
|
-
"""
|
|
30
|
-
if hasattr(pq, unit_name):
|
|
31
|
-
return unit_name
|
|
32
|
-
else:
|
|
33
|
-
assert False
|
|
34
|
-
|
|
35
5
|
|
|
36
6
|
class Unit(BaseModel):
|
|
37
7
|
name: str
|
labfreed/validation.py
CHANGED
|
@@ -113,7 +113,7 @@ class BaseModelWithValidationMessages(BaseModel):
|
|
|
113
113
|
return filter_warnings(self.get_nested_validation_messages())
|
|
114
114
|
|
|
115
115
|
|
|
116
|
-
def print_validation_messages(self, str_to_highlight_in=None):
|
|
116
|
+
def print_validation_messages(self, str_to_highlight_in=None, target='console'):
|
|
117
117
|
if not str_to_highlight_in:
|
|
118
118
|
str_to_highlight_in = str(self)
|
|
119
119
|
msgs = self.get_nested_validation_messages()
|
|
@@ -133,7 +133,13 @@ class BaseModelWithValidationMessages(BaseModel):
|
|
|
133
133
|
|
|
134
134
|
text = Text.from_markup(f'\n [bold {color}]{m.type} [/bold {color}] in \t {m.source}' )
|
|
135
135
|
print(text)
|
|
136
|
-
|
|
136
|
+
match target:
|
|
137
|
+
case 'markdown':
|
|
138
|
+
formatted_highlight = m.emphazised_highlight.replace('emph', f'🔸').replace('[/', '').replace('[', '').replace(']', '')
|
|
139
|
+
case 'console':
|
|
140
|
+
formatted_highlight = m.emphazised_highlight.replace('emph', f'bold {color}')
|
|
141
|
+
case 'html':
|
|
142
|
+
formatted_highlight = m.emphazised_highlight.replace('emph', f'b').replace('[', '<').replace(']', '>')
|
|
137
143
|
fmtd = str_to_highlight_in.replace(m.highlight, formatted_highlight)
|
|
138
144
|
fmtd = Text.from_markup(fmtd)
|
|
139
145
|
print(fmtd)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: labfreed
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.20
|
|
4
4
|
Summary: Python implementation of LabFREED building blocks
|
|
5
5
|
Author-email: Reto Thürer <thuerer.r@buchi.com>
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -19,7 +19,7 @@ Requires-Dist: typer>=0.15.2
|
|
|
19
19
|
[](https://github.com/retothuerer/LabFREED/actions/workflows/ci.yml)
|
|
20
20
|
-->
|
|
21
21
|
|
|
22
|
-
This is a Python implementation of [LabFREED](
|
|
22
|
+
This is a Python implementation of [LabFREED](https://labfreed.wega-it.com) building blocks.
|
|
23
23
|
|
|
24
24
|
## Supported Building Blocks
|
|
25
25
|
- PAC-ID
|
|
@@ -41,7 +41,7 @@ pip install labfreed
|
|
|
41
41
|
### Parse a simple PAC-ID
|
|
42
42
|
|
|
43
43
|
```python
|
|
44
|
-
from labfreed.parse_pac import PAC_Parser
|
|
44
|
+
from labfreed.IO.parse_pac import PAC_Parser
|
|
45
45
|
|
|
46
46
|
# Parse the PAC-ID
|
|
47
47
|
pac_str = 'HTTPS://PAC.METTORIUS.COM/-MD/bal500/@1234'
|
|
@@ -53,17 +53,44 @@ is_valid = pac_id.is_valid()
|
|
|
53
53
|
print(f'PAC-ID is valid: {is_valid}')
|
|
54
54
|
```
|
|
55
55
|
```text
|
|
56
|
-
>>
|
|
56
|
+
>> PAC-ID is valid: True
|
|
57
57
|
```
|
|
58
58
|
### Show recommendations:
|
|
59
59
|
Note that the PAC-ID -- while valid -- uses characters which are not recommended (results in larger QR code).
|
|
60
60
|
There is a nice function to highlight problems
|
|
61
61
|
|
|
62
62
|
```python
|
|
63
|
-
pac_id.print_validation_messages()
|
|
63
|
+
pac_id.print_validation_messages(target='markdown')
|
|
64
64
|
```
|
|
65
65
|
```text
|
|
66
|
-
>>
|
|
66
|
+
>> =======================================
|
|
67
|
+
>> Validation Results
|
|
68
|
+
>> ---------------------------------------
|
|
69
|
+
>>
|
|
70
|
+
>> Recommendation in id segment value bal500
|
|
71
|
+
>> HTTPS://PAC.METTORIUS.COM/-MD/🔸b🔸🔸a🔸🔸l🔸500/@1234
|
|
72
|
+
>> Characters b l a should not be used.
|
|
73
|
+
>>
|
|
74
|
+
>> Recommendation in id segment value @1234
|
|
75
|
+
>> HTTPS://PAC.METTORIUS.COM/-MD/bal500/🔸@🔸1234
|
|
76
|
+
>> Characters @ should not be used.
|
|
77
|
+
>>
|
|
78
|
+
>> Warning in Category -MD
|
|
79
|
+
>> HTTPS://PAC.METTORIUS.COM/🔸-MD🔸/bal500/@1234
|
|
80
|
+
>> Category key -MD is not a well known key. It is recommended to use well known keys only
|
|
81
|
+
```
|
|
82
|
+
### Save as QR Code
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
from labfreed.IO.generate_qr import save_qr_with_markers
|
|
86
|
+
|
|
87
|
+
save_qr_with_markers(pac_str, fmt='png')
|
|
88
|
+
```
|
|
89
|
+
```text
|
|
90
|
+
>> Large QR: Provided URL is not alphanumeric!
|
|
91
|
+
>> Size: 29
|
|
92
|
+
>> Version: 3
|
|
93
|
+
>> Error Level: M
|
|
67
94
|
```
|
|
68
95
|
### PAC-CAT
|
|
69
96
|
|
|
@@ -75,7 +102,15 @@ if isinstance(pac_id, PAC_CAT):
|
|
|
75
102
|
pac_id.print_categories()
|
|
76
103
|
```
|
|
77
104
|
```text
|
|
78
|
-
>>
|
|
105
|
+
>> Main Category
|
|
106
|
+
>> ----------
|
|
107
|
+
>> key (): -DR
|
|
108
|
+
>> id (21): XQ908756
|
|
109
|
+
>> Category
|
|
110
|
+
>> ------
|
|
111
|
+
>> key (): -MD
|
|
112
|
+
>> model_number (240): bal500
|
|
113
|
+
>> serial_number (21): @1234
|
|
79
114
|
```
|
|
80
115
|
### Parse a PAC-ID with extensions
|
|
81
116
|
PAC-ID can have extensions. Here we parse a PAC-ID with attached display names and summary.
|
|
@@ -89,7 +124,7 @@ display_names = pac_id.get_extension('N') # display name has name 'N'
|
|
|
89
124
|
print(display_names)
|
|
90
125
|
```
|
|
91
126
|
```text
|
|
92
|
-
>>
|
|
127
|
+
>> Display names: My Balance ❤️
|
|
93
128
|
```
|
|
94
129
|
```python
|
|
95
130
|
# TREX
|
|
@@ -99,7 +134,7 @@ v = trex.get_segment('WEIGHT').to_python_type()
|
|
|
99
134
|
print(f'WEIGHT = {v}')
|
|
100
135
|
```
|
|
101
136
|
```text
|
|
102
|
-
>>
|
|
137
|
+
>> WEIGHT = 67.89 g
|
|
103
138
|
```
|
|
104
139
|
### Create a PAC-ID with Extensions
|
|
105
140
|
|
|
@@ -109,12 +144,12 @@ print(f'WEIGHT = {v}')
|
|
|
109
144
|
from labfreed.PAC_ID.data_model import PACID, IDSegment
|
|
110
145
|
from labfreed.utilities.well_known_keys import WellKnownKeys
|
|
111
146
|
|
|
112
|
-
pac_id = PACID(issuer='METTORIUS
|
|
147
|
+
pac_id = PACID(issuer='METTORIUS.COM', identifier=[IDSegment(key=WellKnownKeys.SERIAL, value='1234')])
|
|
113
148
|
pac_str = pac_id.serialize()
|
|
114
149
|
print(pac_str)
|
|
115
150
|
```
|
|
116
151
|
```text
|
|
117
|
-
>> HTTPS://PAC.METTORIUS
|
|
152
|
+
>> HTTPS://PAC.METTORIUS.COM/21:1234
|
|
118
153
|
```
|
|
119
154
|
#### Create a TREX
|
|
120
155
|
TREX can conveniently be created from a python dictionary.
|
|
@@ -139,7 +174,7 @@ trex.update(
|
|
|
139
174
|
)
|
|
140
175
|
|
|
141
176
|
# Create a table
|
|
142
|
-
table = DataTable(['DURATION', '
|
|
177
|
+
table = DataTable(['DURATION', 'Date', 'OK', 'COMMENT'])
|
|
143
178
|
table.append([Quantity(value=1, unit=Unit(symbol='h', name='hour')), datetime.now(), True, 'FOO'])
|
|
144
179
|
table.append([ 1.1, datetime.now(), True, 'BAR'])
|
|
145
180
|
table.append([ 1.3, datetime.now(), False, 'BLUBB'])
|
|
@@ -147,26 +182,35 @@ table.append([ 1.3, datetime.no
|
|
|
147
182
|
trex.update({'TABLE': table})
|
|
148
183
|
|
|
149
184
|
# Validation also works the same way for TREX
|
|
150
|
-
|
|
151
|
-
trex.print_validation_messages()
|
|
152
|
-
|
|
153
|
-
# Side Note: The TREX can be turned back into a dict
|
|
154
|
-
d = trex.dict()
|
|
185
|
+
trex.print_validation_messages(target='markdown')
|
|
155
186
|
```
|
|
156
187
|
```text
|
|
157
|
-
>>
|
|
188
|
+
>> =======================================
|
|
189
|
+
>> Validation Results
|
|
190
|
+
>> ---------------------------------------
|
|
191
|
+
>>
|
|
192
|
+
>> Error in TREX table column Date
|
|
193
|
+
>> DEMO$TREX/STOP$T.D:20240505T1306+TEMP$KEL:10.15+OK$T.B:F+COMMENT$T.A:FOO+COMMENT2$T.T:12G3+TABLE$$DURATION$HUR:D🔸a🔸🔸t🔸🔸e🔸$T.D:OK$T.B:COMMENT$T.A::1:20250409T094048.268:T:FOO::1.1:20250409T094048.268:T:BAR::1.3:20250409T094048.268:F:BLUBB
|
|
194
|
+
>> Column header key contains invalid characters: e,t,a
|
|
195
|
+
```
|
|
196
|
+
```python
|
|
197
|
+
# there is an error. 'Date' uses lower case. Lets fix it
|
|
198
|
+
d = trex.dict()
|
|
199
|
+
d['TABLE'].col_names[1] = 'DATE'
|
|
200
|
+
trex = TREX(name_='DEMO')
|
|
201
|
+
trex.update(d)
|
|
158
202
|
```
|
|
159
203
|
#### Combine PAC-ID and TREX and serialize
|
|
160
204
|
|
|
161
205
|
```python
|
|
162
|
-
from labfreed.parse_pac import PACID_With_Extensions
|
|
206
|
+
from labfreed.IO.parse_pac import PACID_With_Extensions
|
|
163
207
|
|
|
164
208
|
pac_with_trex = PACID_With_Extensions(pac_id=pac_id, extensions=[trex])
|
|
165
209
|
pac_str = pac_with_trex.serialize()
|
|
166
210
|
print(pac_str)
|
|
167
211
|
```
|
|
168
212
|
```text
|
|
169
|
-
>>
|
|
213
|
+
>> HTTPS://PAC.METTORIUS.COM/21:1234*DEMO$TREX/STOP$T.D:20240505T1306+TEMP$KEL:10.15+OK$T.B:F+COMMENT$T.A:FOO+COMMENT2$T.T:12G3+TABLE$$DURATION$HUR:DATE$T.D:OK$T.B:COMMENT$T.A::1:20250409T094048.268:T:FOO::1.1:20250409T094048.268:T:BAR::1.3:20250409T094048.268:F:BLUBB
|
|
170
214
|
```
|
|
171
215
|
<!-- END EXAMPLES -->
|
|
172
216
|
|
|
@@ -174,9 +218,13 @@ print(pac_str)
|
|
|
174
218
|
|
|
175
219
|
## Change Log
|
|
176
220
|
|
|
177
|
-
### v0.0.
|
|
178
|
-
-
|
|
221
|
+
### v0.0.20
|
|
222
|
+
- bugfix in TREX table to dict conversion
|
|
223
|
+
- markdown compatible validation printing
|
|
179
224
|
|
|
180
|
-
### v0.0.
|
|
225
|
+
### v0.0.19
|
|
181
226
|
- supports PAC-ID, PAC-CAT, TREX and DisplayName
|
|
227
|
+
- QR generation
|
|
182
228
|
- ok-ish test coverage
|
|
229
|
+
|
|
230
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
labfreed/__init__.py,sha256=JJg9mHM5goSWphrIerAaoiUjcOEZ7AXqGJIlmFog-pA,88
|
|
2
|
+
labfreed/validation.py,sha256=he9utRxQwks4ro94AVi8t5rU4jgRcA-6uz1XEmqoAnM,6359
|
|
3
|
+
labfreed/DisplayNameExtension/DisplayNameExtension.py,sha256=l9JZY2eRS0V-H5h3-WXIHiiBJuljns-_e_t9Bp84_CU,1155
|
|
4
|
+
labfreed/IO/generate_qr.py,sha256=wdZSf51Id03xSY8liK2RfB7WyGAw9O4s0VhZzrkAa-g,16680
|
|
5
|
+
labfreed/IO/parse_pac.py,sha256=2c-HXkiQdUrGTL8zGb5CmO9l6ZrCb07rrTMMKdMi3_o,6253
|
|
6
|
+
labfreed/PAC_CAT/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
|
|
7
|
+
labfreed/PAC_CAT/data_model.py,sha256=dGwcQGLy1Dk6SFbs9utxKQKm_4ROZrXdv618APlQg7M,14308
|
|
8
|
+
labfreed/PAC_ID/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
labfreed/PAC_ID/data_model.py,sha256=g09qgC-TV6fjJw9VyDF6mTJ6co2i2RKZc0Z-BmiiUIQ,7483
|
|
10
|
+
labfreed/PAC_ID/extensions.py,sha256=YKIE-aFf1jdL4sqCqUe3txjnP8-dA2zCJrT5lBSjvuE,1092
|
|
11
|
+
labfreed/TREX/UneceUnits.json,sha256=kwfQSp_nTuWbADfBBgqTWrvPl6XtM5SedEVLbMJrM7M,898953
|
|
12
|
+
labfreed/TREX/data_model.py,sha256=tGgjp76wbS1MSS1Ep842CZyintsbecTZrlapj8WwGH8,29704
|
|
13
|
+
labfreed/TREX/parse.py,sha256=86962VEJpkrTcT436iFIB5dNed5WHABzpjxRjkA3PXo,2043
|
|
14
|
+
labfreed/TREX/unece_units.py,sha256=scPKdsPzY1neAdFOhA08_tRZaR-yplM8mBhIzzDqZBk,3006
|
|
15
|
+
labfreed/utilities/base36.py,sha256=_yX8aQ1OwrK5tnJU1NUEzQSFGr9xAVnNvPObpNzCPYs,2895
|
|
16
|
+
labfreed/utilities/utility_types.py,sha256=dM0qZgshF3cHJThVzia7UIAOdkNLKukAaaduLqKSaMY,2195
|
|
17
|
+
labfreed/utilities/well_known_keys.py,sha256=nqk66kHdSwJTJfMKlP-xQbBglS8F_NoWsGkfOVITFN0,331
|
|
18
|
+
labfreed-0.0.20.dist-info/licenses/LICENSE,sha256=gHFOv9FRKHxO8cInP3YXyPoJnuNeqrvcHjaE_wPSsQ8,1100
|
|
19
|
+
labfreed-0.0.20.dist-info/WHEEL,sha256=Dyt6SBfaasWElUrURkknVFAZDHSTwxg3PaTza7RSbkY,100
|
|
20
|
+
labfreed-0.0.20.dist-info/METADATA,sha256=phvfg_T1RGixhz1rN27aqGk7xRlxLNs_yjj-Ts2Pc-k,6961
|
|
21
|
+
labfreed-0.0.20.dist-info/RECORD,,
|
labfreed-0.0.18.dist-info/RECORD
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
labfreed/__init__.py,sha256=reRp78_6uZrtmaZRtPjFWADn6svJqLZMou47EfBjrmU,88
|
|
2
|
-
labfreed/parse_pac.py,sha256=7y65HO1A3OEr5zftiEtrCaiLLI_8LoRPtQpPcKUNVik,6251
|
|
3
|
-
labfreed/validation.py,sha256=QwkZWJhAjWbPUZtJJwjVYsw9TxeFhdbZaKjrPPIpuAA,5937
|
|
4
|
-
labfreed/DisplayNameExtension/DisplayNameExtension.py,sha256=l9JZY2eRS0V-H5h3-WXIHiiBJuljns-_e_t9Bp84_CU,1155
|
|
5
|
-
labfreed/PAC_CAT/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
|
|
6
|
-
labfreed/PAC_CAT/data_model.py,sha256=dGwcQGLy1Dk6SFbs9utxKQKm_4ROZrXdv618APlQg7M,14308
|
|
7
|
-
labfreed/PAC_ID/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
labfreed/PAC_ID/data_model.py,sha256=g09qgC-TV6fjJw9VyDF6mTJ6co2i2RKZc0Z-BmiiUIQ,7483
|
|
9
|
-
labfreed/PAC_ID/extensions.py,sha256=bvuZnlNKUdwsDLrPm8fyifqPn_PR4wCVkkScFnvRiuM,1158
|
|
10
|
-
labfreed/QR_Generator/generate_qr.py,sha256=A4Bw_UESaB_igTDV2Y7a5T7vdz2Sb3yZCfHM0qKnu0M,18091
|
|
11
|
-
labfreed/TREX/UneceUnits.json,sha256=kwfQSp_nTuWbADfBBgqTWrvPl6XtM5SedEVLbMJrM7M,898953
|
|
12
|
-
labfreed/TREX/data_model.py,sha256=neKYBc5_S4t-v86DSaWLq81VJF4oS6eFUch3ChPTYJA,29705
|
|
13
|
-
labfreed/TREX/parse.py,sha256=86962VEJpkrTcT436iFIB5dNed5WHABzpjxRjkA3PXo,2043
|
|
14
|
-
labfreed/TREX/unece_units.py,sha256=scPKdsPzY1neAdFOhA08_tRZaR-yplM8mBhIzzDqZBk,3006
|
|
15
|
-
labfreed/utilities/base36.py,sha256=_yX8aQ1OwrK5tnJU1NUEzQSFGr9xAVnNvPObpNzCPYs,2895
|
|
16
|
-
labfreed/utilities/extension_intertpreters.py,sha256=B3IFJLfVMJQuPfBBtX6ywlDUZEi7_x6tY4g8V7SpWSs,124
|
|
17
|
-
labfreed/utilities/utility_types.py,sha256=Zhk8Mu4hHjkn1gs8oh7vOxxaT7L7wLMVG40ZOWCKGK4,2865
|
|
18
|
-
labfreed/utilities/well_known_keys.py,sha256=nqk66kHdSwJTJfMKlP-xQbBglS8F_NoWsGkfOVITFN0,331
|
|
19
|
-
labfreed-0.0.18.dist-info/licenses/LICENSE,sha256=gHFOv9FRKHxO8cInP3YXyPoJnuNeqrvcHjaE_wPSsQ8,1100
|
|
20
|
-
labfreed-0.0.18.dist-info/WHEEL,sha256=Dyt6SBfaasWElUrURkknVFAZDHSTwxg3PaTza7RSbkY,100
|
|
21
|
-
labfreed-0.0.18.dist-info/METADATA,sha256=FiS8P177t3OE6BwQMsQCUhg4y4GQihwmU4-U98WacAU,5382
|
|
22
|
-
labfreed-0.0.18.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|