UncountablePythonSDK 0.0.172__py3-none-any.whl → 0.0.173.dev2__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.
- docs/requirements.txt +1 -1
- pkgs/argument_parser/parser_inner.py +15 -11
- pkgs/argument_parser/parser_options.py +1 -1
- pkgs/serialization/serial_class.py +17 -0
- pkgs/serialization_util/serialization_helpers.py +8 -1
- pkgs/type_spec/builder.py +22 -0
- pkgs/type_spec/emit_io_ts.py +2 -2
- pkgs/type_spec/emit_open_api.py +2 -2
- pkgs/type_spec/emit_python.py +17 -0
- pkgs/type_spec/emit_typescript_util.py +10 -2
- pkgs/type_spec/type_info/emit_type_info.py +2 -2
- uncountable/integration/telemetry.py +1 -1
- {uncountablepythonsdk-0.0.172.dist-info → uncountablepythonsdk-0.0.173.dev2.dist-info}/METADATA +1 -1
- {uncountablepythonsdk-0.0.172.dist-info → uncountablepythonsdk-0.0.173.dev2.dist-info}/RECORD +16 -16
- {uncountablepythonsdk-0.0.172.dist-info → uncountablepythonsdk-0.0.173.dev2.dist-info}/WHEEL +0 -0
- {uncountablepythonsdk-0.0.172.dist-info → uncountablepythonsdk-0.0.173.dev2.dist-info}/top_level.txt +0 -0
docs/requirements.txt
CHANGED
|
@@ -136,7 +136,7 @@ def _build_parser_discriminated_union(
|
|
|
136
136
|
) -> ParserFunction[T]:
|
|
137
137
|
discriminator = (
|
|
138
138
|
snake_to_camel_case(discriminator_raw)
|
|
139
|
-
if context.options.
|
|
139
|
+
if context.options.is_api_encoding
|
|
140
140
|
else discriminator_raw
|
|
141
141
|
)
|
|
142
142
|
|
|
@@ -318,7 +318,7 @@ def build_parser_inner(
|
|
|
318
318
|
field_name: field_parser(
|
|
319
319
|
value.get(
|
|
320
320
|
snake_to_camel_case(field_name)
|
|
321
|
-
if context.options.
|
|
321
|
+
if context.options.is_api_encoding
|
|
322
322
|
else field_name
|
|
323
323
|
)
|
|
324
324
|
)
|
|
@@ -403,7 +403,7 @@ def build_parser_inner(
|
|
|
403
403
|
# enum keys and OpaqueData's would also have string value types,
|
|
404
404
|
# but their explicit type is not a string, thus shouldn't be converted
|
|
405
405
|
and args[0] is str
|
|
406
|
-
and context.options.
|
|
406
|
+
and context.options.is_api_encoding
|
|
407
407
|
):
|
|
408
408
|
return camel_to_snake_case(value)
|
|
409
409
|
return inner
|
|
@@ -574,14 +574,18 @@ def _build_parser_dataclass(
|
|
|
574
574
|
serial_class_data = get_serial_class_data(parsed_type)
|
|
575
575
|
|
|
576
576
|
def resolve_serialized_field_name(*, field_name: str) -> str:
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
if
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
577
|
+
if context.options.is_api_encoding:
|
|
578
|
+
emit_api_override = serial_class_data.get_emit_api_override(field_name)
|
|
579
|
+
if emit_api_override is not None:
|
|
580
|
+
assert not serial_class_data.has_unconverted_key(field_name), (
|
|
581
|
+
f"serial class field {field_name!r} appears in both "
|
|
582
|
+
"emit_api_overrides and unconverted_keys; the features cannot "
|
|
583
|
+
"be combined"
|
|
584
|
+
)
|
|
585
|
+
return emit_api_override
|
|
586
|
+
if not serial_class_data.has_unconverted_key(field_name):
|
|
587
|
+
return snake_to_camel_case(field_name)
|
|
588
|
+
return field_name
|
|
585
589
|
|
|
586
590
|
def parse(value: typing.Any) -> typing.Any:
|
|
587
591
|
# Use an exact type match to prevent base/derived class mismatches
|
|
@@ -16,6 +16,7 @@ class _SerialClassData(SerialBase):
|
|
|
16
16
|
unconverted_values: set[str] = dataclasses.field(default_factory=set)
|
|
17
17
|
to_string_values: set[str] = dataclasses.field(default_factory=set)
|
|
18
18
|
parse_require: set[str] = dataclasses.field(default_factory=set)
|
|
19
|
+
emit_api_overrides: dict[str, str] = dataclasses.field(default_factory=dict)
|
|
19
20
|
named_type_path: str | None = None
|
|
20
21
|
|
|
21
22
|
|
|
@@ -28,6 +29,7 @@ def serial_class(
|
|
|
28
29
|
unconverted_values: set[str] | None = None,
|
|
29
30
|
to_string_values: set[str] | None = None,
|
|
30
31
|
parse_require: set[str] | None = None,
|
|
32
|
+
emit_api_overrides: dict[str, str] | None = None,
|
|
31
33
|
named_type_path: str | None = None,
|
|
32
34
|
is_dynamic_allowed: bool = False,
|
|
33
35
|
) -> Callable[[ClassT], ClassT]:
|
|
@@ -50,6 +52,13 @@ def serial_class(
|
|
|
50
52
|
This field is always required while parsing, even if it has a default in the definition.
|
|
51
53
|
This allows supporting literal type defaults for Python instantiation, but
|
|
52
54
|
requiring them for the API input.
|
|
55
|
+
@param emit_api_overrides
|
|
56
|
+
Maps Python field name -> the API JSON key used in serialization
|
|
57
|
+
and parsing. Lets a property carry a specific, potentially non-
|
|
58
|
+
standard, name on the API boundary; the Python field name and
|
|
59
|
+
storage encoding are unaffected. Replaces the default camelCase
|
|
60
|
+
conversion. Cannot be combined with `unconverted_keys` for the
|
|
61
|
+
same field; doing so raises at parse and serialize time.
|
|
53
62
|
@param named_type_path
|
|
54
63
|
The type_spec type-path to this type. This applies only to named types.
|
|
55
64
|
"""
|
|
@@ -60,6 +69,7 @@ def serial_class(
|
|
|
60
69
|
unconverted_values=unconverted_values or set(),
|
|
61
70
|
to_string_values=to_string_values or set(),
|
|
62
71
|
parse_require=parse_require or set(),
|
|
72
|
+
emit_api_overrides=emit_api_overrides or {},
|
|
63
73
|
named_type_path=named_type_path,
|
|
64
74
|
from_decorator=True,
|
|
65
75
|
is_dynamic_allowed=is_dynamic_allowed,
|
|
@@ -90,6 +100,9 @@ class SerialClassDataInspector(SerialInspector[ClassT]):
|
|
|
90
100
|
def has_parse_require(self, key: str) -> bool:
|
|
91
101
|
return key in self.current.parse_require
|
|
92
102
|
|
|
103
|
+
def get_emit_api_override(self, key: str) -> str | None:
|
|
104
|
+
return self.current.emit_api_overrides.get(key)
|
|
105
|
+
|
|
93
106
|
|
|
94
107
|
def get_merged_serial_class_data(
|
|
95
108
|
type_class: SerialType[Any],
|
|
@@ -119,6 +132,10 @@ def get_merged_serial_class_data(
|
|
|
119
132
|
| curr_base_class_data.to_string_values,
|
|
120
133
|
parse_require=base_class_data.parse_require
|
|
121
134
|
| curr_base_class_data.parse_require,
|
|
135
|
+
emit_api_overrides={
|
|
136
|
+
**curr_base_class_data.emit_api_overrides,
|
|
137
|
+
**base_class_data.emit_api_overrides,
|
|
138
|
+
},
|
|
122
139
|
)
|
|
123
140
|
return base_class_data
|
|
124
141
|
|
|
@@ -131,7 +131,14 @@ def _get_dataclass_conversion_lookups(dataclass_type: Any) -> DataclassConversio
|
|
|
131
131
|
|
|
132
132
|
for field in dataclasses.fields(dataclass_type):
|
|
133
133
|
key = field.name
|
|
134
|
-
|
|
134
|
+
emit_api_override = scd.get_emit_api_override(key)
|
|
135
|
+
if emit_api_override is not None:
|
|
136
|
+
assert not scd.has_unconverted_key(key), (
|
|
137
|
+
f"serial class field {key!r} appears in both emit_api_overrides "
|
|
138
|
+
"and unconverted_keys; the features cannot be combined"
|
|
139
|
+
)
|
|
140
|
+
key_conversions[key] = emit_api_override
|
|
141
|
+
elif scd.has_unconverted_key(key):
|
|
135
142
|
key_conversions[key] = key
|
|
136
143
|
else:
|
|
137
144
|
key_conversions[key] = key_convert_to_camelcase(key)
|
pkgs/type_spec/builder.py
CHANGED
|
@@ -66,6 +66,11 @@ class SpecProperty:
|
|
|
66
66
|
convert_value: PropertyConvertValue
|
|
67
67
|
# Conversion of this property's name
|
|
68
68
|
name_case: NameCase
|
|
69
|
+
# Pins the name used for this property in API emission to this exact
|
|
70
|
+
# string. The JSON key on the API boundary and the TypeScript field
|
|
71
|
+
# name both use this value verbatim. The Python field name and storage
|
|
72
|
+
# encoding are unaffected.
|
|
73
|
+
emit_api: str | None = None
|
|
69
74
|
default: Any = None
|
|
70
75
|
has_default: bool = False
|
|
71
76
|
# Requires this value in parsing, even if it has a default
|
|
@@ -368,6 +373,7 @@ class SpecTypeDefn(SpecType):
|
|
|
368
373
|
"convert_value",
|
|
369
374
|
"default",
|
|
370
375
|
"desc",
|
|
376
|
+
"emit_api",
|
|
371
377
|
"ext_info",
|
|
372
378
|
"extant",
|
|
373
379
|
"label",
|
|
@@ -395,6 +401,21 @@ class SpecTypeDefn(SpecType):
|
|
|
395
401
|
if name_case_raw is not None:
|
|
396
402
|
property_name_case = NameCase(name_case_raw)
|
|
397
403
|
|
|
404
|
+
emit_api = data.get("emit_api")
|
|
405
|
+
if emit_api is not None:
|
|
406
|
+
builder.ensure(
|
|
407
|
+
isinstance(emit_api, str) and emit_api != "",
|
|
408
|
+
f"emit_api must be a non-empty string for property {name}",
|
|
409
|
+
)
|
|
410
|
+
builder.ensure(
|
|
411
|
+
util.is_valid_property_name(name),
|
|
412
|
+
f"emit_api requires a snake_case property name; got {name}",
|
|
413
|
+
)
|
|
414
|
+
builder.ensure(
|
|
415
|
+
property_name_case != NameCase.preserve,
|
|
416
|
+
f"emit_api cannot be combined with name_case: preserve on property {name}",
|
|
417
|
+
)
|
|
418
|
+
|
|
398
419
|
if property_name_case != NameCase.preserve:
|
|
399
420
|
assert util.is_valid_property_name(name), (
|
|
400
421
|
f"{name} is not a valid property name"
|
|
@@ -447,6 +468,7 @@ class SpecTypeDefn(SpecType):
|
|
|
447
468
|
spec_type=ptype,
|
|
448
469
|
convert_value=convert_value,
|
|
449
470
|
name_case=property_name_case,
|
|
471
|
+
emit_api=emit_api,
|
|
450
472
|
has_default=has_default,
|
|
451
473
|
default=default,
|
|
452
474
|
parse_require=parse_require,
|
pkgs/type_spec/emit_io_ts.py
CHANGED
|
@@ -4,7 +4,7 @@ from .emit_typescript_util import (
|
|
|
4
4
|
MODIFY_NOTICE,
|
|
5
5
|
EmitTypescriptContext,
|
|
6
6
|
resolve_namespace_ref,
|
|
7
|
-
|
|
7
|
+
ts_property_name,
|
|
8
8
|
)
|
|
9
9
|
|
|
10
10
|
base_name_map_io_ts = {
|
|
@@ -70,7 +70,7 @@ def _emit_type_io_ts_impl(ctx: EmitTypescriptContext, stype: builder.SpecType) -
|
|
|
70
70
|
missable_lines = []
|
|
71
71
|
for prop in stype.properties.values():
|
|
72
72
|
ref_type = refer_to_io_ts(ctx, prop.spec_type)
|
|
73
|
-
prop_name =
|
|
73
|
+
prop_name = ts_property_name(prop, stype.name_case)
|
|
74
74
|
if prop.extant == builder.PropertyExtant.missing:
|
|
75
75
|
# Unlike optional below, missing does not imply null is possible. They
|
|
76
76
|
# treated distinctly.
|
pkgs/type_spec/emit_open_api.py
CHANGED
|
@@ -32,7 +32,7 @@ from .emit_open_api_util import (
|
|
|
32
32
|
TagPathsToRef,
|
|
33
33
|
resolve_namespace_ref,
|
|
34
34
|
)
|
|
35
|
-
from .emit_typescript_util import ts_name
|
|
35
|
+
from .emit_typescript_util import ts_name, ts_property_name
|
|
36
36
|
from .open_api_util import (
|
|
37
37
|
OpenAPIArrayType,
|
|
38
38
|
OpenAPIBooleanT,
|
|
@@ -580,7 +580,7 @@ def _emit_type(
|
|
|
580
580
|
|
|
581
581
|
for prop in stype.properties.values():
|
|
582
582
|
ref_type = open_api_type(ctx, prop.spec_type, config=config)
|
|
583
|
-
prop_name =
|
|
583
|
+
prop_name = ts_property_name(prop, prop.name_case or stype.name_case)
|
|
584
584
|
if prop.desc:
|
|
585
585
|
property_desc[prop_name] = prop.desc
|
|
586
586
|
if prop.has_default and not prop.parse_require:
|
pkgs/type_spec/emit_python.py
CHANGED
|
@@ -808,6 +808,7 @@ class EmittedPropertiesMetadata:
|
|
|
808
808
|
unconverted_values: set[str]
|
|
809
809
|
to_string_values: set[str]
|
|
810
810
|
parse_require: set[str]
|
|
811
|
+
emit_api_overrides: dict[str, str]
|
|
811
812
|
|
|
812
813
|
|
|
813
814
|
def _emit_type_properties(
|
|
@@ -839,6 +840,7 @@ def _emit_properties(
|
|
|
839
840
|
unconverted_values: set[str] = set()
|
|
840
841
|
to_string_values: set[str] = set()
|
|
841
842
|
parse_require: set[str] = set()
|
|
843
|
+
emit_api_overrides: dict[str, str] = {}
|
|
842
844
|
|
|
843
845
|
if len(properties) > 0:
|
|
844
846
|
|
|
@@ -848,6 +850,9 @@ def _emit_properties(
|
|
|
848
850
|
unconverted_keys.add(prop.name)
|
|
849
851
|
py_name = python_field_name(prop.name, prop.name_case)
|
|
850
852
|
|
|
853
|
+
if prop.emit_api is not None:
|
|
854
|
+
emit_api_overrides[py_name] = prop.emit_api
|
|
855
|
+
|
|
851
856
|
if prop.convert_value == builder.PropertyConvertValue.no_convert:
|
|
852
857
|
unconverted_values.add(py_name)
|
|
853
858
|
elif not stype.is_value_converted():
|
|
@@ -902,6 +907,7 @@ def _emit_properties(
|
|
|
902
907
|
unconverted_values=unconverted_values,
|
|
903
908
|
to_string_values=to_string_values,
|
|
904
909
|
parse_require=parse_require,
|
|
910
|
+
emit_api_overrides=emit_api_overrides,
|
|
905
911
|
)
|
|
906
912
|
|
|
907
913
|
|
|
@@ -1001,6 +1007,7 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
1001
1007
|
unconverted_values = emitted_properties_metadata.unconverted_values
|
|
1002
1008
|
to_string_values = emitted_properties_metadata.to_string_values
|
|
1003
1009
|
parse_require = emitted_properties_metadata.parse_require
|
|
1010
|
+
emit_api_overrides = emitted_properties_metadata.emit_api_overrides
|
|
1004
1011
|
|
|
1005
1012
|
# Emit serial_class decorator
|
|
1006
1013
|
ctx.out.write("@serial_class(\n")
|
|
@@ -1016,10 +1023,20 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
1016
1023
|
value_str = ", ".join([f'"{name}"' for name in sorted(values)])
|
|
1017
1024
|
ctx.out.write(f"{INDENT}{key}={{{value_str}}},\n")
|
|
1018
1025
|
|
|
1026
|
+
def write_string_map(key: str, mapping: dict[str, str]) -> None:
|
|
1027
|
+
if len(mapping) == 0:
|
|
1028
|
+
return
|
|
1029
|
+
items = ", ".join(
|
|
1030
|
+
f'"{py_name}": "{api_name}"'
|
|
1031
|
+
for py_name, api_name in sorted(mapping.items())
|
|
1032
|
+
)
|
|
1033
|
+
ctx.out.write(f"{INDENT}{key}={{{items}}},\n")
|
|
1034
|
+
|
|
1019
1035
|
write_values("unconverted_keys", unconverted_keys)
|
|
1020
1036
|
write_values("unconverted_values", unconverted_values)
|
|
1021
1037
|
write_values("to_string_values", to_string_values)
|
|
1022
1038
|
write_values("parse_require", parse_require)
|
|
1039
|
+
write_string_map("emit_api_overrides", emit_api_overrides)
|
|
1023
1040
|
|
|
1024
1041
|
ctx.out.write(")\n")
|
|
1025
1042
|
|
|
@@ -51,6 +51,14 @@ def ts_name(name: str, name_case: builder.NameCase) -> str:
|
|
|
51
51
|
return "".join([bits[0], *[x.title() for x in bits[1:]]])
|
|
52
52
|
|
|
53
53
|
|
|
54
|
+
def ts_property_name(
|
|
55
|
+
prop: builder.SpecProperty, name_case: builder.NameCase | None = None
|
|
56
|
+
) -> str:
|
|
57
|
+
if prop.emit_api is not None:
|
|
58
|
+
return prop.emit_api
|
|
59
|
+
return ts_name(prop.name, name_case if name_case is not None else prop.name_case)
|
|
60
|
+
|
|
61
|
+
|
|
54
62
|
def emit_value_ts(
|
|
55
63
|
ctx: EmitTypescriptContext,
|
|
56
64
|
stype: builder.SpecType,
|
|
@@ -136,7 +144,7 @@ def emit_value_ts(
|
|
|
136
144
|
else:
|
|
137
145
|
value_to_emit = value[prop_name]
|
|
138
146
|
did_emit = True
|
|
139
|
-
typescript_name =
|
|
147
|
+
typescript_name = ts_property_name(prop)
|
|
140
148
|
obj_out += f"\n{INDENT * (indent + 1)}{typescript_name}: {emit_value_ts(ctx, prop.spec_type, value_to_emit, indent=indent + 1)},"
|
|
141
149
|
whitespace = f"\n{INDENT * indent}" if did_emit else ""
|
|
142
150
|
obj_out += f"{whitespace}}} as const"
|
|
@@ -218,7 +226,7 @@ def emit_type_ts(ctx: EmitTypescriptContext, stype: builder.SpecType) -> None:
|
|
|
218
226
|
ctx.out.write("\n")
|
|
219
227
|
for prop in stype.properties.values():
|
|
220
228
|
ref_type = refer_to(ctx, prop.spec_type)
|
|
221
|
-
prop_name =
|
|
229
|
+
prop_name = ts_property_name(prop)
|
|
222
230
|
if prop.has_default and not prop.parse_require:
|
|
223
231
|
# For now, we'll assume the generated types with defaults are meant as
|
|
224
232
|
# arguments, thus treat like extant==missing
|
|
@@ -16,7 +16,7 @@ from pkgs.serialization_util import serialize_for_api, serialize_for_storage
|
|
|
16
16
|
|
|
17
17
|
from .. import builder, util
|
|
18
18
|
from ..emit_python import python_field_name
|
|
19
|
-
from ..emit_typescript_util import MODIFY_NOTICE,
|
|
19
|
+
from ..emit_typescript_util import MODIFY_NOTICE, ts_property_name
|
|
20
20
|
from ..value_spec import convert_to_value_spec_type
|
|
21
21
|
|
|
22
22
|
ext_info_parser = CachedParser(type_info_t.ExtInfo, strict_property_parsing=True)
|
|
@@ -425,7 +425,7 @@ def _build_map_type(
|
|
|
425
425
|
map_property = MapProperty(
|
|
426
426
|
type_name=prop.name,
|
|
427
427
|
label=parts.label,
|
|
428
|
-
api_name=
|
|
428
|
+
api_name=ts_property_name(prop),
|
|
429
429
|
extant=prop.extant,
|
|
430
430
|
type_path=type_path_of(prop.spec_type),
|
|
431
431
|
ext_info=parts.ext_info,
|
|
@@ -59,7 +59,7 @@ def one_line_formatter(record: ReadableLogRecord) -> str:
|
|
|
59
59
|
@functools.cache
|
|
60
60
|
def get_otel_resource() -> Resource:
|
|
61
61
|
attributes: dict[str, base_t.JsonValue] = {
|
|
62
|
-
"service.name": "integration-server",
|
|
62
|
+
"service.name": os.environ.get("DD_SERVICE", "integration-server"),
|
|
63
63
|
"sdk.version": get_version(),
|
|
64
64
|
}
|
|
65
65
|
unc_version = os.environ.get("UNC_VERSION")
|
{uncountablepythonsdk-0.0.172.dist-info → uncountablepythonsdk-0.0.173.dev2.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.173.dev2
|
|
4
4
|
Summary: Uncountable SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
|
{uncountablepythonsdk-0.0.172.dist-info → uncountablepythonsdk-0.0.173.dev2.dist-info}/RECORD
RENAMED
|
@@ -2,7 +2,7 @@ docs/.gitignore,sha256=_ebkZUcwfvfnGEJ95rfj1lxoBNd6EE9ZvtOc7FsbfFE,7
|
|
|
2
2
|
docs/conf.py,sha256=Ky-_Y76T7pwN2aBG-dSF79Av70e7ASgcOXEdQ1qyor4,3542
|
|
3
3
|
docs/index.md,sha256=g4Yi5831fEkywYkkcFohYLkKzSI91SOZF7DxKsm9zgI,3193
|
|
4
4
|
docs/justfile,sha256=WymCEQ6W2A8Ak79iUPmecmuaUNN2htb7STUrz5K7ELE,273
|
|
5
|
-
docs/requirements.txt,sha256=
|
|
5
|
+
docs/requirements.txt,sha256=8aqtVaNV4AlzUZ7nAM8kxOF1ccAcujhQ_ayU9Whksf8,172
|
|
6
6
|
docs/integration_examples/add_file_to_folder.md,sha256=-8mSReDFaPyDQeAkWyY0x5oFR_NkF81K6PpMKmhNMXY,1557
|
|
7
7
|
docs/integration_examples/create_ingredient.md,sha256=bzTQ943YhINxa3HQylEA26rbAsjr6HvvN_HkVkrzUeA,1547
|
|
8
8
|
docs/integration_examples/create_output.md,sha256=aDn2TjzKgY-HnxnvgsZS578cvajmHpF1y2HKkHfdtd4,2104
|
|
@@ -51,8 +51,8 @@ pkgs/argument_parser/parser_builder.py,sha256=phtGw0dYTu1_9RrysZ4oNrkuHyodCbL9x6
|
|
|
51
51
|
pkgs/argument_parser/parser_cache.py,sha256=VEJVJsMLgDsVNsRledh78VNxHAshJ1nDWvsgpDocFGs,863
|
|
52
52
|
pkgs/argument_parser/parser_error.py,sha256=2DuYW-vQL4F1V_NEr-WW_ZdBPmH7L_uJiOuv7KhMLXw,2732
|
|
53
53
|
pkgs/argument_parser/parser_function_type.py,sha256=xmsg0YVseYbUx52qC9vP-_m9F_HehtDHo84kFjI1gV4,125
|
|
54
|
-
pkgs/argument_parser/parser_inner.py,sha256=
|
|
55
|
-
pkgs/argument_parser/parser_options.py,sha256=
|
|
54
|
+
pkgs/argument_parser/parser_inner.py,sha256=yteyamw3ZyMSQtDujkXgQVIpbtrpFbtjahtDNVKoGEE,23887
|
|
55
|
+
pkgs/argument_parser/parser_options.py,sha256=NAwNZSIH8EjyfJXJSxbn4kYmF3K7D3HuOedlSjjsF28,1332
|
|
56
56
|
pkgs/argument_parser/type_predicates.py,sha256=CkQexiseN05XDz4e34K3gIOlER5LG5Ke8u0UHK4gC04,1157
|
|
57
57
|
pkgs/filesystem_utils/__init__.py,sha256=6xVtJo-5OMv8UGanNc7SfZte_iSXs5lE5au47QePy60,1381
|
|
58
58
|
pkgs/filesystem_utils/_blob_session.py,sha256=YB_idar5qVuF9QN_A6qjpTuyeZ7JDOLri1LGLfPHLow,5158
|
|
@@ -69,7 +69,7 @@ pkgs/serialization/annotation.py,sha256=JXP2caXNoj8h_Pvx_26iarPlsaPcIqe1qssTksJi
|
|
|
69
69
|
pkgs/serialization/missing_sentry.py,sha256=VCXiYs7s5MkfG8kbmwDAswdq0fL4zFRj4B2uSQzmTos,819
|
|
70
70
|
pkgs/serialization/opaque_key.py,sha256=GKmZgxzzEghpukcuzSGXqG9afl_KZ7MFtLAY-Xqgu9k,213
|
|
71
71
|
pkgs/serialization/serial_alias.py,sha256=ABEGtSEapeW95wo9NT4srEhzdGaP5RhB8EyWSyWhwKg,1337
|
|
72
|
-
pkgs/serialization/serial_class.py,sha256=
|
|
72
|
+
pkgs/serialization/serial_class.py,sha256=AfWHdGlnEY2O2GbwU-SXZp7ZbTlPoigZ624QGp8kkuE,7099
|
|
73
73
|
pkgs/serialization/serial_generic.py,sha256=qdG46rw5jnvckmKezxwMSJEIF-9Y4K5FdTezS1vRSgI,476
|
|
74
74
|
pkgs/serialization/serial_union.py,sha256=1hfY8NAbscCFFYRlXGyQ3Uq3BiFB1s9aADbrukMv80c,2843
|
|
75
75
|
pkgs/serialization/unknown.py,sha256=f2_kBcIHwoPPsoaOMhCcy0Yhlt3tywi3-CYShcvc5fQ,90
|
|
@@ -78,21 +78,21 @@ pkgs/serialization_util/__init__.py,sha256=xc778x91P1ZKC8hGcl_ZyUBq9Wwwl1oS4gCgg
|
|
|
78
78
|
pkgs/serialization_util/_get_type_for_serialization.py,sha256=dW5_W9MFd6wgWfW5qlWork-GBb-QFLtiOZkjk2Zqn2M,1177
|
|
79
79
|
pkgs/serialization_util/convert_to_snakecase.py,sha256=H2BAo5ZdcCDN77RpLb-uP0s7-FQ5Ukwnsd3VYc1vD0M,583
|
|
80
80
|
pkgs/serialization_util/dataclasses.py,sha256=uhNGXQPQLZblDFQuuwkAGmKOPiRyfDzCdg72CVtYJGA,390
|
|
81
|
-
pkgs/serialization_util/serialization_helpers.py,sha256=
|
|
81
|
+
pkgs/serialization_util/serialization_helpers.py,sha256=v8omOQ2BRZZCzMeUwu29fCEqx0UNDJ_iNbqpW4oHk84,7804
|
|
82
82
|
pkgs/strenum_compat/__init__.py,sha256=wXRFeNvBm8RU6dy1PFJ5sRLgUIEeH_DVR95Sv5qpGbk,59
|
|
83
83
|
pkgs/strenum_compat/strenum_compat.py,sha256=uOUAgpYTjHs1MX8dG81jRlyTkt3KNbkV_25zp7xTX2s,36
|
|
84
84
|
pkgs/type_spec/__init__.py,sha256=h5DmJTca4QVV10sZR1x0-MlkZfuGYDfapR3zHvXfzto,19
|
|
85
85
|
pkgs/type_spec/__main__.py,sha256=5bJaX9Y_-FavP0qwzhk-z-V97UY7uaezJTa1zhO_HHQ,1048
|
|
86
|
-
pkgs/type_spec/builder.py,sha256=
|
|
86
|
+
pkgs/type_spec/builder.py,sha256=Fcn4SjG86b0Jgpo3fvSBzj_Lf3-m52-cTS6oPKiWMcI,58190
|
|
87
87
|
pkgs/type_spec/builder_types.py,sha256=EFXvwd3DhuFcqMtG12U9RHNYXHxi_g6kY5AVPBo3fCg,253
|
|
88
88
|
pkgs/type_spec/config.py,sha256=m0Rky7Rg2jMglDPQChF30p5h5P86Ap1GObwzLzmypNE,5829
|
|
89
89
|
pkgs/type_spec/cross_output_links.py,sha256=763hGehl2aRXzp6GZ943Hu7zRGzv3BE4n8RGI9cl-pA,3071
|
|
90
|
-
pkgs/type_spec/emit_io_ts.py,sha256
|
|
91
|
-
pkgs/type_spec/emit_open_api.py,sha256=
|
|
90
|
+
pkgs/type_spec/emit_io_ts.py,sha256=vWmBM_tLK5aGtW9Sk7Qb8RtBLLxxZkQ16moVpD1Hwhg,5770
|
|
91
|
+
pkgs/type_spec/emit_open_api.py,sha256=dVUbRtFJwxbfxOmS1TAOzL7osCffMwKoQzqwvQwfXc8,28410
|
|
92
92
|
pkgs/type_spec/emit_open_api_util.py,sha256=bTmRvrGP82-eB75hwf9ySI7pDEC87FNQTF18VKEWSXY,2367
|
|
93
|
-
pkgs/type_spec/emit_python.py,sha256=
|
|
93
|
+
pkgs/type_spec/emit_python.py,sha256=zQXAw-vPbv-YCic5qXCebW5LhXTo9sUqwJ3d9aG48w4,57876
|
|
94
94
|
pkgs/type_spec/emit_typescript.py,sha256=Qu9f1Yv_wc449KHcBGO58hatbzvPvgMbZ11jferi3oY,11567
|
|
95
|
-
pkgs/type_spec/emit_typescript_util.py,sha256=
|
|
95
|
+
pkgs/type_spec/emit_typescript_util.py,sha256=fNPgSMf3jA66_STGqN4cuH0rH3CvGLc3TKQIEdHxGYA,13558
|
|
96
96
|
pkgs/type_spec/load_types.py,sha256=1a8-AGVfpZTOiB8G-JW_1NhMZLg_SINaaKH6l2IrbW8,5045
|
|
97
97
|
pkgs/type_spec/non_discriminated_union_exceptions.py,sha256=vkKyTESIc0-FENhxenLiFDAvxxBTQNlWLqh-3tAFvus,651
|
|
98
98
|
pkgs/type_spec/open_api_util.py,sha256=LX6ny4xNOWXQO3qWVM8elrSDTqWsj_7jFplax2POShE,7992
|
|
@@ -105,7 +105,7 @@ pkgs/type_spec/actions_registry/emit_typescript.py,sha256=W1lI36ITdJ7MBf37wlTB7H
|
|
|
105
105
|
pkgs/type_spec/parts/base.py.prepart,sha256=1BCL7DCPoot5CYR3O-IpcOvMVthe1cbTQkTiUeZvuk8,2316
|
|
106
106
|
pkgs/type_spec/parts/base.ts.prepart,sha256=lbI-H8O1vtQOFafttLRJziU6SNeVpYNG6A9kjAkQtug,1373
|
|
107
107
|
pkgs/type_spec/type_info/__main__.py,sha256=TLNvCHGcmaj_8Sj5bAQNpuNaaw2dpDzoFDWZds0V4Qo,1002
|
|
108
|
-
pkgs/type_spec/type_info/emit_type_info.py,sha256=
|
|
108
|
+
pkgs/type_spec/type_info/emit_type_info.py,sha256=cE86jmqRX8LkEXT61Igj8zcWjMIdGOm0WL-6GUCM0hg,17571
|
|
109
109
|
pkgs/type_spec/ui_entry_actions/__init__.py,sha256=WiHE_BexOEZWbkkbD7EnFau1aMLNmfgQywG9PTQNCkw,135
|
|
110
110
|
pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py,sha256=65qUEp9zVcAsHEe3QjOTlPfLf45kH980fOXZXKNmOC8,9503
|
|
111
111
|
pkgs/type_spec/value_spec/__init__.py,sha256=Z-grlcZtxAfEXhPHsK0nD7PFLGsv4eqvunaPN7_TA84,83
|
|
@@ -136,7 +136,7 @@ uncountable/integration/request_context.py,sha256=N_FJJxqvfUJ0yV9h3I3vFTGNJiDfyL
|
|
|
136
136
|
uncountable/integration/scan_profiles.py,sha256=iTpzYKBHarlhYG6CKYtyAmQ7vUhEUbj2icGVHell8AU,3059
|
|
137
137
|
uncountable/integration/scheduler.py,sha256=BajQ4txvgEBw8S9x1P0eGm-uBkKp_oecJK65SQd2hNw,8477
|
|
138
138
|
uncountable/integration/server.py,sha256=P4RRGwU9jMselHPWbU6GxhRLgVtN7Ydcxr18sFn2zI8,5778
|
|
139
|
-
uncountable/integration/telemetry.py,sha256=
|
|
139
|
+
uncountable/integration/telemetry.py,sha256=PjhwT55KSYuswQS5rqNDYFIU2MWDqNXHF42gKp5kQBs,15534
|
|
140
140
|
uncountable/integration/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
141
141
|
uncountable/integration/db/connect.py,sha256=mE3bdV0huclH2iT_dXCQdRL4LkjIuf_myAR64RTWXEs,498
|
|
142
142
|
uncountable/integration/db/session.py,sha256=96cGQXpe6IugBTdSsjdP0S5yhJ6toSmbVB6qhc3FJzE,693
|
|
@@ -408,7 +408,7 @@ uncountable/types/api/uploader/complete_async_parse.py,sha256=Os1HAubxTlbut6Gylj
|
|
|
408
408
|
uncountable/types/api/uploader/invoke_uploader.py,sha256=QU1KmAFgGHSWskZEKfaAww8rCj-hVNP0i4kMQE3x3Fc,1822
|
|
409
409
|
uncountable/types/api/user/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
410
410
|
uncountable/types/api/user/get_current_user_info.py,sha256=BT7bGp5SOHz3XdKWhhdZ6acnInafT2PgdJ-H4YH3W7c,1181
|
|
411
|
-
uncountablepythonsdk-0.0.
|
|
412
|
-
uncountablepythonsdk-0.0.
|
|
413
|
-
uncountablepythonsdk-0.0.
|
|
414
|
-
uncountablepythonsdk-0.0.
|
|
411
|
+
uncountablepythonsdk-0.0.173.dev2.dist-info/METADATA,sha256=Qsqk-cRXZaJOR1FhuzNn41TKnWaXrbAjJvbynm4IOQA,2237
|
|
412
|
+
uncountablepythonsdk-0.0.173.dev2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
413
|
+
uncountablepythonsdk-0.0.173.dev2.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
|
|
414
|
+
uncountablepythonsdk-0.0.173.dev2.dist-info/RECORD,,
|
{uncountablepythonsdk-0.0.172.dist-info → uncountablepythonsdk-0.0.173.dev2.dist-info}/WHEEL
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.172.dist-info → uncountablepythonsdk-0.0.173.dev2.dist-info}/top_level.txt
RENAMED
|
File without changes
|