karrio-server-data 2025.5rc1__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.
Files changed (43) hide show
  1. karrio/server/data/__init__.py +0 -0
  2. karrio/server/data/admin.py +1 -0
  3. karrio/server/data/apps.py +13 -0
  4. karrio/server/data/filters.py +43 -0
  5. karrio/server/data/migrations/0001_initial.py +62 -0
  6. karrio/server/data/migrations/0002_alter_batchoperation_resource_type_and_more.py +28 -0
  7. karrio/server/data/migrations/0003_datatemplate_metadata_alter_batchoperation_resources.py +36 -0
  8. karrio/server/data/migrations/__init__.py +0 -0
  9. karrio/server/data/models.py +97 -0
  10. karrio/server/data/resources/__init__.py +53 -0
  11. karrio/server/data/resources/orders.py +523 -0
  12. karrio/server/data/resources/shipments.py +473 -0
  13. karrio/server/data/resources/trackers.py +212 -0
  14. karrio/server/data/serializers/__init__.py +26 -0
  15. karrio/server/data/serializers/base.py +107 -0
  16. karrio/server/data/serializers/batch.py +9 -0
  17. karrio/server/data/serializers/batch_orders.py +99 -0
  18. karrio/server/data/serializers/batch_shipments.py +102 -0
  19. karrio/server/data/serializers/batch_trackers.py +131 -0
  20. karrio/server/data/serializers/data.py +109 -0
  21. karrio/server/data/signals.py +52 -0
  22. karrio/server/data/tests.py +3 -0
  23. karrio/server/data/urls.py +13 -0
  24. karrio/server/data/views/__init__.py +0 -0
  25. karrio/server/data/views/batch.py +72 -0
  26. karrio/server/data/views/batch_order.py +40 -0
  27. karrio/server/data/views/batch_shipment.py +40 -0
  28. karrio/server/data/views/batch_tracking.py +40 -0
  29. karrio/server/data/views/data.py +171 -0
  30. karrio/server/events/task_definitions/__init__.py +1 -0
  31. karrio/server/events/task_definitions/data/__init__.py +136 -0
  32. karrio/server/events/task_definitions/data/batch.py +130 -0
  33. karrio/server/events/task_definitions/data/shipments.py +51 -0
  34. karrio/server/graph/schemas/__init__.py +1 -0
  35. karrio/server/graph/schemas/data/__init__.py +51 -0
  36. karrio/server/graph/schemas/data/inputs.py +39 -0
  37. karrio/server/graph/schemas/data/mutations.py +53 -0
  38. karrio/server/graph/schemas/data/types.py +78 -0
  39. karrio/server/settings/data.py +15 -0
  40. karrio_server_data-2025.5rc1.dist-info/METADATA +18 -0
  41. karrio_server_data-2025.5rc1.dist-info/RECORD +43 -0
  42. karrio_server_data-2025.5rc1.dist-info/WHEEL +5 -0
  43. karrio_server_data-2025.5rc1.dist-info/top_level.txt +2 -0
