interloper-core 0.76.0__tar.gz → 0.78.0__tar.gz

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 (123) hide show
  1. {interloper_core-0.76.0 → interloper_core-0.78.0}/PKG-INFO +1 -1
  2. {interloper_core-0.76.0 → interloper_core-0.78.0}/pyproject.toml +4 -2
  3. {interloper_core-0.76.0 → interloper_core-0.78.0}/pyproject.toml.orig +3 -3
  4. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/__init__.py +7 -12
  5. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/asset/__init__.py +3 -2
  6. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/asset/base.py +414 -439
  7. interloper_core-0.78.0/src/interloper/asset/decorator.py +174 -0
  8. interloper_core-0.78.0/src/interloper/asset/upstream.py +48 -0
  9. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/catalog/base.py +31 -32
  10. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/cli/commands/run.py +8 -4
  11. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/component/__init__.py +4 -4
  12. interloper_core-0.78.0/src/interloper/component/base.py +816 -0
  13. interloper_core-0.78.0/src/interloper/component/decorator.py +255 -0
  14. interloper_core-0.78.0/src/interloper/component/relation.py +421 -0
  15. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/config/base.py +1 -0
  16. interloper_core-0.78.0/src/interloper/config/decorator.py +100 -0
  17. interloper_core-0.78.0/src/interloper/connection/decorator.py +120 -0
  18. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/dag/base.py +207 -96
  19. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/destination/__init__.py +3 -6
  20. interloper_core-0.78.0/src/interloper/destination/base.py +110 -0
  21. interloper_core-0.78.0/src/interloper/destination/context.py +84 -0
  22. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/destination/csv.py +18 -18
  23. interloper_core-0.78.0/src/interloper/destination/database.py +265 -0
  24. interloper_core-0.78.0/src/interloper/destination/decorator.py +105 -0
  25. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/destination/file.py +18 -18
  26. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/destination/memory.py +14 -14
  27. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/errors.py +8 -12
  28. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/events/console.py +1 -1
  29. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/hook/base.py +15 -18
  30. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/hook/trigger.py +11 -15
  31. interloper_core-0.78.0/src/interloper/job/base.py +77 -0
  32. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/normalizer/base.py +15 -25
  33. interloper_core-0.78.0/src/interloper/normalizer/strategy.py +37 -0
  34. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/operation/base.py +39 -26
  35. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/partitioning/base.py +1 -7
  36. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/partitioning/time.py +2 -5
  37. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/representation/__init__.py +2 -2
  38. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/representation/base.py +187 -30
  39. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/resource/__init__.py +1 -3
  40. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/resource/base.py +4 -18
  41. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/resource/fields.py +46 -36
  42. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/rest/paginator.py +1 -1
  43. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/schema/base.py +1 -1
  44. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/serializable/__init__.py +2 -1
  45. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/serializable/base.py +383 -61
  46. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/source/__init__.py +1 -1
  47. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/source/base.py +252 -329
  48. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/source/decorator.py +36 -95
  49. interloper_core-0.78.0/src/interloper/utils/data.py +33 -0
  50. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/utils/time.py +1 -1
  51. interloper_core-0.76.0/src/interloper/asset/decorator.py +0 -211
  52. interloper_core-0.76.0/src/interloper/component/base.py +0 -536
  53. interloper_core-0.76.0/src/interloper/config/decorator.py +0 -82
  54. interloper_core-0.76.0/src/interloper/conformer/__init__.py +0 -5
  55. interloper_core-0.76.0/src/interloper/conformer/base.py +0 -126
  56. interloper_core-0.76.0/src/interloper/connection/decorator.py +0 -106
  57. interloper_core-0.76.0/src/interloper/destination/base.py +0 -115
  58. interloper_core-0.76.0/src/interloper/destination/context.py +0 -31
  59. interloper_core-0.76.0/src/interloper/destination/database.py +0 -368
  60. interloper_core-0.76.0/src/interloper/destination/decorator.py +0 -110
  61. interloper_core-0.76.0/src/interloper/destination/partitioned.py +0 -100
  62. interloper_core-0.76.0/src/interloper/job/base.py +0 -96
  63. interloper_core-0.76.0/src/interloper/normalizer/strategy.py +0 -21
  64. interloper_core-0.76.0/src/interloper/resource/ref.py +0 -118
  65. interloper_core-0.76.0/src/interloper/utils/data.py +0 -86
  66. {interloper_core-0.76.0 → interloper_core-0.78.0}/README.md +0 -0
  67. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/asset/context.py +0 -0
  68. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/catalog/__init__.py +0 -0
  69. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/cli/__init__.py +0 -0
  70. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/cli/commands/__init__.py +0 -0
  71. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/cli/commands/agent.py +0 -0
  72. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/cli/commands/app.py +0 -0
  73. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/cli/commands/db.py +0 -0
  74. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/cli/commands/launch.py +0 -0
  75. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/cli/main.py +0 -0
  76. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/cli/runtime.py +0 -0
  77. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/config/__init__.py +0 -0
  78. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/connection/__init__.py +0 -0
  79. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/connection/base.py +0 -0
  80. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/dag/__init__.py +0 -0
  81. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/events/__init__.py +0 -0
  82. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/events/bus.py +0 -0
  83. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/events/event.py +0 -0
  84. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/events/logger.py +0 -0
  85. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/events/stderr.py +0 -0
  86. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/events/types.py +0 -0
  87. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/hook/__init__.py +0 -0
  88. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/hook/webhook.py +0 -0
  89. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/job/__init__.py +0 -0
  90. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/job/cron.py +0 -0
  91. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/normalizer/__init__.py +0 -0
  92. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/oauth/__init__.py +0 -0
  93. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/oauth/base.py +0 -0
  94. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/oauth/config.py +0 -0
  95. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/oauth/providers.py +0 -0
  96. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/operation/__init__.py +0 -0
  97. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/partitioning/__init__.py +0 -0
  98. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/registry/__init__.py +0 -0
  99. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/registry/base.py +0 -0
  100. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/rest/__init__.py +0 -0
  101. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/rest/auth.py +0 -0
  102. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/rest/client.py +0 -0
  103. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/runner/__init__.py +0 -0
  104. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/runner/async_runner.py +0 -0
  105. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/runner/base.py +0 -0
  106. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/runner/multi_process.py +0 -0
  107. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/runner/results.py +0 -0
  108. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/runner/serial.py +0 -0
  109. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/runner/state.py +0 -0
  110. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/runner/sync_runner.py +0 -0
  111. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/schema/__init__.py +0 -0
  112. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/schema/decorator.py +0 -0
  113. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/settings.py +0 -0
  114. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/telemetry/__init__.py +0 -0
  115. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/telemetry/attributes.py +0 -0
  116. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/telemetry/metrics.py +0 -0
  117. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/telemetry/propagation.py +0 -0
  118. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/telemetry/setup.py +0 -0
  119. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/telemetry/tracer.py +0 -0
  120. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/utils/__init__.py +0 -0
  121. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/utils/concurrency.py +0 -0
  122. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/utils/imports.py +0 -0
  123. {interloper_core-0.76.0 → interloper_core-0.78.0}/src/interloper/utils/text.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: interloper-core
