fxn 0.0.19__py3-none-any.whl → 0.0.21__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.
- fxn/api/value.py +20 -10
- fxn/version.py +1 -1
- {fxn-0.0.19.dist-info → fxn-0.0.21.dist-info}/METADATA +1 -1
- {fxn-0.0.19.dist-info → fxn-0.0.21.dist-info}/RECORD +8 -8
- {fxn-0.0.19.dist-info → fxn-0.0.21.dist-info}/LICENSE +0 -0
- {fxn-0.0.19.dist-info → fxn-0.0.21.dist-info}/WHEEL +0 -0
- {fxn-0.0.19.dist-info → fxn-0.0.21.dist-info}/entry_points.txt +0 -0
- {fxn-0.0.19.dist-info → fxn-0.0.21.dist-info}/top_level.txt +0 -0
fxn/api/value.py
CHANGED
@@ -11,9 +11,10 @@ from json import loads, dumps
|
|
11
11
|
from numpy import array, float32, frombuffer, int32, ndarray
|
12
12
|
from pathlib import Path
|
13
13
|
from PIL import Image
|
14
|
+
from pydantic import BaseModel
|
14
15
|
from requests import get
|
15
16
|
from tempfile import NamedTemporaryFile
|
16
|
-
from typing import Dict, List, Optional, Union
|
17
|
+
from typing import Any, Dict, List, Optional, Union
|
17
18
|
from urllib.request import urlopen
|
18
19
|
|
19
20
|
from .dtype import Dtype
|
@@ -83,7 +84,7 @@ class Value:
|
|
83
84
|
@classmethod
|
84
85
|
def from_value (
|
85
86
|
cls,
|
86
|
-
value: Union[str, float, int, bool, ndarray, List, Dict[str, any], Path, Image.Image],
|
87
|
+
value: Union[str, float, int, bool, ndarray, List[Any], Dict[str, any], Path, Image.Image],
|
87
88
|
name: str,
|
88
89
|
min_upload_size: int=4096,
|
89
90
|
key: str=None
|
@@ -99,6 +100,7 @@ class Value:
|
|
99
100
|
Returns:
|
100
101
|
Value: Function value.
|
101
102
|
"""
|
103
|
+
value = cls.__try_ensure_serializable(value)
|
102
104
|
# None
|
103
105
|
if value is None:
|
104
106
|
return Value(None, type=Dtype.null)
|
@@ -139,10 +141,6 @@ class Value:
|
|
139
141
|
buffer = BytesIO(value.encode("utf-8"))
|
140
142
|
data = Storage.upload(buffer, UploadType.Value, name=name, data_url_limit=min_upload_size, key=key)
|
141
143
|
return Value(data, type=Dtype.dict)
|
142
|
-
# Dataclass # https://docs.python.org/3/library/dataclasses.html#dataclasses.is_dataclass
|
143
|
-
if is_dataclass(value) and not isinstance(value, type):
|
144
|
-
value = asdict(value)
|
145
|
-
return Value.from_value(value, name=name, min_upload_size=min_upload_size, key=key)
|
146
144
|
# Image
|
147
145
|
if isinstance(value, Image.Image):
|
148
146
|
buffer = BytesIO()
|
@@ -150,7 +148,7 @@ class Value:
|
|
150
148
|
value.save(buffer, format=format)
|
151
149
|
data = Storage.upload(buffer, UploadType.Value, name=name, data_url_limit=min_upload_size, key=key)
|
152
150
|
return Value(data, type=Dtype.image)
|
153
|
-
#
|
151
|
+
# Binary
|
154
152
|
if isinstance(value, Path):
|
155
153
|
assert value.exists(), "Value does not exist at the given path"
|
156
154
|
assert value.is_file(), "Value path must point to a file, not a directory"
|
@@ -178,11 +176,23 @@ class Value:
|
|
178
176
|
|
179
177
|
@classmethod
|
180
178
|
def __download_value_data (cls, url: str) -> BytesIO:
|
181
|
-
# Check if data URL
|
182
179
|
if url.startswith("data:"):
|
183
180
|
with urlopen(url) as response:
|
184
181
|
return BytesIO(response.read())
|
185
|
-
# Download
|
186
182
|
response = get(url)
|
187
183
|
result = BytesIO(response.content)
|
188
|
-
return result
|
184
|
+
return result
|
185
|
+
|
186
|
+
@classmethod
|
187
|
+
def __try_ensure_serializable (cls, value: Any) -> Any:
|
188
|
+
if value is None:
|
189
|
+
return value
|
190
|
+
if isinstance(value, Value): # passthrough
|
191
|
+
return value
|
192
|
+
if isinstance(value, list):
|
193
|
+
return [cls.__try_ensure_serializable(x) for x in value]
|
194
|
+
if is_dataclass(value) and not isinstance(value, type):
|
195
|
+
return asdict(value)
|
196
|
+
if isinstance(value, BaseModel):
|
197
|
+
return value.model_dump(mode="json")
|
198
|
+
return value
|
fxn/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
fxn/__init__.py,sha256=0NzZl5hRQ0MPNN4Wp9-ghqak2NJzhfHvVyBGX-IntKs,320
|
2
2
|
fxn/magic.py,sha256=TRgE68OAo1djmeQRiqxnSJqa72td6zxnwo0s0bkdUKM,1041
|
3
|
-
fxn/version.py,sha256=
|
3
|
+
fxn/version.py,sha256=pS0q_JGq_GGDrxYMd6x6dFCVcxH7u2LZZZT1h2PnK4g,95
|
4
4
|
fxn/api/__init__.py,sha256=UcCERjadfSbqnt7urXYbrdRRFwA0QwpC9uBQYPJC5rE,460
|
5
5
|
fxn/api/api.py,sha256=X2LRjer0s7ifecYsZmdqv5txEwPjA2ekdSCGUaQJ5So,927
|
6
6
|
fxn/api/dtype.py,sha256=z9zjjsOk8X8LTCEpwLuWOTUys6nP_3L6VmZXLt0ilAY,617
|
@@ -11,16 +11,16 @@ fxn/api/profile.py,sha256=76RVnP0wF9eT5kefqbRVj2T7e-6yZbK4bzggDS1CYjY,876
|
|
11
11
|
fxn/api/storage.py,sha256=GxSwYN5xOWovVJh1WfkVkwkWdCoBkeNP9OHTX8KgEiQ,4560
|
12
12
|
fxn/api/tag.py,sha256=g7HuRv5ZCYYDy4iV8P0hR1tEQ1pZjv-HeqbE0-Li1Bs,832
|
13
13
|
fxn/api/user.py,sha256=AMAwfVpsUsu1Q4Pu1LFfS8bReNaj9dNqBLOsF2qEVLQ,1272
|
14
|
-
fxn/api/value.py,sha256=
|
14
|
+
fxn/api/value.py,sha256=ZL1NroqxP4RNkrbrrCaZurXsWp2qdglpnmTozRm8ooA,7625
|
15
15
|
fxn/cli/__init__.py,sha256=5-yqKCUJCiNTA_7EHfCj5GZKthIQSdbPcVAdMnzYNLg,1492
|
16
16
|
fxn/cli/auth.py,sha256=_5rZ9L-blD39U6-SgHV9V2ltyjJ7k32NY3bLvoGsaNc,1659
|
17
17
|
fxn/cli/env.py,sha256=mnyaL27n59pCU-p2Jm1fo03se7btMV2zdoJWWVshF_M,1658
|
18
18
|
fxn/cli/misc.py,sha256=gLEGGWyawUQaLOuy8bfS2wrJuS-tN-bleOrv5A07xck,690
|
19
19
|
fxn/cli/predict.py,sha256=YP7BiqnT39AeeA3A9EXfHmw-6t5vCxOu27_kjinWdGE,3178
|
20
20
|
fxn/cli/predictors.py,sha256=vAL1FioQSseEiu7jbXY0DRiHnnMmThK2csJLThizS7A,3481
|
21
|
-
fxn-0.0.
|
22
|
-
fxn-0.0.
|
23
|
-
fxn-0.0.
|
24
|
-
fxn-0.0.
|
25
|
-
fxn-0.0.
|
26
|
-
fxn-0.0.
|
21
|
+
fxn-0.0.21.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
22
|
+
fxn-0.0.21.dist-info/METADATA,sha256=1TAftjeYqJAaSUEgkUioXFghSBPyEK0P_NdPaeDNjSk,2887
|
23
|
+
fxn-0.0.21.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
24
|
+
fxn-0.0.21.dist-info/entry_points.txt,sha256=QBwKIRed76CRY98VYQYrQDVEBZtJugxJJmBpilxuios,46
|
25
|
+
fxn-0.0.21.dist-info/top_level.txt,sha256=1ULIEGrnMlhId8nYAkjmRn9g3KEFuHKboq193SEKQkA,4
|
26
|
+
fxn-0.0.21.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|