@@ -0,0 +1,51 @@
1
+ import strawberry
2
+ from strawberry.types import Info
3
+
4
+ import karrio.server.graph.utils as utils
5
+ import karrio.server.graph.schemas.base as base
6
+ import karrio.server.graph.schemas.data.mutations as mutations
7
+ import karrio.server.graph.schemas.data.inputs as inputs
8
+ import karrio.server.graph.schemas.data.types as types
9
+ import karrio.server.data.models as models
10
+
11
+ extra_types: list = []
12
+
13
+
14
+ @strawberry.type
15
+ class Query:
16
+ data_template: types.DataTemplateType = strawberry.field(
17
+ resolver=types.DataTemplateType.resolve
18
+ )
19
+ data_templates: utils.Connection[types.DataTemplateType] = strawberry.field(
20
+ resolver=types.DataTemplateType.resolve_list
21
+ )
22
+
23
+ batch_operation: types.BatchOperationType = strawberry.field(
24
+ resolver=types.BatchOperationType.resolve
25
+ )
26
+ batch_operations: utils.Connection[types.BatchOperationType] = strawberry.field(
27
+ resolver=types.BatchOperationType.resolve_list
28
+ )
29
+
30
+
31
+ @strawberry.type
32
+ class Mutation:
33
+ @strawberry.mutation
34
+ def create_data_template(
35
+ self, info: Info, input: inputs.CreateDataTemplateMutationInput
36
+ ) -> mutations.CreateDataTemplateMutation:
37
+ return mutations.CreateDataTemplateMutation.mutate(info, **input.to_dict())
38
+
39
+ @strawberry.mutation
40
+ def update_data_template(
41
+ self, info: Info, input: inputs.UpdateDataTemplateMutationInput
42
+ ) -> mutations.UpdateDataTemplateMutation:
43
+ return mutations.UpdateDataTemplateMutation.mutate(info, **input.to_dict())
44
+
45
+ @strawberry.mutation
46
+ def delete_data_template(
47
+ self, info: Info, input: base.inputs.DeleteMutationInput
48
+ ) -> base.mutations.DeleteMutation:
49
+ return base.mutations.DeleteMutation.mutate(
50
+ info, model=models.DataTemplate, **input.to_dict()
51
+ )
@@ -0,0 +1,39 @@
1
+ import typing
2
+ import datetime
3
+ import strawberry
4
+
5
+ import karrio.server.graph.utils as utils
6
+ import karrio.server.data.serializers as serializers
7
+
8
+ ResourceTypeEnum: typing.Any = strawberry.enum(serializers.ResourceStatus)
9
+ BatchOperationStatusEnum: typing.Any = strawberry.enum(serializers.BatchOperationStatus)
10
+
11
+
12
+ @strawberry.input
13
+ class CreateDataTemplateMutationInput(utils.BaseInput):
14
+ slug: str
15
+ name: str
16
+ fields_mapping: utils.JSON
17
+ resource_type: ResourceTypeEnum
18
+
19
+
20
+ @strawberry.input
21
+ class DataTemplateFilter(utils.Paginated):
22
+ name: typing.Optional[str] = strawberry.UNSET
23
+ slug: typing.Optional[str] = strawberry.UNSET
24
+ resource_type: typing.List[ResourceTypeEnum] = strawberry.UNSET
25
+
26
+
27
+ @strawberry.input
28
+ class UpdateDataTemplateMutationInput(utils.BaseInput):
29
+ id: str
30
+ slug: typing.Optional[str] = strawberry.UNSET
31
+ name: typing.Optional[str] = strawberry.UNSET
32
+ fields_mapping: typing.Optional[utils.JSON] = strawberry.UNSET
33
+ resource_type: typing.Optional[ResourceTypeEnum] = strawberry.UNSET
34
+
35
+
36
+ @strawberry.input
37
+ class BatchOperationFilter(utils.Paginated):
38
+ resource_type: typing.Optional[typing.List[ResourceTypeEnum]] = strawberry.UNSET
39
+ status: typing.Optional[typing.List[BatchOperationStatusEnum]] = strawberry.UNSET
@@ -0,0 +1,53 @@
1
+ import typing
2
+ import strawberry
3
+ from strawberry.types import Info
4
+
5
+ import karrio.server.graph.utils as utils
6
+ import karrio.server.graph.schemas.data.types as types
7
+ import karrio.server.graph.schemas.data.inputs as inputs
8
+ import karrio.server.data.serializers as serializers
9
+ import karrio.server.data.models as models
10
+
11
+
12
+ @strawberry.type
13
+ class CreateDataTemplateMutation(utils.BaseMutation):
14
+ template: typing.Optional[types.DataTemplateType] = None
15
+
16
+ @staticmethod
17
+ @utils.authentication_required
18
+ @utils.authorization_required(["DATA_IMPORT_EXPORT"])
19
+ def mutate(
20
+ info: Info, **input: inputs.CreateDataTemplateMutationInput
21
+ ) -> "CreateDataTemplateMutation":
22
+ serializer = serializers.DataTemplateModelSerializer(
23
+ data=input,
24
+ context=info.context,
25
+ )
26
+ serializer.is_valid(raise_exception=True)
27
+
28
+ return CreateDataTemplateMutation(template=serializer.save()) # type:ignore
29
+
30
+
31
+ @strawberry.type
32
+ class UpdateDataTemplateMutation(utils.BaseMutation):
33
+ template: typing.Optional[types.DataTemplateType] = None
34
+
35
+ @staticmethod
36
+ @utils.authentication_required
37
+ @utils.authorization_required(["DATA_IMPORT_EXPORT"])
38
+ def mutate(
39
+ info: Info, **input: inputs.UpdateDataTemplateMutationInput
40
+ ) -> "UpdateDataTemplateMutation":
41
+ instance = models.DataTemplate.access_by(info.context.request).get(id=input["id"])
42
+
43
+ serializer = serializers.DataTemplateModelSerializer(
44
+ instance,
45
+ data=serializers.process_dictionaries_mutations(
46
+ ["fields_mapping"], input, instance
47
+ ),
48
+ partial=True,
49
+ context=info.context,
50
+ )
51
+ serializer.is_valid(raise_exception=True)
52
+
53
+ return UpdateDataTemplateMutation(template=serializer.save()) # type:ignore
@@ -0,0 +1,78 @@
1
+ import typing
2
+ import datetime
3
+ import strawberry
4
+
5
+ import karrio.server.graph.utils as utils
6
+ import karrio.server.graph.schemas.base.types as base
7
+ import karrio.server.graph.schemas.data.inputs as inputs
8
+ import karrio.server.data.models as models
9
+ import karrio.server.data.filters as filters
10
+
11
+
12
+ @strawberry.type
13
+ class DataTemplateType:
14
+ object_type: str
15
+ id: str
16
+ name: str
17
+ slug: str
18
+ fields_mapping: utils.JSON
19
+ description: typing.Optional[str]
20
+ resource_type: inputs.ResourceTypeEnum
21
+ created_at: typing.Optional[datetime.datetime]
22
+ updated_at: typing.Optional[datetime.datetime]
23
+ created_by: typing.Optional[base.UserType]
24
+
25
+ @staticmethod
26
+ @utils.authentication_required
27
+ def resolve(info, id: str) -> typing.Optional["DataTemplateType"]:
28
+ return models.DataTemplate.access_by(info.context.request).filter(id=id).first()
29
+
30
+ @staticmethod
31
+ @utils.authentication_required
32
+ def resolve_list(
33
+ info,
34
+ filter: typing.Optional[inputs.DataTemplateFilter] = strawberry.UNSET,
35
+ ) -> utils.Connection["DataTemplateType"]:
36
+ _filter = filter if filter is not strawberry.UNSET else inputs.DataTemplateFilter()
37
+ queryset = filters.DataTemplateFilter(
38
+ _filter.to_dict(), models.DataTemplate.access_by(info.context.request)
39
+ ).qs
40
+ return utils.paginated_connection(queryset, **_filter.pagination())
41
+
42
+
43
+ @strawberry.type
44
+ class BatchObjectType:
45
+ id: int
46
+ status: typing.Optional[inputs.ResourceTypeEnum]
47
+
48
+
49
+ @strawberry.type
50
+ class BatchOperationType:
51
+ object_type: str
52
+ id: int
53
+ resource_type: inputs.ResourceTypeEnum
54
+ resources: typing.List[BatchObjectType]
55
+ status: inputs.BatchOperationStatusEnum
56
+ test_mode: bool
57
+ created_at: datetime.datetime
58
+ updated_at: datetime.datetime
59
+ created_by: base.UserType
60
+
61
+ @staticmethod
62
+ @utils.authentication_required
63
+ @utils.authorization_required(["DATA_IMPORT_EXPORT"])
64
+ def resolve(info, id: str) -> typing.Optional["BatchOperationType"]:
65
+ return models.BatchOperation.access_by(info.context.request).filter(id=id).first()
66
+
67
+ @staticmethod
68
+ @utils.authentication_required
69
+ @utils.authorization_required(["DATA_IMPORT_EXPORT"])
70
+ def resolve_list(
71
+ info,
72
+ filter: typing.Optional[inputs.BatchOperationFilter] = strawberry.UNSET,
73
+ ) -> utils.Connection["BatchOperationType"]:
74
+ _filter = filter if filter is not strawberry.UNSET else inputs.BatchOperationFilter()
75
+ queryset = filters.BatchOperationFilter(
76
+ _filter.to_dict(), models.BatchOperation.access_by(info.context.request)
77
+ ).qs
78
+ return utils.paginated_connection(queryset, **_filter.pagination())
@@ -0,0 +1,15 @@
1
+ # type: ignore
2
+ from karrio.server.settings.base import *
3
+
4
+
5
+ INSTALLED_APPS += ["import_export"]
6
+
7
+ IMPORT_EXPORT_USE_TRANSACTIONS = True
8
+ IMPORT_EXPORT_SKIP_ADMIN_LOG = True
9
+ IMPORT_EXPORT_CHUNK_SIZE = 200
10
+ IMPORT_EXPORT_TMP_STORAGE_CLASS = "import_export.tmp_storages.TempFolderStorage"
11
+
12
+ SPECTACULAR_SETTINGS["ENUM_NAME_OVERRIDES"] = {
13
+ **SPECTACULAR_SETTINGS["ENUM_NAME_OVERRIDES"],
14
+ "BatchOperationStatus": "karrio.server.data.serializers.OPERATION_STATUS",
15
+ }
@@ -0,0 +1,18 @@
1
+ Metadata-Version: 2.4
2
+ Name: karrio_server_data
3
+ Version: 2025.5rc1
4
+ Summary: Multi-carrier shipping API data import/export module
5
+ Author-email: karrio <hello@karrio.io>
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://github.com/karrioapi/karrio
8
+ Classifier: Programming Language :: Python :: 3
9
+ Requires-Python: >=3.11
10
+ Description-Content-Type: text/markdown
11
+ Requires-Dist: karrio_server_core
12
+ Requires-Dist: karrio_server_events
13
+ Requires-Dist: karrio_server_manager
14
+ Requires-Dist: django-import-export
15
+
16
+ # karrio-server
17
+
18
+ Karrio server data import/import module.
@@ -0,0 +1,43 @@
1
+ karrio/server/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ karrio/server/data/admin.py,sha256=2h43pTXd3NKV8-_fkUEkzkS4zqih0qBLE8q6Yj7fpEg,33
3
+ karrio/server/data/apps.py,sha256=IsP5PDXiBYrxUOJ6Uv5zKJTuHttq9L5QAftZwkIzuKo,348
4
+ karrio/server/data/filters.py,sha256=kZVVBfa2InYPHIaXqGDSplaV71apQScoe4rBc2qtwKk,1522
5
+ karrio/server/data/models.py,sha256=SyFFWnkSmxNe1oFOJVdRiTguo-8_vyQgIq4b8K_5_4c,2778
6
+ karrio/server/data/signals.py,sha256=h-jsoVnvJNEpQSjOwqRZ4v3CzGfxq8NB1NU6Mv7JJnk,1842
7
+ karrio/server/data/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
8
+ karrio/server/data/urls.py,sha256=Zmty89ViW1PabymilrgyGKcR93vfh2SMkCH7BdPtBjM,451
9
+ karrio/server/data/migrations/0001_initial.py,sha256=0kTusoaB4BBNiGT6C9NV81H0u2MJSUZGb1Urwto0c5o,3699
10
+ karrio/server/data/migrations/0002_alter_batchoperation_resource_type_and_more.py,sha256=wy6g8qddhQnCMTHPB15IA_FrDXBH6Ji0BqkOYed2La0,1128
11
+ karrio/server/data/migrations/0003_datatemplate_metadata_alter_batchoperation_resources.py,sha256=_UnAg35ZVKopwXamb425nIepMIgna0uSsJ7RJhWXHoI,1017
12
+ karrio/server/data/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ karrio/server/data/resources/__init__.py,sha256=pr_eVFI2uCgXTbfR-ryKtrBbDfaapY6YBJVOw0pzRlI,1748
14
+ karrio/server/data/resources/orders.py,sha256=Q2rLsemyUDFR7OSKnAwkkMaMM982uS9ur3nDk1xgARM,19642
15
+ karrio/server/data/resources/shipments.py,sha256=-umBRNIDSPq-vMm_6iuCbpoMJtZf9F8zNSDnXOttBdk,16785
16
+ karrio/server/data/resources/trackers.py,sha256=YoFomUtsdg99j3Sl8L_2QKYxdyF4OI8ji-DtSRYP0Kg,7024
17
+ karrio/server/data/serializers/__init__.py,sha256=ZjLNDdqGDoDSzPvUqG0QinbzDRsrQT1G0JfnHaZnwBw,917
18
+ karrio/server/data/serializers/base.py,sha256=JZZt35GndnXNXB-vHkqYas1cU7ufpVCJbEX1CMhUYaU,3174
19
+ karrio/server/data/serializers/batch.py,sha256=rsVQ6ojpco1OfwkES2qHiTzbz68UnQ0fptf5n33ADIU,310
20
+ karrio/server/data/serializers/batch_orders.py,sha256=dIzsaKr-pjaS8kEUWch5ZBQYuhLlz8Z4KMm05V4iDng,3268
21
+ karrio/server/data/serializers/batch_shipments.py,sha256=9-sd1k-VaFvLo8yAlaa4c0AHCdQ9uXgN7L4DSzPAJ_4,3346
22
+ karrio/server/data/serializers/batch_trackers.py,sha256=AqlLHlfX9FCC2L_75jSH0xg937YlCHcclMOH1_UNnZQ,4801
23
+ karrio/server/data/serializers/data.py,sha256=eRByIylbfW32XKkR_7K0x4hIO7c-JAVQvgMzXuQBQko,3254
24
+ karrio/server/data/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ karrio/server/data/views/batch.py,sha256=58AYc_3DssAJywrxV3gzw1Trm8xXOQEnKq6P7-b3RnU,2510
26
+ karrio/server/data/views/batch_order.py,sha256=QNbbnuOUTkj39dDQ0er7deYUwfQcveWo2F7QnQN7Bd4,1238
27
+ karrio/server/data/views/batch_shipment.py,sha256=jmJyS93b4k6VtT3aDmnWnw9HxL6itmv66nJ55IJoc24,1259
28
+ karrio/server/data/views/batch_tracking.py,sha256=jts3CfEFdDaMy6MUv-vc5eqvGNX8KJinb45_dRS6xZA,1252
29
+ karrio/server/data/views/data.py,sha256=IasSRHV5ejAsdkcM0amxLfsaAnBQugVIpEb9pbzi8VY,5649
30
+ karrio/server/events/task_definitions/__init__.py,sha256=bpT73UG7mZL_JjEqMwbYx6q69jA8J5Jcoul1LcDokhA,81
31
+ karrio/server/events/task_definitions/data/__init__.py,sha256=PmNdHA0hw5RCRr1vObjSyvt5az38Nw3n4mKvILqBHwM,4429
32
+ karrio/server/events/task_definitions/data/batch.py,sha256=NoBCPm-V2hajvTwe0QrddbJrC2bs7qTdiWV8bx9GUgg,3945
33
+ karrio/server/events/task_definitions/data/shipments.py,sha256=h_NeAFIK6Gb6VAXe57jA2J105bp9azzQ-3bMqsUmWPo,1394
34
+ karrio/server/graph/schemas/__init__.py,sha256=iOEMwnlORWezdO8-2vxBIPSR37D7JGjluZ8f55vzxls,81
35
+ karrio/server/graph/schemas/data/__init__.py,sha256=muyYsydCc1StU-k7XAF8FYoXO9RJ5yOfMHaqSY-r3ew,1781
36
+ karrio/server/graph/schemas/data/inputs.py,sha256=DjQ_xeeK7PnY1DfwEZmYsGgZ6rUsYRQjv8MyEqmd45Y,1274
37
+ karrio/server/graph/schemas/data/mutations.py,sha256=Dk0LVifqYVB92AUWah3ygWnn7HOS5dSe0AuCHqxs8yQ,1831
38
+ karrio/server/graph/schemas/data/types.py,sha256=XHOGqUlTQ2KvrTmeZmJp0kfHhURem7kNtccHP-MHnuo,2701
39
+ karrio/server/settings/data.py,sha256=PHIlILwHKhtyuEKJJd67GbHx3WgH80c-DmXkRgQk4r8,463
40
+ karrio_server_data-2025.5rc1.dist-info/METADATA,sha256=HtalDUxGOajh7D_4IHK-Bgd8cRjHRY4FMfTAcN7gmGE,571
41
+ karrio_server_data-2025.5rc1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
42
+ karrio_server_data-2025.5rc1.dist-info/top_level.txt,sha256=D1D7x8R3cTfjF_15mfiO7wCQ5QMtuM4x8GaPr7z5i78,12
43
+ karrio_server_data-2025.5rc1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ dist
2
+ karrio