3
- Version: 0.76.0
3
+ Version: 0.78.0
4
4
  Summary: Interloper
5
5
  Author: Guillaume Onfroy
6
6
  Author-email: Guillaume Onfroy <guillaume@digitlcloud.com>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "interloper-core"
3
- version = "0.76.0"
3
+ version = "0.78.0"
4
4
  description = "Interloper"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -110,8 +110,10 @@ convention = "google"
110
110
  "D102",
111
111
  "D104",
112
112
  "B018",
113
+ "RUF069",
114
+ "PLW0108",
113
115
  ]
114
116
 
115
117
  [build-system]
116
- requires = ["uv_build>=0.11.5,<0.12"]
118
+ requires = ["uv_build>=0.12.9,<0.13"]
117
119
  build-backend = "uv_build"
@@ -3,7 +3,7 @@
3
3
  # ###############
4
4
  [project]
5
5
  name = "interloper-core"
6
- version = "0.76.0"
6
+ version = "0.78.0"
7
7
  description = "Interloper"
8
8
  authors = [{ name = "Guillaume Onfroy", email = "guillaume@digitlcloud.com" }]
9
9
  readme = "README.md"
@@ -72,7 +72,7 @@ snapchat = "interloper.oauth.providers:SNAPCHAT"
72
72
  tiktok = "interloper.oauth.providers:TIKTOK"
73
73
 
74
74
  [build-system]
75
- requires = ["uv_build>=0.11.5,<0.12"]
75
+ requires = ["uv_build>=0.12.9,<0.13"]
76
76
  build-backend = "uv_build"
77
77
 
78
78
  [tool.uv.build-backend]
@@ -96,7 +96,7 @@ convention = "google"
96
96
 
