interloper-core 0.2.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 (67) hide show
  1. interloper_core-0.2.0/PKG-INFO +18 -0
  2. interloper_core-0.2.0/README.md +3 -0
  3. interloper_core-0.2.0/pyproject.toml +64 -0
  4. interloper_core-0.2.0/src/interloper/__init__.py +140 -0
  5. interloper_core-0.2.0/src/interloper/assets/__init__.py +8 -0
  6. interloper_core-0.2.0/src/interloper/assets/base.py +594 -0
  7. interloper_core-0.2.0/src/interloper/assets/context.py +163 -0
  8. interloper_core-0.2.0/src/interloper/assets/decorator.py +92 -0
  9. interloper_core-0.2.0/src/interloper/assets/keys.py +22 -0
  10. interloper_core-0.2.0/src/interloper/backfillers/__init__.py +8 -0
  11. interloper_core-0.2.0/src/interloper/backfillers/base.py +254 -0
  12. interloper_core-0.2.0/src/interloper/backfillers/results.py +99 -0
  13. interloper_core-0.2.0/src/interloper/backfillers/serial.py +38 -0
  14. interloper_core-0.2.0/src/interloper/backfillers/state.py +141 -0
  15. interloper_core-0.2.0/src/interloper/cli/__init__.py +5 -0
  16. interloper_core-0.2.0/src/interloper/cli/config.py +50 -0
  17. interloper_core-0.2.0/src/interloper/cli/display.py +1068 -0
  18. interloper_core-0.2.0/src/interloper/cli/main.py +265 -0
  19. interloper_core-0.2.0/src/interloper/dag/__init__.py +6 -0
  20. interloper_core-0.2.0/src/interloper/dag/base.py +404 -0
  21. interloper_core-0.2.0/src/interloper/errors.py +155 -0
  22. interloper_core-0.2.0/src/interloper/events/__init__.py +29 -0
  23. interloper_core-0.2.0/src/interloper/events/base.py +480 -0
  24. interloper_core-0.2.0/src/interloper/events/server.py +148 -0
  25. interloper_core-0.2.0/src/interloper/io/__init__.py +21 -0
  26. interloper_core-0.2.0/src/interloper/io/adapter.py +106 -0
  27. interloper_core-0.2.0/src/interloper/io/base.py +73 -0
  28. interloper_core-0.2.0/src/interloper/io/context.py +31 -0
  29. interloper_core-0.2.0/src/interloper/io/csv.py +140 -0
  30. interloper_core-0.2.0/src/interloper/io/database.py +378 -0
  31. interloper_core-0.2.0/src/interloper/io/file.py +153 -0
  32. interloper_core-0.2.0/src/interloper/io/memory.py +149 -0
  33. interloper_core-0.2.0/src/interloper/normalizer/__init__.py +6 -0
  34. interloper_core-0.2.0/src/interloper/normalizer/base.py +228 -0
  35. interloper_core-0.2.0/src/interloper/normalizer/strategy.py +21 -0
  36. interloper_core-0.2.0/src/interloper/partitioning/__init__.py +21 -0
  37. interloper_core-0.2.0/src/interloper/partitioning/base.py +50 -0
  38. interloper_core-0.2.0/src/interloper/partitioning/time.py +83 -0
  39. interloper_core-0.2.0/src/interloper/rest/__init__.py +12 -0
  40. interloper_core-0.2.0/src/interloper/rest/auth.py +270 -0
  41. interloper_core-0.2.0/src/interloper/rest/client.py +66 -0
  42. interloper_core-0.2.0/src/interloper/rest/paginator.py +120 -0
  43. interloper_core-0.2.0/src/interloper/runners/__init__.py +14 -0
  44. interloper_core-0.2.0/src/interloper/runners/base.py +279 -0
  45. interloper_core-0.2.0/src/interloper/runners/multi_process.py +158 -0
  46. interloper_core-0.2.0/src/interloper/runners/multi_thread.py +100 -0
  47. interloper_core-0.2.0/src/interloper/runners/results.py +135 -0
  48. interloper_core-0.2.0/src/interloper/runners/serial.py +42 -0
  49. interloper_core-0.2.0/src/interloper/runners/state.py +229 -0
  50. interloper_core-0.2.0/src/interloper/schema/__init__.py +5 -0
  51. interloper_core-0.2.0/src/interloper/schema/base.py +179 -0
  52. interloper_core-0.2.0/src/interloper/serialization/__init__.py +21 -0
  53. interloper_core-0.2.0/src/interloper/serialization/asset.py +100 -0
  54. interloper_core-0.2.0/src/interloper/serialization/backfiller.py +29 -0
  55. interloper_core-0.2.0/src/interloper/serialization/base.py +43 -0
  56. interloper_core-0.2.0/src/interloper/serialization/config.py +45 -0
  57. interloper_core-0.2.0/src/interloper/serialization/dag.py +29 -0
  58. interloper_core-0.2.0/src/interloper/serialization/io.py +28 -0
  59. interloper_core-0.2.0/src/interloper/serialization/runner.py +29 -0
  60. interloper_core-0.2.0/src/interloper/serialization/source.py +68 -0
  61. interloper_core-0.2.0/src/interloper/source/__init__.py +7 -0
  62. interloper_core-0.2.0/src/interloper/source/base.py +389 -0
  63. interloper_core-0.2.0/src/interloper/source/config.py +20 -0
  64. interloper_core-0.2.0/src/interloper/source/decorator.py +77 -0
  65. interloper_core-0.2.0/src/interloper/utils/__init__.py +6 -0
  66. interloper_core-0.2.0/src/interloper/utils/imports.py +107 -0
  67. interloper_core-0.2.0/src/interloper/utils/text.py +94 -0
