karrio-server-events 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.
- karrio/server/events/__init__.py +3 -0
- karrio/server/events/admin.py +3 -0
- karrio/server/events/apps.py +11 -0
- karrio/server/events/filters.py +63 -0
- karrio/server/events/migrations/0001_initial.py +65 -0
- karrio/server/events/migrations/0002_event.py +39 -0
- karrio/server/events/migrations/0003_auto_20220303_1210.py +25 -0
- karrio/server/events/migrations/0004_custom_migration_2022_4.py +41 -0
- karrio/server/events/migrations/0005_event_event_object_idx.py +18 -0
- karrio/server/events/migrations/0006_webhook_events_alter_event_data.py +85 -0
- karrio/server/events/migrations/0007_auto_20221130_0255.py +30 -0
- karrio/server/events/migrations/0008_alter_event_type.py +18 -0
- karrio/server/events/migrations/0009_alter_webhook_enabled_events.py +45 -0
- karrio/server/events/migrations/__init__.py +0 -0
- karrio/server/events/models.py +83 -0
- karrio/server/events/router.py +3 -0
- karrio/server/events/serializers/__init__.py +1 -0
- karrio/server/events/serializers/base.py +63 -0
- karrio/server/events/serializers/event.py +9 -0
- karrio/server/events/serializers/webhook.py +27 -0
- karrio/server/events/signals.py +138 -0
- karrio/server/events/task_definitions/__init__.py +1 -0
- karrio/server/events/task_definitions/base/__init__.py +64 -0
- karrio/server/events/task_definitions/base/archiving.py +58 -0
- karrio/server/events/task_definitions/base/tracking.py +227 -0
- karrio/server/events/task_definitions/base/webhook.py +116 -0
- karrio/server/events/tasks.py +20 -0
- karrio/server/events/tests/__init__.py +7 -0
- karrio/server/events/tests/test_events.py +138 -0
- karrio/server/events/tests/test_tracking_tasks.py +345 -0
- karrio/server/events/tests/test_webhooks.py +132 -0
- karrio/server/events/tests.py +3 -0
- karrio/server/events/urls.py +10 -0
- karrio/server/events/views/__init__.py +2 -0
- karrio/server/events/views/webhooks.py +173 -0
- karrio/server/graph/schemas/__init__.py +1 -0
- karrio/server/graph/schemas/events/__init__.py +47 -0
- karrio/server/graph/schemas/events/inputs.py +43 -0
- karrio/server/graph/schemas/events/mutations.py +56 -0
- karrio/server/graph/schemas/events/types.py +79 -0
- karrio_server_events-2025.5rc1.dist-info/METADATA +28 -0
- karrio_server_events-2025.5rc1.dist-info/RECORD +44 -0
- karrio_server_events-2025.5rc1.dist-info/WHEEL +5 -0
- karrio_server_events-2025.5rc1.dist-info/top_level.txt +2 -0
@@ -0,0 +1,173 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from django.urls import path
|
4
|
+
from rest_framework.request import Request
|
5
|
+
from rest_framework.response import Response
|
6
|
+
from rest_framework import status, serializers
|
7
|
+
from rest_framework.pagination import LimitOffsetPagination
|
8
|
+
|
9
|
+
import karrio.server.openapi as openapi
|
10
|
+
from karrio.server.core.views.api import GenericAPIView, APIView
|
11
|
+
from karrio.server.serializers import PaginatedResult, PlainDictField
|
12
|
+
from karrio.server.core.serializers import Operation, ErrorResponse
|
13
|
+
from karrio.server.events.serializers.webhook import (
|
14
|
+
WebhookData,
|
15
|
+
Webhook,
|
16
|
+
WebhookSerializer,
|
17
|
+
)
|
18
|
+
from karrio.server.events.task_definitions.base.webhook import notify_subscribers
|
19
|
+
from karrio.server.events.router import router
|
20
|
+
from karrio.server.events import models
|
21
|
+
|
22
|
+
|
23
|
+
logger = logging.getLogger(__name__)
|
24
|
+
ENDPOINT_ID = "$$$$$$$" # This endpoint id is used to make operation ids unique make sure not to duplicate
|
25
|
+
Webhooks = PaginatedResult("WebhookList", Webhook)
|
26
|
+
|
27
|
+
|
28
|
+
class WebhookTestRequest(serializers.Serializer):
|
29
|
+
payload = PlainDictField(required=True)
|
30
|
+
|
31
|
+
|
32
|
+
class WebhookList(GenericAPIView):
|
33
|
+
pagination_class = LimitOffsetPagination
|
34
|
+
default_limit = 20
|
35
|
+
serializer_class = Webhooks
|
36
|
+
|
37
|
+
@openapi.extend_schema(
|
38
|
+
tags=["Webhooks"],
|
39
|
+
operation_id=f"{ENDPOINT_ID}list",
|
40
|
+
extensions={"x-operationId": "listWebhooks"},
|
41
|
+
summary="List all webhooks",
|
42
|
+
responses={
|
43
|
+
200: Webhooks(),
|
44
|
+
404: ErrorResponse(),
|
45
|
+
500: ErrorResponse(),
|
46
|
+
},
|
47
|
+
)
|
48
|
+
def get(self, request: Request):
|
49
|
+
"""
|
50
|
+
Retrieve all webhooks.
|
51
|
+
"""
|
52
|
+
webhooks = models.Webhook.access_by(request)
|
53
|
+
response = self.paginate_queryset(Webhook(webhooks, many=True).data)
|
54
|
+
return self.get_paginated_response(response)
|
55
|
+
|
56
|
+
@openapi.extend_schema(
|
57
|
+
tags=["Webhooks"],
|
58
|
+
operation_id=f"{ENDPOINT_ID}create",
|
59
|
+
extensions={"x-operationId": "createWebhook"},
|
60
|
+
summary="Create a webhook",
|
61
|
+
request=WebhookData(),
|
62
|
+
responses={
|
63
|
+
201: Webhook(),
|
64
|
+
400: ErrorResponse(),
|
65
|
+
500: ErrorResponse(),
|
66
|
+
},
|
67
|
+
)
|
68
|
+
def post(self, request: Request):
|
69
|
+
"""Create a new webhook."""
|
70
|
+
webhook = (
|
71
|
+
WebhookSerializer.map(data=request.data, context=request).save().instance
|
72
|
+
)
|
73
|
+
|
74
|
+
return Response(Webhook(webhook).data, status=status.HTTP_201_CREATED)
|
75
|
+
|
76
|
+
|
77
|
+
class WebhookDetails(APIView):
|
78
|
+
|
79
|
+
@openapi.extend_schema(
|
80
|
+
tags=["Webhooks"],
|
81
|
+
operation_id=f"{ENDPOINT_ID}retrieve",
|
82
|
+
extensions={"x-operationId": "retrieveWebhook"},
|
83
|
+
summary="Retrieve a webhook",
|
84
|
+
responses={
|
85
|
+
201: Webhook(),
|
86
|
+
404: ErrorResponse(),
|
87
|
+
500: ErrorResponse(),
|
88
|
+
},
|
89
|
+
)
|
90
|
+
def get(self, request: Request, pk: str):
|
91
|
+
"""
|
92
|
+
Retrieve a webhook.
|
93
|
+
"""
|
94
|
+
webhook = models.Webhook.access_by(request).get(pk=pk)
|
95
|
+
return Response(Webhook(webhook).data)
|
96
|
+
|
97
|
+
@openapi.extend_schema(
|
98
|
+
tags=["Webhooks"],
|
99
|
+
operation_id=f"{ENDPOINT_ID}update",
|
100
|
+
extensions={"x-operationId": "updateWebhook"},
|
101
|
+
summary="Update a webhook",
|
102
|
+
request=WebhookData(),
|
103
|
+
responses={
|
104
|
+
200: Webhook(),
|
105
|
+
404: ErrorResponse(),
|
106
|
+
400: ErrorResponse(),
|
107
|
+
500: ErrorResponse(),
|
108
|
+
},
|
109
|
+
)
|
110
|
+
def patch(self, request: Request, pk: str):
|
111
|
+
"""
|
112
|
+
update a webhook.
|
113
|
+
"""
|
114
|
+
webhook = models.Webhook.access_by(request).get(pk=pk)
|
115
|
+
|
116
|
+
WebhookSerializer.map(webhook, data=request.data).save()
|
117
|
+
return Response(Webhook(webhook).data)
|
118
|
+
|
119
|
+
@openapi.extend_schema(
|
120
|
+
tags=["Webhooks"],
|
121
|
+
operation_id=f"{ENDPOINT_ID}remove",
|
122
|
+
extensions={"x-operationId": "removeWebhook"},
|
123
|
+
summary="Remove a webhook",
|
124
|
+
responses={
|
125
|
+
200: Operation(),
|
126
|
+
404: ErrorResponse(),
|
127
|
+
500: ErrorResponse(),
|
128
|
+
},
|
129
|
+
)
|
130
|
+
def delete(self, request: Request, pk: str):
|
131
|
+
"""
|
132
|
+
Remove a webhook.
|
133
|
+
"""
|
134
|
+
webhook = models.Webhook.access_by(request).get(pk=pk)
|
135
|
+
|
136
|
+
webhook.delete(keep_parents=True)
|
137
|
+
|
138
|
+
return Response(Webhook(webhook).data)
|
139
|
+
|
140
|
+
|
141
|
+
class WebhookTest(APIView):
|
142
|
+
|
143
|
+
@openapi.extend_schema(
|
144
|
+
tags=["Webhooks"],
|
145
|
+
operation_id=f"{ENDPOINT_ID}test",
|
146
|
+
extensions={"x-operationId": "testWebhook"},
|
147
|
+
summary="Test a webhook",
|
148
|
+
request=WebhookTestRequest(),
|
149
|
+
responses={
|
150
|
+
200: Operation(),
|
151
|
+
400: ErrorResponse(),
|
152
|
+
500: ErrorResponse(),
|
153
|
+
},
|
154
|
+
)
|
155
|
+
def post(self, request: Request, pk: str):
|
156
|
+
"""
|
157
|
+
test a webhook.
|
158
|
+
"""
|
159
|
+
webhook = models.Webhook.access_by(request).get(pk=pk)
|
160
|
+
|
161
|
+
notification, *_ = notify_subscribers([webhook], request.data)
|
162
|
+
_, response = notification
|
163
|
+
serializer = Operation(dict(operation="Test Webhook", success=response.ok))
|
164
|
+
return Response(serializer.data)
|
165
|
+
|
166
|
+
|
167
|
+
router.urls.append(path("webhooks", WebhookList.as_view(), name="webhook-list"))
|
168
|
+
router.urls.append(
|
169
|
+
path("webhooks/<str:pk>", WebhookDetails.as_view(), name="webhook-details")
|
170
|
+
)
|
171
|
+
router.urls.append(
|
172
|
+
path("webhooks/<str:pk>/test", WebhookTest.as_view(), name="webhook-test")
|
173
|
+
)
|
@@ -0,0 +1 @@
|
|
1
|
+
__path__ = __import__('pkgutil').extend_path(__path__, __name__) # type: ignore
|
@@ -0,0 +1,47 @@
|
|
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.events.mutations as mutations
|
7
|
+
import karrio.server.graph.schemas.events.inputs as inputs
|
8
|
+
import karrio.server.graph.schemas.events.types as types
|
9
|
+
import karrio.server.events.models as models
|
10
|
+
|
11
|
+
extra_types: list = []
|
12
|
+
|
13
|
+
|
14
|
+
@strawberry.type
|
15
|
+
class Query:
|
16
|
+
webhook: types.WebhookType = strawberry.field(resolver=types.WebhookType.resolve)
|
17
|
+
webhooks: utils.Connection[types.WebhookType] = strawberry.field(
|
18
|
+
resolver=types.WebhookType.resolve_list
|
19
|
+
)
|
20
|
+
|
21
|
+
event: types.EventType = strawberry.field(resolver=types.EventType.resolve)
|
22
|
+
events: utils.Connection[types.EventType] = strawberry.field(
|
23
|
+
resolver=types.EventType.resolve_list
|
24
|
+
)
|
25
|
+
|
26
|
+
|
27
|
+
@strawberry.type
|
28
|
+
class Mutation:
|
29
|
+
@strawberry.mutation
|
30
|
+
def create_webhook(
|
31
|
+
self, info: Info, input: inputs.CreateWebhookMutationInput
|
32
|
+
) -> mutations.CreateWebhookMutation:
|
33
|
+
return mutations.CreateWebhookMutation.mutate(info, **input.to_dict())
|
34
|
+
|
35
|
+
@strawberry.mutation
|
36
|
+
def update_webhook(
|
37
|
+
self, info: Info, input: inputs.UpdateWebhookMutationInput
|
38
|
+
) -> mutations.UpdateWebhookMutation:
|
39
|
+
return mutations.UpdateWebhookMutation.mutate(info, **input.to_dict())
|
40
|
+
|
41
|
+
@strawberry.mutation
|
42
|
+
def delete_webhook(
|
43
|
+
self, info: Info, input: base.inputs.DeleteMutationInput
|
44
|
+
) -> base.mutations.DeleteMutation:
|
45
|
+
return base.mutations.DeleteMutation.mutate(
|
46
|
+
info, model=models.Webhook, **input.to_dict()
|
47
|
+
)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import datetime
|
2
|
+
import typing
|
3
|
+
import strawberry
|
4
|
+
|
5
|
+
import karrio.server.graph.utils as utils
|
6
|
+
import karrio.server.events.serializers as serializers
|
7
|
+
|
8
|
+
EventStatusEnum: typing.Any = strawberry.enum(serializers.EventTypes)
|
9
|
+
|
10
|
+
|
11
|
+
@strawberry.input
|
12
|
+
class CreateWebhookMutationInput(utils.BaseInput):
|
13
|
+
url: str
|
14
|
+
enabled_events: typing.List[EventStatusEnum]
|
15
|
+
description: typing.Optional[str] = strawberry.UNSET
|
16
|
+
disabled: typing.Optional[bool] = False
|
17
|
+
|
18
|
+
|
19
|
+
@strawberry.input
|
20
|
+
class WebhookFilter(utils.Paginated):
|
21
|
+
url: typing.Optional[str] = strawberry.UNSET
|
22
|
+
disabled: typing.Optional[bool] = strawberry.UNSET
|
23
|
+
test_mode: typing.Optional[bool] = strawberry.UNSET
|
24
|
+
events: typing.Optional[typing.List[EventStatusEnum]] = strawberry.UNSET
|
25
|
+
date_after: typing.Optional[datetime.datetime] = strawberry.UNSET
|
26
|
+
date_before: typing.Optional[datetime.datetime] = strawberry.UNSET
|
27
|
+
|
28
|
+
|
29
|
+
@strawberry.input
|
30
|
+
class UpdateWebhookMutationInput(utils.BaseInput):
|
31
|
+
id: str
|
32
|
+
url: typing.Optional[str] = strawberry.UNSET
|
33
|
+
enabled_events: typing.List[EventStatusEnum] = strawberry.UNSET
|
34
|
+
description: typing.Optional[str] = strawberry.UNSET
|
35
|
+
disabled: typing.Optional[bool] = strawberry.UNSET
|
36
|
+
|
37
|
+
|
38
|
+
@strawberry.input
|
39
|
+
class EventFilter(utils.Paginated):
|
40
|
+
entity_id: typing.Optional[str] = strawberry.UNSET
|
41
|
+
type: typing.Optional[typing.List[EventStatusEnum]] = strawberry.UNSET
|
42
|
+
date_after: typing.Optional[datetime.datetime] = strawberry.UNSET
|
43
|
+
date_before: typing.Optional[datetime.datetime] = strawberry.UNSET
|
@@ -0,0 +1,56 @@
|
|
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.events.types as types
|
7
|
+
import karrio.server.graph.schemas.events.inputs as inputs
|
8
|
+
import karrio.server.events.serializers.webhook as serializers
|
9
|
+
import karrio.server.events.models as models
|
10
|
+
|
11
|
+
|
12
|
+
@strawberry.type
|
13
|
+
class CreateWebhookMutation(utils.BaseMutation):
|
14
|
+
webhook: typing.Optional[types.WebhookType] = None
|
15
|
+
|
16
|
+
@staticmethod
|
17
|
+
@utils.authentication_required
|
18
|
+
@utils.authorization_required(["manage_webhooks"])
|
19
|
+
def mutate(
|
20
|
+
info: Info, **input: inputs.CreateWebhookMutationInput
|
21
|
+
) -> "CreateWebhookMutation":
|
22
|
+
serializer = serializers.WebhookSerializer(
|
23
|
+
data=input,
|
24
|
+
context=info.context.request,
|
25
|
+
)
|
26
|
+
serializer.is_valid(raise_exception=True)
|
27
|
+
|
28
|
+
return CreateWebhookMutation(webhook=serializer.save()) # type:ignore
|
29
|
+
|
30
|
+
|
31
|
+
@strawberry.type
|
32
|
+
class UpdateWebhookMutation(utils.BaseMutation):
|
33
|
+
webhook: typing.Optional[types.WebhookType] = None
|
34
|
+
|
35
|
+
@staticmethod
|
36
|
+
@utils.authentication_required
|
37
|
+
@utils.authorization_required(["manage_webhooks"])
|
38
|
+
def mutate(
|
39
|
+
info: Info, **input: inputs.UpdateWebhookMutationInput
|
40
|
+
) -> "UpdateWebhookMutation":
|
41
|
+
id = input.get("id")
|
42
|
+
webhook = models.Webhook.access_by(info.context.request).get(id=id)
|
43
|
+
|
44
|
+
serializer = serializers.WebhookSerializer(
|
45
|
+
webhook,
|
46
|
+
data=input,
|
47
|
+
partial=True,
|
48
|
+
context=info.context.request,
|
49
|
+
)
|
50
|
+
serializer.is_valid(raise_exception=True)
|
51
|
+
serializer.save()
|
52
|
+
|
53
|
+
# refetch the shipment to get the updated state with signals processed
|
54
|
+
update = models.Webhook.access_by(info.context.request).get(id=id)
|
55
|
+
|
56
|
+
return UpdateWebhookMutation(webhook=update) # type:ignore
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import typing
|
2
|
+
import datetime
|
3
|
+
import strawberry
|
4
|
+
|
5
|
+
import karrio.lib as lib
|
6
|
+
import karrio.server.graph.utils as utils
|
7
|
+
import karrio.server.graph.schemas.base.types as base
|
8
|
+
import karrio.server.graph.schemas.events.inputs as inputs
|
9
|
+
import karrio.server.events.models as models
|
10
|
+
import karrio.server.events.filters as filters
|
11
|
+
|
12
|
+
|
13
|
+
@strawberry.type
|
14
|
+
class WebhookType:
|
15
|
+
object_type: str
|
16
|
+
id: str
|
17
|
+
url: typing.Optional[str]
|
18
|
+
secret: typing.Optional[str]
|
19
|
+
disabled: typing.Optional[bool]
|
20
|
+
test_mode: typing.Optional[bool]
|
21
|
+
description: typing.Optional[str]
|
22
|
+
enabled_events: typing.List[inputs.EventStatusEnum]
|
23
|
+
last_event_at: typing.Optional[datetime.datetime]
|
24
|
+
created_at: typing.Optional[datetime.datetime]
|
25
|
+
updated_at: typing.Optional[datetime.datetime]
|
26
|
+
created_by: typing.Optional[base.UserType]
|
27
|
+
|
28
|
+
@staticmethod
|
29
|
+
@utils.authentication_required
|
30
|
+
def resolve(info, id: str) -> typing.Optional["WebhookType"]:
|
31
|
+
return models.Webhook.access_by(info.context.request).filter(id=id).first()
|
32
|
+
|
33
|
+
@staticmethod
|
34
|
+
@utils.authentication_required
|
35
|
+
def resolve_list(
|
36
|
+
info,
|
37
|
+
filter: typing.Optional[inputs.WebhookFilter] = strawberry.UNSET,
|
38
|
+
) -> utils.Connection["WebhookType"]:
|
39
|
+
_filter = filter if filter is not strawberry.UNSET else inputs.WebhookFilter()
|
40
|
+
queryset = filters.WebhookFilter(
|
41
|
+
_filter.to_dict(), models.Webhook.access_by(info.context.request)
|
42
|
+
).qs
|
43
|
+
return utils.paginated_connection(queryset, **_filter.pagination())
|
44
|
+
|
45
|
+
|
46
|
+
@strawberry.type
|
47
|
+
class EventType:
|
48
|
+
object_type: str
|
49
|
+
id: str
|
50
|
+
test_mode: typing.Optional[bool]
|
51
|
+
pending_webhooks: typing.Optional[int]
|
52
|
+
type: typing.Optional[inputs.EventStatusEnum]
|
53
|
+
created_at: typing.Optional[datetime.datetime]
|
54
|
+
updated_at: typing.Optional[datetime.datetime]
|
55
|
+
created_by: typing.Optional[base.UserType]
|
56
|
+
|
57
|
+
@strawberry.field
|
58
|
+
def data(self: models.Event) -> typing.Optional[utils.JSON]:
|
59
|
+
try:
|
60
|
+
return lib.to_dict(self.data)
|
61
|
+
except:
|
62
|
+
return self.data
|
63
|
+
|
64
|
+
@staticmethod
|
65
|
+
@utils.authentication_required
|
66
|
+
def resolve(info, id: str) -> typing.Optional["EventType"]:
|
67
|
+
return models.Event.access_by(info.context.request).filter(id=id).first()
|
68
|
+
|
69
|
+
@staticmethod
|
70
|
+
@utils.authentication_required
|
71
|
+
def resolve_list(
|
72
|
+
info,
|
73
|
+
filter: typing.Optional[inputs.EventFilter] = strawberry.UNSET,
|
74
|
+
) -> utils.Connection["EventType"]:
|
75
|
+
_filter = filter if filter is not strawberry.UNSET else inputs.EventFilter()
|
76
|
+
queryset = filters.EventFilter(
|
77
|
+
_filter.to_dict(), models.Event.access_by(info.context.request)
|
78
|
+
).qs
|
79
|
+
return utils.paginated_connection(queryset, **_filter.pagination())
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: karrio_server_events
|
3
|
+
Version: 2025.5rc1
|
4
|
+
Summary: Multi-carrier shipping API Events 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: huey
|
13
|
+
|
14
|
+
# karrio.server.events
|
15
|
+
|
16
|
+
This package is a module of the [karrio](https://pypi.org/project/karrio.server) universal shipping API.
|
17
|
+
|
18
|
+
## Requirements
|
19
|
+
|
20
|
+
`Python 3.11+`
|
21
|
+
|
22
|
+
## Installation
|
23
|
+
|
24
|
+
```bash
|
25
|
+
pip install karrio.server.events
|
26
|
+
```
|
27
|
+
|
28
|
+
Check the [karrio docs](https://docs.karrio.io) to get started.
|
@@ -0,0 +1,44 @@
|
|
1
|
+
karrio/server/events/__init__.py,sha256=tvia3JfJUbr8axL76i0ic308Q0623SVKOyg0FXP3hBA,144
|
2
|
+
karrio/server/events/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
|
3
|
+
karrio/server/events/apps.py,sha256=DIV8JdPB_3hD4DwhcQTevhph3PaceMkFSEGM1lOcdVY,301
|
4
|
+
karrio/server/events/filters.py,sha256=vMeY42IsoFl482-yX1BI17sw-9x9euOnzTl-860W3sg,2230
|
5
|
+
karrio/server/events/models.py,sha256=Ze4ITStRy_eb7qtujYbq7IISxvo7V2SKcmdCQ4fQO2I,2439
|
6
|
+
karrio/server/events/router.py,sha256=IBUR7rfBkdEHQzWxYOPcVSM8NBp3fte9G6Q5BVTUNNw,95
|
7
|
+
karrio/server/events/signals.py,sha256=gQ1FHwd-LXpg9OcV0inaqNBxSkqQVaztOgCOFNbo7I8,4549
|
8
|
+
karrio/server/events/tasks.py,sha256=RVLJ2cNEQnT-3bUoitw9C_ST6g7tlLyzuJvu8omLOHc,712
|
9
|
+
karrio/server/events/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
|
10
|
+
karrio/server/events/urls.py,sha256=oLTTzDWPhEFfK93EvzHTDRxqkw8Fr3iXneDXwFUkvcU,217
|
11
|
+
karrio/server/events/migrations/0001_initial.py,sha256=c_HS1Pt89fnDgc839eh2VGBN4mvICBGWH5OUC5Xsz8k,2212
|
12
|
+
karrio/server/events/migrations/0002_event.py,sha256=2f4SCoJcRXhPQRelH3EVRgpN77J0UmAW5yAtvvk42nc,1620
|
13
|
+
karrio/server/events/migrations/0003_auto_20220303_1210.py,sha256=aOqf2v9w1DgfDKTWWkP94EDFhL7pg_LjeNEIl7-XdPw,813
|
14
|
+
karrio/server/events/migrations/0004_custom_migration_2022_4.py,sha256=PjOvHs363wqVuYegVbDScEiw_iX9PHvg9fkviJaxcCI,1305
|
15
|
+
karrio/server/events/migrations/0005_event_event_object_idx.py,sha256=UsDbq4z4n7wY4QyehzLy_9NP6GCejCqZAF9uizeh6Ng,513
|
16
|
+
karrio/server/events/migrations/0006_webhook_events_alter_event_data.py,sha256=NJsoOUOEtarDO-7LCnrh8nxKmjyhe_mw-RhSIKDlYC0,2880
|
17
|
+
karrio/server/events/migrations/0007_auto_20221130_0255.py,sha256=o5tkTj6vzrqpOyX6mXAYS3GOYlDRMkMY4tcPxzOzvOc,780
|
18
|
+
karrio/server/events/migrations/0008_alter_event_type.py,sha256=DhUAI-yG_ugEv4f9oigdhn1lH_6A2nV8GyS-N63cmdQ,397
|
19
|
+
karrio/server/events/migrations/0009_alter_webhook_enabled_events.py,sha256=0bhn3Ab_4cW2Zjptw7yfKJT1iTnsrBl_7goCCquNzcQ,1825
|
20
|
+
karrio/server/events/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
|
+
karrio/server/events/serializers/__init__.py,sha256=S5KJONM1VFbB_Wyl__F2YbdSV7R_5RPNFos0ERkfDko,52
|
22
|
+
karrio/server/events/serializers/base.py,sha256=Civqqod7X2u8wUfQpx7NejFpQfqQD8UWjztSOX4iWzg,2158
|
23
|
+
karrio/server/events/serializers/event.py,sha256=dKYqldfSEjKMY7uB1rBFfEfSZ_dfEp8EPxbkBBSWzcc,289
|
24
|
+
karrio/server/events/serializers/webhook.py,sha256=Ri5JS1SXpSsPUvQH989T_7Amu1p46y5TP54MEEhK8j8,889
|
25
|
+
karrio/server/events/task_definitions/__init__.py,sha256=bpT73UG7mZL_JjEqMwbYx6q69jA8J5Jcoul1LcDokhA,81
|
26
|
+
karrio/server/events/task_definitions/base/__init__.py,sha256=3vP52gFdCo9hctLRKnYvEi9iz1UK8GL_a47Nw44h3Nc,1834
|
27
|
+
karrio/server/events/task_definitions/base/archiving.py,sha256=flbcxmD1pKlzCrYvekbwJ7Dvz4TaLdudAAsWH8JAjzI,2257
|
28
|
+
karrio/server/events/task_definitions/base/tracking.py,sha256=UL7-z1nVp3Scz-Nm6xuJB8S6obfaiHd-IyBXXIcrwOo,8533
|
29
|
+
karrio/server/events/task_definitions/base/webhook.py,sha256=NgXMJw_55pwZ5z4bu49VUekFNkUJ_cwvs01PNnLxhI4,3506
|
30
|
+
karrio/server/events/tests/__init__.py,sha256=5szv9hDvu0R0jtm3XWktY19rCaE8bZ2LdjRm4oJ0pYA,220
|
31
|
+
karrio/server/events/tests/test_events.py,sha256=Fxi1hv_lyuRJw5Y_ydywhq5P3akpxet4mFMFSiHU96c,4066
|
32
|
+
karrio/server/events/tests/test_tracking_tasks.py,sha256=oOPdjhVax4SzTgBwKxySosgWOX6ZJ2Y-cYvXp3kj0lw,12114
|
33
|
+
karrio/server/events/tests/test_webhooks.py,sha256=5Ts3RG_DQ5x0mnWRgTLOX-7FjSAEHXCvT913Sm7FLNM,3860
|
34
|
+
karrio/server/events/views/__init__.py,sha256=Y4hfjd_YSOHj6L7oH41bssVW8rXI_l4vD_IthfNuJ2o,90
|
35
|
+
karrio/server/events/views/webhooks.py,sha256=191DjXCoSTM_9AA-Kw-JxQ2TYQ6uYOQMrIDv11ZeTo0,5300
|
36
|
+
karrio/server/graph/schemas/__init__.py,sha256=iOEMwnlORWezdO8-2vxBIPSR37D7JGjluZ8f55vzxls,81
|
37
|
+
karrio/server/graph/schemas/events/__init__.py,sha256=Yg1rWew5DgSb_OnLy8n7qqwPLfVcZ1xm0_VzqP04rlE,1620
|
38
|
+
karrio/server/graph/schemas/events/inputs.py,sha256=Mgy9qCUrbL-sMI5dNXsnbW8K5_PnGKM13brzZrc5OWk,1526
|
39
|
+
karrio/server/graph/schemas/events/mutations.py,sha256=930g2D5TnAEgEjfEfLml1Q9OGCyxe2D592BhzSGDQAQ,1862
|
40
|
+
karrio/server/graph/schemas/events/types.py,sha256=TPlrDwQV4LZXu-1t4gFl_eYayU39THmgYT3uv7VXnnw,2759
|
41
|
+
karrio_server_events-2025.5rc1.dist-info/METADATA,sha256=jAONHcC5Qr-q3W4Qvxrm9f6J4KCeXuFU7kDeHsQcU8Y,704
|
42
|
+
karrio_server_events-2025.5rc1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
43
|
+
karrio_server_events-2025.5rc1.dist-info/top_level.txt,sha256=D1D7x8R3cTfjF_15mfiO7wCQ5QMtuM4x8GaPr7z5i78,12
|
44
|
+
karrio_server_events-2025.5rc1.dist-info/RECORD,,
|