labfreed 0.2.0b1__py3-none-any.whl → 0.2.1__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/__init__.py +1 -1
- labfreed/pac_cat/category_base.py +1 -1
- labfreed/pac_id_resolver/cit_v1.py +1 -1
- {labfreed-0.2.0b1.dist-info → labfreed-0.2.1.dist-info}/METADATA +80 -70
- {labfreed-0.2.0b1.dist-info → labfreed-0.2.1.dist-info}/RECORD +7 -7
- {labfreed-0.2.0b1.dist-info → labfreed-0.2.1.dist-info}/WHEEL +0 -0
- {labfreed-0.2.0b1.dist-info → labfreed-0.2.1.dist-info}/licenses/LICENSE +0 -0
labfreed/__init__.py
CHANGED
|
@@ -41,7 +41,7 @@ class Category(LabFREED_BaseModel):
|
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
def __str__(self):
|
|
44
|
-
s = '\n'.join( [f
|
|
44
|
+
s = '\n'.join( [f"{field_name} \t ({field_info.alias or ''}): \t {getattr(self, field_name)}" for field_name, field_info in self.model_fields.items() if getattr(self, field_name)])
|
|
45
45
|
return s
|
|
46
46
|
|
|
47
47
|
|
|
@@ -110,7 +110,7 @@ class CIT_v1(LabFREED_BaseModel):
|
|
|
110
110
|
i = int(m.group(1)) - 1 # CIT is 1 based
|
|
111
111
|
seg = pac.identifier[i] if i < len(pac.identifier) else None
|
|
112
112
|
if seg:
|
|
113
|
-
return f"{(seg.key + ':') if seg.key else
|
|
113
|
+
return f"{(seg.key + ':') if seg.key else ''}{seg.value}"
|
|
114
114
|
|
|
115
115
|
elif m := re.match(r'\{idVal(\w+)\}', value):
|
|
116
116
|
k = m.group(1)
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: labfreed
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Python implementation of LabFREED building blocks
|
|
5
5
|
Author-email: Reto Thürer <thuerer.r@buchi.com>
|
|
6
6
|
Requires-Python: >=3.11
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
8
9
|
Classifier: Programming Language :: Python
|
|
9
10
|
Classifier: Programming Language :: Python :: 3
|
|
10
11
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -21,6 +22,7 @@ Requires-Dist: segno>=1.6.6
|
|
|
21
22
|
Requires-Dist: typer>=0.15.2
|
|
22
23
|
Requires-Dist: PyYAML>=6.0.2
|
|
23
24
|
Requires-Dist: jsonpath-ng>=1.7.0
|
|
25
|
+
Requires-Dist: requests>=2.32.3
|
|
24
26
|
Requires-Dist: pytest>=8.3.5 ; extra == "dev"
|
|
25
27
|
Requires-Dist: pdoc>=15.0.1 ; extra == "dev"
|
|
26
28
|
Requires-Dist: flit>=3.12.0 ; extra == "dev"
|
|
@@ -29,11 +31,8 @@ Provides-Extra: dev
|
|
|
29
31
|
|
|
30
32
|
# LabFREED for Python
|
|
31
33
|
|
|
32
|
-
[](https://pypi.org/project/labfreed/)  [](https://github.com/retothuerer/LabFREED/actions/workflows/run-tests.yml) [](LICENSE)
|
|
33
35
|
|
|
34
|
-
<!--
|
|
35
|
-
[](https://github.com/retothuerer/LabFREED/actions/workflows/ci.yml)
|
|
36
|
-
-->
|
|
37
36
|
|
|
38
37
|
This is a Python implementation of [LabFREED](https://labfreed.wega-it.com) building blocks.
|
|
39
38
|
|
|
@@ -71,14 +70,13 @@ pip install labfreed
|
|
|
71
70
|
# import built ins
|
|
72
71
|
import os
|
|
73
72
|
|
|
74
|
-
|
|
73
|
+
|
|
75
74
|
```
|
|
76
75
|
### Parse a simple PAC-ID
|
|
77
76
|
|
|
78
77
|
```python
|
|
79
78
|
# Parse the PAC-ID
|
|
80
|
-
from labfreed
|
|
81
|
-
from labfreed import PAC_ID, LabFREED_ValidationError # noqa: E402, F811
|
|
79
|
+
from labfreed import PAC_ID, LabFREED_ValidationError
|
|
82
80
|
|
|
83
81
|
pac_str = 'HTTPS://PAC.METTORIUS.COM/-MD/bal500/@1234'
|
|
84
82
|
try:
|
|
@@ -97,36 +95,38 @@ Note that the PAC-ID -- while valid -- uses characters which are not recommended
|
|
|
97
95
|
There is a nice function to highlight problems
|
|
98
96
|
|
|
99
97
|
```python
|
|
100
|
-
pac.print_validation_messages(
|
|
98
|
+
pac.print_validation_messages()
|
|
101
99
|
```
|
|
102
100
|
```text
|
|
103
|
-
>> Validation Results
|
|
104
|
-
>>
|
|
105
|
-
>> │ RECOMMENDATION in id segment value bal500
|
|
106
|
-
>> │ Characters '
|
|
107
|
-
>> │
|
|
108
|
-
>> │
|
|
109
|
-
>>
|
|
110
|
-
>>
|
|
111
|
-
>> │
|
|
112
|
-
>> │
|
|
113
|
-
>> │
|
|
114
|
-
>>
|
|
115
|
-
>>
|
|
116
|
-
>> │
|
|
117
|
-
>> │
|
|
118
|
-
>> │
|
|
119
|
-
>>
|
|
120
|
-
>> │
|
|
121
|
-
>>
|
|
122
|
-
>> │
|
|
123
|
-
>> │
|
|
124
|
-
>>
|
|
101
|
+
>> Validation Results
|
|
102
|
+
>> ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
103
|
+
>> │ RECOMMENDATION in id segment value bal500 │
|
|
104
|
+
>> │ Characters 'a','l','b' should not be used., Characters SHOULD be limited to upper case letters (A-Z), numbers (0-9), '-' and │
|
|
105
|
+
>> │ '+' │
|
|
106
|
+
>> │ │
|
|
107
|
+
>> │ HTTPS://PAC.METTORIUS.COM/-MD/240:👉bal👈500/21:@1234 │
|
|
108
|
+
>> ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
|
109
|
+
>> │ RECOMMENDATION in id segment value @1234 │
|
|
110
|
+
>> │ Characters '@' should not be used., Characters SHOULD be limited to upper case letters (A-Z), numbers (0-9), '-' and '+' │
|
|
111
|
+
>> │ │
|
|
112
|
+
>> │ HTTPS://PAC.METTORIUS.COM/-MD/240:bal500/21:👉@👈1234 │
|
|
113
|
+
>> ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
|
114
|
+
>> │ RECOMMENDATION in id segment value bal500 │
|
|
115
|
+
>> │ Characters 'a','l','b' should not be used., Characters SHOULD be limited to upper case letters (A-Z), numbers (0-9), '-' and │
|
|
116
|
+
>> │ '+' │
|
|
117
|
+
>> │ │
|
|
118
|
+
>> │ HTTPS://PAC.METTORIUS.COM/-MD/240:👉bal👈500/21:@1234 │
|
|
119
|
+
>> ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
|
120
|
+
>> │ RECOMMENDATION in id segment value @1234 │
|
|
121
|
+
>> │ Characters '@' should not be used., Characters SHOULD be limited to upper case letters (A-Z), numbers (0-9), '-' and '+' │
|
|
122
|
+
>> │ │
|
|
123
|
+
>> │ HTTPS://PAC.METTORIUS.COM/-MD/240:bal500/21:👉@👈1234 │
|
|
124
|
+
>> └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
125
125
|
```
|
|
126
126
|
### Save as QR Code
|
|
127
127
|
|
|
128
128
|
```python
|
|
129
|
-
from labfreed.qr import save_qr_with_markers
|
|
129
|
+
from labfreed.qr import save_qr_with_markers
|
|
130
130
|
|
|
131
131
|
save_qr_with_markers(pac_str, fmt='png')
|
|
132
132
|
```
|
|
@@ -141,7 +141,7 @@ PAC-CAT defines a (optional) way how the identifier is structured.
|
|
|
141
141
|
PAC_ID.from_url() automatically converts to PAC-CAT if possible.
|
|
142
142
|
|
|
143
143
|
```python
|
|
144
|
-
from labfreed.pac_cat import PAC_CAT
|
|
144
|
+
from labfreed.pac_cat import PAC_CAT
|
|
145
145
|
pac_str = 'HTTPS://PAC.METTORIUS.COM/-DR/XQ908756/-MD/bal500/@1234'
|
|
146
146
|
pac = PAC_ID.from_url(pac_str)
|
|
147
147
|
if isinstance(pac, PAC_CAT):
|
|
@@ -197,8 +197,8 @@ print(f'WEIGHT = {v.value}')
|
|
|
197
197
|
#### Create PAC-ID
|
|
198
198
|
|
|
199
199
|
```python
|
|
200
|
-
from labfreed.pac_id import PAC_ID, IDSegment
|
|
201
|
-
from labfreed.well_known_keys.labfreed.well_known_keys import WellKnownKeys
|
|
200
|
+
from labfreed.pac_id import PAC_ID, IDSegment
|
|
201
|
+
from labfreed.well_known_keys.labfreed.well_known_keys import WellKnownKeys
|
|
202
202
|
|
|
203
203
|
pac = PAC_ID(issuer='METTORIUS.COM', identifier=[IDSegment(key=WellKnownKeys.SERIAL, value='1234')])
|
|
204
204
|
pac_str = pac.to_url()
|
|
@@ -212,10 +212,10 @@ TREX can conveniently be created from a python dictionary.
|
|
|
212
212
|
Note that utility types for Quantity (number with unit) and table are needed
|
|
213
213
|
|
|
214
214
|
```python
|
|
215
|
-
from datetime import datetime
|
|
216
|
-
from labfreed.trex.python_convenience.pyTREX import pyTREX
|
|
217
|
-
from labfreed.trex.python_convenience.data_table import DataTable
|
|
218
|
-
from labfreed.trex.python_convenience.quantity import Quantity
|
|
215
|
+
from datetime import datetime
|
|
216
|
+
from labfreed.trex.python_convenience.pyTREX import pyTREX
|
|
217
|
+
from labfreed.trex.python_convenience.data_table import DataTable
|
|
218
|
+
from labfreed.trex.python_convenience.quantity import Quantity
|
|
219
219
|
|
|
220
220
|
# Value segments of different type
|
|
221
221
|
segments = {
|
|
@@ -240,40 +240,40 @@ trex = mydata.to_trex()
|
|
|
240
240
|
|
|
241
241
|
|
|
242
242
|
# Validation also works the same way for TREX
|
|
243
|
-
trex.print_validation_messages(
|
|
243
|
+
trex.print_validation_messages()
|
|
244
244
|
```
|
|
245
245
|
```text
|
|
246
246
|
>> Validation Results
|
|
247
247
|
>> ┌────────────────────────────────────────────────────────────┐
|
|
248
248
|
>> │ ERROR in TREX table column Date │
|
|
249
|
-
>> │ Column header key contains invalid characters: 'a','
|
|
249
|
+
>> │ Column header key contains invalid characters: 'a','e','t' │
|
|
250
250
|
>> │ │
|
|
251
251
|
>> │ STOP$T.D:20240505T1306 │
|
|
252
252
|
>> │ +TEMP$KEL:10.15 │
|
|
253
253
|
>> │ +OK$T.B:F │
|
|
254
254
|
>> │ +COMMENT$T.A:FOO │
|
|
255
255
|
>> │ +COMMENT2$T.T:QMDTNXIKU │
|
|
256
|
-
>> │ +TABLE$$DURATION$HUR:
|
|
257
|
-
>> │ 1:
|
|
258
|
-
>> │ 1.1:
|
|
259
|
-
>> │ 1.3:
|
|
256
|
+
>> │ +TABLE$$DURATION$HUR:D👉ate👈$T.D:OK$T.B:COMMENT$T.A:: │
|
|
257
|
+
>> │ 1:20250424T161739.312:T:FOO:: │
|
|
258
|
+
>> │ 1.1:20250424T161739.312:T:BAR:: │
|
|
259
|
+
>> │ 1.3:20250424T161739.312:F:BLUBB │
|
|
260
260
|
>> └────────────────────────────────────────────────────────────┘
|
|
261
261
|
```
|
|
262
262
|
#### Combine PAC-ID and TREX and serialize
|
|
263
263
|
|
|
264
264
|
```python
|
|
265
|
-
from labfreed.well_known_extensions import TREX_Extension
|
|
265
|
+
from labfreed.well_known_extensions import TREX_Extension
|
|
266
266
|
pac.extensions = [TREX_Extension(name='MYTREX', trex=trex)]
|
|
267
267
|
pac_str = pac.to_url()
|
|
268
268
|
print(pac_str)
|
|
269
269
|
```
|
|
270
270
|
```text
|
|
271
|
-
>> HTTPS://PAC.METTORIUS.COM/21:1234*MYTREX$TREX/STOP$T.D:20240505T1306+TEMP$KEL:10.15+OK$T.B:F+COMMENT$T.A:FOO+COMMENT2$T.T:QMDTNXIKU+TABLE$$DURATION$HUR:Date$T.D:OK$T.B:COMMENT$T.A::1:
|
|
271
|
+
>> HTTPS://PAC.METTORIUS.COM/21:1234*MYTREX$TREX/STOP$T.D:20240505T1306+TEMP$KEL:10.15+OK$T.B:F+COMMENT$T.A:FOO+COMMENT2$T.T:QMDTNXIKU+TABLE$$DURATION$HUR:Date$T.D:OK$T.B:COMMENT$T.A::1:20250424T161739.312:T:FOO::1.1:20250424T161739.312:T:BAR::1.3:20250424T161739.312:F:BLUBB
|
|
272
272
|
```
|
|
273
273
|
## PAC-ID Resolver
|
|
274
274
|
|
|
275
275
|
```python
|
|
276
|
-
from labfreed.pac_id_resolver import PAC_ID_Resolver, load_cit
|
|
276
|
+
from labfreed.pac_id_resolver import PAC_ID_Resolver, load_cit
|
|
277
277
|
# Get a CIT
|
|
278
278
|
dir = os.path.join(os.getcwd(), 'examples')
|
|
279
279
|
p = os.path.join(dir, 'cit_mine.yaml')
|
|
@@ -281,7 +281,7 @@ cit = load_cit(p)
|
|
|
281
281
|
|
|
282
282
|
# validate the CIT
|
|
283
283
|
cit.is_valid
|
|
284
|
-
cit.print_validation_messages(
|
|
284
|
+
cit.print_validation_messages()
|
|
285
285
|
```
|
|
286
286
|
```python
|
|
287
287
|
# get a second cit
|
|
@@ -299,31 +299,41 @@ for sg in service_groups:
|
|
|
299
299
|
|
|
300
300
|
```
|
|
301
301
|
```text
|
|
302
|
-
>>
|
|
303
|
-
>> ┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
|
|
304
|
-
>> ┃ Service Name ┃ URL ┃ Reachable ┃
|
|
305
|
-
>> ┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
|
|
306
|
-
>> │ CAS Search │ https://pubchem.ncbi.nlm.nih.gov/#query=7732-18-5 │ ACTIVE │
|
|
307
|
-
>> └──────────────┴───────────────────────────────────────────────────┴───────────┘
|
|
308
|
-
>> Services from origin 'MY_COMPANY
|
|
309
|
-
>> ┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
|
|
310
|
-
>> ┃ Service Name ┃ URL ┃ Reachable ┃
|
|
311
|
-
>> ┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
|
|
312
|
-
>> │ Chemical Management │ https://chem-manager.com/METTORIUS.COM/-MS/240:X3511/CAS:7732-18-5 │ INACTIVE │
|
|
313
|
-
>> └─────────────────────┴────────────────────────────────────────────────────────────────────┴───────────┘
|
|
314
|
-
>> Services from origin 'METTORIUS.COM
|
|
315
|
-
>> ┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
|
|
316
|
-
>> ┃ Service Name ┃ URL ┃ Reachable ┃
|
|
317
|
-
>> ┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
|
|
318
|
-
>> │ CoA │ https://mettorius.com/CoA.pdf │ ACTIVE │
|
|
319
|
-
>> │ MSDS │ https://mettorius.com/MSDS.pdf │ ACTIVE │
|
|
320
|
-
>> │ Shop │ https://mettorius.com/shop.html │ ACTIVE │
|
|
321
|
-
>> └──────────────┴─────────────────────────────────┴───────────┘
|
|
302
|
+
>> [Error during execution: No Internet Connection]
|
|
322
303
|
```
|
|
323
304
|
<!-- END EXAMPLES -->
|
|
324
305
|
|
|
325
306
|
|
|
326
307
|
|
|
308
|
+
<!-- BEGIN CHANGELOG -->
|
|
327
309
|
## Change Log
|
|
328
|
-
|
|
310
|
+
### v0.2.1
|
|
311
|
+
- improved docu. no code changes
|
|
312
|
+
|
|
313
|
+
### v0.2.0b2
|
|
314
|
+
- improvements in api consistency and ease of use
|
|
315
|
+
- restructured code for better separation of concerns
|
|
316
|
+
- support for coupling information table v1
|
|
329
317
|
|
|
318
|
+
### v0.1.1
|
|
319
|
+
- minor internal improvements and bugfixes
|
|
320
|
+
|
|
321
|
+
### v0.1.0
|
|
322
|
+
- DRAFT Support for PAC-ID Resolver
|
|
323
|
+
|
|
324
|
+
### v0.0.20
|
|
325
|
+
- bugfix in TREX table to dict conversion
|
|
326
|
+
- markdown compatible validation printing
|
|
327
|
+
|
|
328
|
+
### v0.0.19
|
|
329
|
+
- supports PAC-ID, PAC-CAT, TREX and DisplayName
|
|
330
|
+
- QR generation
|
|
331
|
+
- ok-ish test coverage
|
|
332
|
+
|
|
333
|
+
# Attributions
|
|
334
|
+
The following tools were used:
|
|
335
|
+
- [pdoc](https://pdoc.dev/) was a great help with generating documentation
|
|
336
|
+
- [Pydantic](https://docs.pydantic.dev/latest/)
|
|
337
|
+
- json with UNECE units from (https://github.com/quadient/unece-units/blob/main/python/src/unece_excel_parser/parsedUneceUnits.json)
|
|
338
|
+
- json with GS1 codes from (https://ref.gs1.org/ai/GS1_Application_Identifiers.jsonld)
|
|
339
|
+
<!-- END CHANGELOG -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
labfreed/__init__.py,sha256=
|
|
1
|
+
labfreed/__init__.py,sha256=CgFS3IzTYiq7S4f4VZzeneIGDHNBVqFn-9BQ0xCpzbQ,224
|
|
2
2
|
labfreed/labfreed_infrastructure.py,sha256=V-5sLhqKkfckKim5VxlB_D1qIzk-Ztxfx4VIlwaR6Jc,10850
|
|
3
3
|
labfreed/pac_cat/__init__.py,sha256=rJ2dFTN8aErTvGf4xwcNZ04xrbTieLAE2v5C2bmgPOA,507
|
|
4
|
-
labfreed/pac_cat/category_base.py,sha256=
|
|
4
|
+
labfreed/pac_cat/category_base.py,sha256=lFQNiTUukyhWdaSCAI7CZxLtj6kNtnBCE4UsePwsGqE,1801
|
|
5
5
|
labfreed/pac_cat/pac_cat.py,sha256=UxWyPsuZsekq3ZmHSQLBdB1tocvVlxz_FOQXxHg_dlU,5800
|
|
6
6
|
labfreed/pac_cat/predefined_categories.py,sha256=BEf7rxN5IcKVhuxMNhdfQ_1xnkax5l8Z1pJMRIROKpw,8510
|
|
7
7
|
labfreed/pac_id/__init__.py,sha256=NGMbzkwQ4txKeT5pxdIZordwHO8J3_q84jzPanjKoHg,675
|
|
@@ -11,7 +11,7 @@ labfreed/pac_id/pac_id.py,sha256=IWXYlKFjQKB_9U5bINWC5_Lb5pcVbuleocvGs79A28w,530
|
|
|
11
11
|
labfreed/pac_id/url_parser.py,sha256=016Gd-V2OORDN2toAZEPmnXobrWNVVXM_zICBrQtqGY,5863
|
|
12
12
|
labfreed/pac_id/url_serializer.py,sha256=3D5pwcAP4ZrCQ22BRtxIwqWrFtZuY9913hCLPJNeyPI,2845
|
|
13
13
|
labfreed/pac_id_resolver/__init__.py,sha256=RNBlrDOSR42gmSNH9wJVhK_xwEX45cvTKVgWW2bjh7Q,113
|
|
14
|
-
labfreed/pac_id_resolver/cit_v1.py,sha256=
|
|
14
|
+
labfreed/pac_id_resolver/cit_v1.py,sha256=G5CitglgN9Vg0yoNPApcgcI1GjOgW6k4HUwqpJgINKQ,5800
|
|
15
15
|
labfreed/pac_id_resolver/cit_v2.py,sha256=J7KsYUKSz4k7lqSHmLnouRY-etEbwmcj35O5SqVRm-o,11594
|
|
16
16
|
labfreed/pac_id_resolver/resolver.py,sha256=x0XR0aWQVLptjtEwft8VPjggJEd8leTypQPUdzSyBaI,2160
|
|
17
17
|
labfreed/pac_id_resolver/services.py,sha256=TPoH6YlSwa0hmawHpOiMwIpBAinhoRhMSoexop0YscI,2462
|
|
@@ -38,7 +38,7 @@ labfreed/well_known_keys/labfreed/well_known_keys.py,sha256=nqk66kHdSwJTJfMKlP-x
|
|
|
38
38
|
labfreed/well_known_keys/unece/UneceUnits.json,sha256=kwfQSp_nTuWbADfBBgqTWrvPl6XtM5SedEVLbMJrM7M,898953
|
|
39
39
|
labfreed/well_known_keys/unece/__init__.py,sha256=MSP9lmjg9_D9iqG9Yq2_ajYfQSNS9wIT7FXA1c--59M,122
|
|
40
40
|
labfreed/well_known_keys/unece/unece_units.py,sha256=gNDQk6KGl-nGMf9Ycq_fQ8P2xxKITgLkcQWPd4H49gI,1630
|
|
41
|
-
labfreed-0.2.
|
|
42
|
-
labfreed-0.2.
|
|
43
|
-
labfreed-0.2.
|
|
44
|
-
labfreed-0.2.
|
|
41
|
+
labfreed-0.2.1.dist-info/licenses/LICENSE,sha256=gHFOv9FRKHxO8cInP3YXyPoJnuNeqrvcHjaE_wPSsQ8,1100
|
|
42
|
+
labfreed-0.2.1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
43
|
+
labfreed-0.2.1.dist-info/METADATA,sha256=TZAAEd3mlli0oXeEkQ7x5kbfpwMI59mx8WVIbS5KxQU,14965
|
|
44
|
+
labfreed-0.2.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|