@@ -0,0 +1,18 @@
1
+ Metadata-Version: 2.3
2
+ Name: interloper-core
3
+ Version: 0.2.0
4
+ Summary: Interloper
5
+ Author: Guillaume Onfroy
6
+ Author-email: Guillaume Onfroy <guillaume@digitlcloud.com>
7
+ Requires-Dist: pydantic>=2.11.7
8
+ Requires-Dist: pydantic-settings>=2.11.0
9
+ Requires-Dist: httpx>=0.28.1
10
+ Requires-Dist: pyyaml>=6.0.0 ; extra == 'cli'
11
+ Requires-Dist: rich>=14.3.2 ; extra == 'cli'
12
+ Requires-Python: >=3.10
13
+ Provides-Extra: cli
14
+ Description-Content-Type: text/markdown
15
+
16
+ # interloper-core
17
+
18
+ Core library for asset materialization, DAG resolution, runners, and serialization.
@@ -0,0 +1,3 @@
1
+ # interloper-core
2
+
3
+ Core library for asset materialization, DAG resolution, runners, and serialization.
@@ -0,0 +1,64 @@
1
+ # ###############
2
+ # PROJECT / UV
3
+ # ###############
4
+ [project]
5
+ name = "interloper-core"
6
+ version = "0.2.0"
7
+ description = "Interloper"
8
+ authors = [{ name = "Guillaume Onfroy", email = "guillaume@digitlcloud.com" }]
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ dependencies = [
12
+ "pydantic>=2.11.7",
13
+ "pydantic-settings>=2.11.0",
14
+ "httpx>=0.28.1",
15
+ ]
16
+
17
+ [project.optional-dependencies]
18
+ cli = ["pyyaml>=6.0.0", "rich>=14.3.2"]
19
+
20
+ [dependency-groups]
21
+ dev = ["pytest>=8.0.0", "pytest-cov>=7.0.0"]
22
+
23
+ [build-system]
24
+ requires = ["uv_build>=0.9.5,<0.10.0"]
25
+ build-backend = "uv_build"
26
+
27
+ [tool.uv.build-backend]
28
+ module-name = "interloper"
29
+
30
+ [project.scripts]
31
+ interloper = "interloper.cli.main:main"
32
+
33
+ # ###############
34
+ # RUFF
35
+ # ###############
36
+ [tool.ruff]
37
+ line-length = 120
38
+
39
+ [tool.ruff.lint]
40
+ preview = true
41
+ extend-select = ["E", "I", "UP", "ANN001", "ANN201", "ANN202", "DOC", "D"]
42
+ ignore = ["D104"]
43
+
44
+ [tool.ruff.lint.pydocstyle]
45
+ convention = "google"
46
+
47
+ [tool.ruff.lint.per-file-ignores]
48
+ "__init__.py" = ["F401", "F403"]
49
+ "tests/**" = ["ANN", "D101", "D102", "B018"]
50
+
51
+ # ###############
52
+ # PYRIGHT
53
+ # ###############
54
+ [tool.pyright]
55
+ include = ["src"]
56
+ typeCheckingMode = "basic"
57
+ reportMissingParameterType = true
58
+ ignore = ["libs/**", "tests/**", "scripts/**"]
59
+
60
+ # ###############
61
+ # PYTEST
62
+ # ###############
63
+ [tool.pytest.ini_options]
64
+ filterwarnings = ["ignore::DeprecationWarning"]
@@ -0,0 +1,140 @@
1
+ """Interloper - A Python framework for building and executing data pipelines."""
2
+
3
+ from interloper.assets import Asset, AssetDefinition, asset
4
+ from interloper.assets.context import EventLogger, ExecutionContext
5
+ from interloper.assets.keys import AssetDefinitionKey, AssetInstanceKey
6
+ from interloper.backfillers import Backfiller
7
+ from interloper.backfillers.results import BackfillResult
8
+ from interloper.backfillers.serial import SerialBackfiller
9
+ from interloper.dag.base import DAG
10
+ from interloper.errors import (
11
+ AdapterError,
12
+ AssetError,
13
+ AssetNotFoundError,
14
+ AuthenticationError,
15
+ BackfillError,
16
+ CircularDependencyError,
17
+ ConfigError,
18
+ DAGError,
19
+ DataNotFoundError,
20
+ DependencyNotFoundError,
21
+ EventError,
22
+ InterloperError,
23
+ InterloperIOError,
24
+ NormalizerError,
25
+ PartitionError,
26
+ RunnerError,
27
+ SchemaError,
28
+ ScriptLoadError,
29
+ SourceError,
30
+ TableNotFoundError,
31
+ )
32
+ from interloper.events.base import (
33
+ Event,
34
+ EventBus,
35
+ EventType,
36
+ LogLevel,
37
+ disable_event_forwarding,
38
+ emit,
39
+ enable_event_forwarding,
40
+ subscribe,
41
+ unsubscribe,
42
+ )
43
+ from interloper.io import IO, CsvIO, FileIO, IOContext, MemoryIO
44
+ from interloper.normalizer import MaterializationStrategy, Normalizer
45
+ from interloper.partitioning import (
46
+ Partition,
47
+ PartitionConfig,
48
+ PartitionWindow,
49
+ TimePartition,
50
+ TimePartitionConfig,
51
+ TimePartitionWindow,
52
+ )
53
+ from interloper.rest import HTTPBearerAuth, OAuth2Auth, OAuth2ClientCredentialsAuth, OAuth2RefreshTokenAuth, RESTClient
54
+ from interloper.runners import MultiProcessRunner, MultiThreadRunner, Runner, SerialRunner
55
+ from interloper.runners.results import AssetExecutionInfo, ExecutionStatus, RunResult
56
+ from interloper.schema import AssetSchema
57
+ from interloper.serialization import AssetSpec, BackfillerSpec, ConfigSpec, DAGSpec, IOSpec, RunnerSpec
58
+ from interloper.source import Source, SourceDefinition, source
59
+ from interloper.source.config import Config
60
+
61
+ __version__ = "0.1.0"
62
+
63
+ __all__ = [
64
+ "DAG",
65
+ "IO",
66
+ "AdapterError",
67
+ "Asset",
68
+ "AssetDefinition",
69
+ "AssetDefinitionKey",
70
+ "AssetError",
71
+ "AssetExecutionInfo",
72
+ "AssetInstanceKey",
73
+ "AssetNotFoundError",
74
+ "AssetSchema",
75
+ "AssetSpec",
76
+ "AuthenticationError",
77
+ "BackfillError",
78
+ "BackfillResult",
79
+ "Backfiller",
80
+ "BackfillerSpec",
81
+ "CircularDependencyError",
82
+ "Config",
83
+ "ConfigError",
84
+ "ConfigSpec",
85
+ "CsvIO",
86
+ "DAGError",
87
+ "DAGSpec",
88
+ "DataNotFoundError",
89
+ "DependencyNotFoundError",
90
+ "Event",
91
+ "EventBus",
92
+ "EventError",
93
+ "EventLogger",
94
+ "EventType",
95
+ "ExecutionContext",
96
+ "ExecutionStatus",
97
+ "FileIO",
98
+ "HTTPBearerAuth",
99
+ "IOContext",
100
+ "IOSpec",
101
+ "InterloperError",
102
+ "InterloperIOError",
103
+ "LogLevel",
104
+ "MaterializationStrategy",
105
+ "MemoryIO",
106
+ "MultiProcessRunner",
107
+ "MultiThreadRunner",
108
+ "Normalizer",
109
+ "NormalizerError",
110
+ "OAuth2Auth",
111
+ "OAuth2ClientCredentialsAuth",
112
+ "OAuth2RefreshTokenAuth",
113
+ "Partition",
114
+ "PartitionConfig",
115
+ "PartitionError",
116
+ "PartitionWindow",
117
+ "RESTClient",
118
+ "RunResult",
119
+ "Runner",
120
+ "RunnerError",
121
+ "RunnerSpec",
122
+ "SchemaError",
123
+ "ScriptLoadError",
124
+ "SerialBackfiller",
125
+ "SerialRunner",
126
+ "Source",
127
+ "SourceDefinition",
128
+ "SourceError",
129
+ "TableNotFoundError",
130
+ "TimePartition",
131
+ "TimePartitionConfig",
132
+ "TimePartitionWindow",
133
+ "asset",
134
+ "disable_event_forwarding",
135
+ "emit",
136
+ "enable_event_forwarding",
137
+ "source",
138
+ "subscribe",
139
+ "unsubscribe",
140
+ ]
@@ -0,0 +1,8 @@
1
+ """Asset definitions and decorators."""
2
+
3
+ from interloper.assets.base import Asset, AssetDefinition
4
+ from interloper.assets.context import ExecutionContext
5
+ from interloper.assets.decorator import asset
6
+
7
+ __all__ = ["Asset", "AssetDefinition", "ExecutionContext", "asset"]
8
+