97
97
  [tool.ruff.lint.per-file-ignores]
98
98
  "__init__.py" = ["F401", "F403"]
99
- "tests/**" = ["ANN", "D101", "D102", "D104", "B018"]
99
+ "tests/**" = ["ANN", "D101", "D102", "D104", "B018", "RUF069", "PLW0108"]
100
100
 
101
101
  # Pytest is configured once, at the workspace root: a per-package
102
102
  # [tool.pytest.ini_options] block would make it the rootdir for any run
@@ -1,13 +1,13 @@
1
1
  """Interloper's public API: assets, sources, destinations, DAGs, and runners."""
2
2
 
3
- from interloper.asset import Asset, AssetDefinition, AssetIdentity, ExecutionContext, asset
3
+ from interloper.asset import Asset, AssetDefinition, ExecutionContext, Upstream, asset
4
4
  from interloper.catalog import Catalog
5
5
  from interloper.component import (
6
6
  KINDS,
7
7
  Component,
8
8
  ComponentDefinition,
9
- RelationDefinition,
10
- RelationSlot,
9
+ ComponentIdentity,
10
+ Relation,
11
11
  )
12
12
  from interloper.config import Config, config
13
13
  from interloper.connection import (
@@ -22,11 +22,9 @@ from interloper.dag import DAG
22
22
  from interloper.destination import (
23
23
  CSVDestination,
24
24
  Destination,
25
- DestinationDefinition,
26
25
  FileDestination,
27
26
  IOContext,
28
27
  MemoryDestination,
29
- PartitionedDestination,
30
28
  destination,
31
29
  )
32
30
  from interloper.events import Event, EventBus, EventType
@@ -45,7 +43,7 @@ from interloper.partitioning import (
45
43
  TimePartitionWindow,
46
44
  )
47
45
  from interloper.registry import Registry
48
- from interloper.resource import Resource, ResourceDefinition, ResourceRef
46
+ from interloper.resource import Resource, ResourceDefinition
49
47
  from interloper.resource.fields import (
50
48
  CronField,
51
49
  FetchField,
@@ -86,7 +84,6 @@ __all__ = [
86
84
  "KINDS",
87
85
  "Asset",
88
86
  "AssetDefinition",
89
- "AssetIdentity",
90
87
  "AsyncRESTClient",
91
88
  "AsyncRunner",
92
89
  "BasePaginator",
@@ -94,13 +91,13 @@ __all__ = [
94
91
  "Catalog",
95
92
  "Component",
96
93
  "ComponentDefinition",
94
+ "ComponentIdentity",
97
95
  "Config",
98
96
  "Connection",
99
97
  "ConnectionState",
100
98
  "CronField",
101
99
  "CronJob",
102
100
  "Destination",
103
- "DestinationDefinition",
104
101
  "Event",
105
102
  "EventBus",
106
103
  "EventType",
@@ -137,18 +134,15 @@ __all__ = [
137
134
  "Partition",
138
135
  "PartitionConfig",
139
136
  "PartitionWindow",
140
- "PartitionedDestination",
141
137
  "RESTClient",
142
138
  "RangePaginator",
143
139
  "RefreshTokenOAuthConnection",
144
140
  "RefreshTokenResponse",
145
141
  "Registry",
146
- "RelationDefinition",
147
- "RelationSlot",
142
+ "Relation",
148
143
  "Renewal",
149
144
  "Resource",
150
145
  "ResourceDefinition",
151
- "ResourceRef",
152
146
  "RunResult",
153
147
  "Runner",
154
148
  "Schema",
@@ -167,6 +161,7 @@ __all__ = [
167
161
  "TimePartitionWindow",
168
162
  "TimezoneField",
169
163
  "TriggerHook",
164
+ "Upstream",
170
165
  "WebhookHook",
171
166
  "Workload",
172
167
  "asset",
@@ -1,7 +1,8 @@
1
1
  """Assets: the core data-producing component, its execution context, and its decorator."""
2
2
 
3
- from interloper.asset.base import Asset, AssetDefinition, AssetIdentity
3
+ from interloper.asset.base import Asset, AssetDefinition
4
4
  from interloper.asset.context import ExecutionContext
5
5
  from interloper.asset.decorator import asset
6
+ from interloper.asset.upstream import Upstream
6
7
 
7
- __all__ = ["Asset", "AssetDefinition", "AssetIdentity", "ExecutionContext", "asset"]
8
+ __all__ = ["Asset", "AssetDefinition", "ExecutionContext", "Upstream", "asset"]