jerry-thomas 2.0.0__tar.gz → 2.0.1__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 (269) hide show
  1. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/PKG-INFO +7 -20
  2. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/README.md +6 -19
  3. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/pyproject.toml +1 -1
  4. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/stream.py +14 -8
  5. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/stages.py +12 -1
  6. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/paths.py +10 -1
  7. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/stream_plan.py +19 -0
  8. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-dataset/project.yaml +2 -1
  9. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-interim-data-builder/project.yaml +2 -1
  10. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/dto.py.j2 +1 -1
  11. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/filter.py.j2 +1 -1
  12. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/mappers/ingest.py.j2 +3 -0
  13. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/parser.py.j2 +1 -1
  14. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/record.py.j2 +1 -0
  15. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/jerry_thomas.egg-info/PKG-INFO +7 -20
  16. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/LICENSE +0 -0
  17. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/setup.cfg +0 -0
  18. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/__init__.py +0 -0
  19. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/analysis/__init__.py +0 -0
  20. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/analysis/vector/collector.py +0 -0
  21. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/analysis/vector/matrix.py +0 -0
  22. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/analysis/vector/report.py +0 -0
  23. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/analysis/vector_analyzer.py +0 -0
  24. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/build/__init__.py +0 -0
  25. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/build/state.py +0 -0
  26. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/build/tasks/__init__.py +0 -0
  27. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/build/tasks/config.py +0 -0
  28. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/build/tasks/metadata.py +0 -0
  29. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/build/tasks/scaler.py +0 -0
  30. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/build/tasks/schema.py +0 -0
  31. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/build/tasks/utils.py +0 -0
  32. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/app.py +0 -0
  33. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/build.py +0 -0
  34. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/contract.py +0 -0
  35. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/demo.py +0 -0
  36. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/domain.py +0 -0
  37. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/dto.py +0 -0
  38. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/filter.py +0 -0
  39. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/inspect.py +0 -0
  40. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/list_.py +0 -0
  41. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/loader.py +0 -0
  42. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/mapper.py +0 -0
  43. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/parser.py +0 -0
  44. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/plugin.py +0 -0
  45. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/run.py +0 -0
  46. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/run_config.py +0 -0
  47. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/serve_pipeline.py +0 -0
  48. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/commands/source.py +0 -0
  49. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/visuals/__init__.py +0 -0
  50. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/visuals/common.py +0 -0
  51. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/visuals/labels.py +0 -0
  52. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/visuals/runner.py +0 -0
  53. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/visuals/sections.py +0 -0
  54. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/visuals/sources.py +0 -0
  55. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/visuals/sources_basic.py +0 -0
  56. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/visuals/sources_off.py +0 -0
  57. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/visuals/sources_rich.py +0 -0
  58. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/cli/workspace_utils.py +0 -0
  59. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/__init__.py +0 -0
  60. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/catalog.py +0 -0
  61. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/context.py +0 -0
  62. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/dataset/dataset.py +0 -0
  63. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/dataset/feature.py +0 -0
  64. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/dataset/loader.py +0 -0
  65. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/dataset/normalize.py +0 -0
  66. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/metadata.py +0 -0
  67. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/postprocess.py +0 -0
  68. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/project.py +0 -0
  69. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/resolution.py +0 -0
  70. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/split.py +0 -0
  71. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/tasks.py +0 -0
  72. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/config/workspace.py +0 -0
  73. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/domain/__init__.py +0 -0
  74. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/domain/feature.py +0 -0
  75. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/domain/record.py +0 -0
  76. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/domain/sample.py +0 -0
  77. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/domain/vector.py +0 -0
  78. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/filters/filters.py +0 -0
  79. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/integrations/__init__.py +0 -0
  80. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/integrations/ml/__init__.py +0 -0
  81. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/integrations/ml/adapter.py +0 -0
  82. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/integrations/ml/pandas_support.py +0 -0
  83. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/integrations/ml/rows.py +0 -0
  84. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/integrations/ml/torch_support.py +0 -0
  85. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/factory.py +0 -0
  86. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/output.py +0 -0
  87. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/protocols.py +0 -0
  88. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/serializers.py +0 -0
  89. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/sinks/__init__.py +0 -0
  90. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/sinks/base.py +0 -0
  91. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/sinks/files.py +0 -0
  92. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/sinks/rich.py +0 -0
  93. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/sinks/stdout.py +0 -0
  94. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/writers/__init__.py +0 -0
  95. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/writers/base.py +0 -0
  96. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/writers/csv_writer.py +0 -0
  97. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/writers/jsonl.py +0 -0
  98. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/io/writers/pickle_writer.py +0 -0
  99. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/mappers/noop.py +0 -0
  100. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/mappers/synthetic/time.py +0 -0
  101. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/parsers/identity.py +0 -0
  102. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/__init__.py +0 -0
  103. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/artifacts.py +0 -0
  104. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/context.py +0 -0
  105. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/observability.py +0 -0
  106. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/pipelines.py +0 -0
  107. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/split.py +0 -0
  108. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/utils/keygen.py +0 -0
  109. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/utils/memory_sort.py +0 -0
  110. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/utils/ordering.py +0 -0
  111. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/utils/spool_cache.py +0 -0
  112. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/pipeline/utils/transform_utils.py +0 -0
  113. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/plugins.py +0 -0
  114. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/registries/registry.py +0 -0
  115. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/runtime.py +0 -0
  116. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/artifacts.py +0 -0
  117. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/bootstrap/__init__.py +0 -0
  118. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/bootstrap/config.py +0 -0
  119. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/bootstrap/core.py +0 -0
  120. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/constants.py +0 -0
  121. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/entrypoints.py +0 -0
  122. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/factories.py +0 -0
  123. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/project_paths.py +0 -0
  124. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/runs.py +0 -0
  125. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/__init__.py +0 -0
  126. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/contract_yaml.py +0 -0
  127. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/demo.py +0 -0
  128. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/discovery.py +0 -0
  129. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/domain.py +0 -0
  130. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/dto.py +0 -0
  131. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/filter.py +0 -0
  132. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/layout.py +0 -0
  133. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/loader.py +0 -0
  134. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/mapper.py +0 -0
  135. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/parser.py +0 -0
  136. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/plugin.py +0 -0
  137. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/source_yaml.py +0 -0
  138. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/templates.py +0 -0
  139. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/services/scaffold/utils.py +0 -0
  140. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/__init__.py +0 -0
  141. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/data_loader.py +0 -0
  142. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/decoders.py +0 -0
  143. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/factory.py +0 -0
  144. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/foreach.py +0 -0
  145. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/models/__init__.py +0 -0
  146. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/models/base.py +0 -0
  147. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/models/generator.py +0 -0
  148. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/models/loader.py +0 -0
  149. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/models/parser.py +0 -0
  150. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/models/parsing_error.py +0 -0
  151. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/models/source.py +0 -0
  152. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/models/synthetic.py +0 -0
  153. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/synthetic/__init__.py +0 -0
  154. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/synthetic/time/__init__.py +0 -0
  155. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/synthetic/time/loader.py +0 -0
  156. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/synthetic/time/parser.py +0 -0
  157. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/sources/transports.py +0 -0
  158. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/contracts/equity.ohlcv.yaml +0 -0
  159. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/contracts/time.ticks.hour_sin.yaml +0 -0
  160. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/contracts/time.ticks.linear.yaml +0 -0
  161. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/data/APPL.jsonl +0 -0
  162. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/data/MSFT.jsonl +0 -0
  163. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/dataset.yaml +0 -0
  164. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/postprocess.yaml +0 -0
  165. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/project.yaml +0 -0
  166. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/sources/sandbox.ohlcv.yaml +0 -0
  167. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/sources/synthetic.ticks.yaml +0 -0
  168. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/tasks/metadata.yaml +0 -0
  169. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/tasks/scaler.yaml +0 -0
  170. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/tasks/schema.yaml +0 -0
  171. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/tasks/serve.test.yaml +0 -0
  172. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/tasks/serve.train.yaml +0 -0
  173. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/demo/tasks/serve.val.yaml +0 -0
  174. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/scripts/run_dataframe.py +0 -0
  175. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/scripts/run_torch.py +0 -0
  176. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/src/{{PACKAGE_NAME}}/__init__.py +0 -0
  177. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/src/{{PACKAGE_NAME}}/domains/equity/__init__.py +0 -0
  178. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/src/{{PACKAGE_NAME}}/domains/equity/model.py +0 -0
  179. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/src/{{PACKAGE_NAME}}/dtos/__init__.py +0 -0
  180. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/src/{{PACKAGE_NAME}}/dtos/sandbox_ohlcv_dto.py +0 -0
  181. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/src/{{PACKAGE_NAME}}/mappers/__init__.py +0 -0
  182. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/src/{{PACKAGE_NAME}}/mappers/map_sandbox_ohlcv_dto_to_equity.py +0 -0
  183. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/src/{{PACKAGE_NAME}}/parsers/__init__.py +0 -0
  184. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/demo_skeleton/src/{{PACKAGE_NAME}}/parsers/sandbox_ohlcv_dto_parser.py +0 -0
  185. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/README.md +0 -0
  186. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/jerry.yaml +0 -0
  187. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/pyproject.toml +0 -0
  188. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/jerry.yaml +0 -0
  189. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/contracts/composed.reference.yaml +0 -0
  190. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/contracts/ingest.reference.yaml +0 -0
  191. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/contracts/overview.reference.yaml +0 -0
  192. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/dataset.yaml +0 -0
  193. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/postprocess.yaml +0 -0
  194. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/project.yaml +0 -0
  195. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/sources/foreach.http.reference.yaml +0 -0
  196. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/sources/foreach.reference.yaml +0 -0
  197. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/sources/fs.reference.yaml +0 -0
  198. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/sources/http.reference.yaml +0 -0
  199. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/sources/overview.reference.yaml +0 -0
  200. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/sources/synthetic.reference.yaml +0 -0
  201. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/tasks/metadata.reference.yaml +0 -0
  202. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/tasks/scaler.reference.yaml +0 -0
  203. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/tasks/schema.reference.yaml +0 -0
  204. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/reference/reference/tasks/serve.reference.yaml +0 -0
  205. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/src/{{PACKAGE_NAME}}/__init__.py +0 -0
  206. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/src/{{PACKAGE_NAME}}/domains/__init__.py +0 -0
  207. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/src/{{PACKAGE_NAME}}/dtos/__init__.py +0 -0
  208. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/src/{{PACKAGE_NAME}}/loaders/__init__.py +0 -0
  209. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/src/{{PACKAGE_NAME}}/mappers/__init__.py +0 -0
  210. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/src/{{PACKAGE_NAME}}/parsers/__init__.py +0 -0
  211. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-dataset/dataset.yaml +0 -0
  212. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-dataset/postprocess.yaml +0 -0
  213. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-dataset/tasks/metadata.yaml +0 -0
  214. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-dataset/tasks/scaler.yaml +0 -0
  215. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-dataset/tasks/schema.yaml +0 -0
  216. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-dataset/tasks/serve.test.yaml +0 -0
  217. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-dataset/tasks/serve.train.yaml +0 -0
  218. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-dataset/tasks/serve.val.yaml +0 -0
  219. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-interim-data-builder/dataset.yaml +0 -0
  220. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-interim-data-builder/postprocess.yaml +0 -0
  221. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/plugin_skeleton/your-interim-data-builder/tasks/serve.all.yaml +0 -0
  222. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/contracts/composed.yaml.j2 +0 -0
  223. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/contracts/ingest.yaml.j2 +0 -0
  224. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/loader_synthetic.py.j2 +0 -0
  225. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/loaders/basic.py.j2 +0 -0
  226. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/mappers/composed.py.j2 +0 -0
  227. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/parser_custom.py.j2 +0 -0
  228. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/templates/stubs/source.yaml.j2 +0 -0
  229. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/debug/identity.py +0 -0
  230. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/debug/lint.py +0 -0
  231. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/feature/model.py +0 -0
  232. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/feature/scaler.py +0 -0
  233. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/filter.py +0 -0
  234. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/interfaces.py +0 -0
  235. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/record/floor_time.py +0 -0
  236. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/record/lag.py +0 -0
  237. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/sequence.py +0 -0
  238. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/stream/dedupe.py +0 -0
  239. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/stream/ensure_ticks.py +0 -0
  240. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/stream/fill.py +0 -0
  241. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/stream/filter.py +0 -0
  242. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/stream/floor_time.py +0 -0
  243. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/stream/granularity.py +0 -0
  244. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/stream/lag.py +0 -0
  245. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/stream/rolling.py +0 -0
  246. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/utils.py +0 -0
  247. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/vector/__init__.py +0 -0
  248. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/vector/common.py +0 -0
  249. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/vector/drop/__init__.py +0 -0
  250. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/vector/drop/horizontal.py +0 -0
  251. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/vector/drop/orchestrator.py +0 -0
  252. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/vector/drop/vertical.py +0 -0
  253. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/vector/ensure_schema.py +0 -0
  254. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/vector/fill.py +0 -0
  255. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/vector/replace.py +0 -0
  256. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/transforms/vector_utils.py +0 -0
  257. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/utils/__init__.py +0 -0
  258. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/utils/load.py +0 -0
  259. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/utils/paths.py +0 -0
  260. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/utils/pickle_model.py +0 -0
  261. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/utils/placeholders.py +0 -0
  262. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/utils/rich_compat.py +0 -0
  263. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/utils/time.py +0 -0
  264. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/datapipeline/utils/window.py +0 -0
  265. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/jerry_thomas.egg-info/SOURCES.txt +0 -0
  266. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/jerry_thomas.egg-info/dependency_links.txt +0 -0
  267. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/jerry_thomas.egg-info/entry_points.txt +0 -0
  268. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/jerry_thomas.egg-info/requires.txt +0 -0
  269. {jerry_thomas-2.0.0 → jerry_thomas-2.0.1}/src/jerry_thomas.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jerry-thomas
3
- Version: 2.0.0
3
+ Version: 2.0.1
4
4
  Summary: Jerry-Thomas: a stream-first, plugin-friendly data pipeline (mixology-themed CLI)
5
5
  Author: Anders Skott Lind
6
6
  License: MIT
@@ -75,32 +75,19 @@ For example: `jerry serve --project lib/my-datapipeline/project.yaml`.
75
75
 
76
76
  ```bash
77
77
  jerry plugin init my-datapipeline --out lib/
78
- python -m pip install -e lib/my-datapipeline
78
+
79
+ # Note: import paths use the package name (hyphens become underscores), e.g.
80
+ # `my_datapipeline` even if the dist folder is `my-datapipeline`.
79
81
 
80
82
  # One-stop wizard: scaffolds source YAML + DTO/parser + domain + mapper + contract.
83
+ # See `docs/cli.md` for wizard tips and identity vs custom guidance.
81
84
  jerry inflow create
82
85
 
83
- # Wizard tips (identity vs custom)
84
- #
85
- # - Parser:
86
- # - Choose "Identity parser" when the loader already yields dicts/objects that match your DTO shape,
87
- # and no type conversion is needed.
88
- # - Choose "Create new parser" when you need to parse timestamps, coerce types, rename fields,
89
- # or drop/validate rows.
90
- #
91
- # - Mapper:
92
- # - Choose "Identity mapper" only when your DTO already is the final domain record shape (for example you might have used jerry to output interim datasets):
93
- # `time` is timezone-aware and identity fields are present.
94
- # - Otherwise, choose "Create new mapper" to map DTO -> domain record and add light derived fields.
95
- #
96
- # After scaffolding, you typically still need to:
97
- # - Fill placeholders in `sources/*.yaml` (path/url/headers/etc.).
98
- # - Reference your stream contract id in `dataset.yaml` under `record_stream: <contract_id>` and pick a `field` for each feature.
99
- #
100
86
  # Reinstall after commands that update entry points (pyproject.toml).
101
87
  python -m pip install -e lib/my-datapipeline
102
88
 
103
- jerry serve --dataset your-dataset --limit 3
89
+ # -> fill in your templates generated by 'jerry inflow create' and get ready to serve
90
+ jerry serve --limit 3
104
91
  ```
105
92
 
106
93
  ---
@@ -52,32 +52,19 @@ For example: `jerry serve --project lib/my-datapipeline/project.yaml`.
52
52
 
53
53
  ```bash
54
54
  jerry plugin init my-datapipeline --out lib/
55
- python -m pip install -e lib/my-datapipeline
55
+
56
+ # Note: import paths use the package name (hyphens become underscores), e.g.
57
+ # `my_datapipeline` even if the dist folder is `my-datapipeline`.
56
58
 
57
59
  # One-stop wizard: scaffolds source YAML + DTO/parser + domain + mapper + contract.
60
+ # See `docs/cli.md` for wizard tips and identity vs custom guidance.
58
61
  jerry inflow create
59
62
 
60
- # Wizard tips (identity vs custom)
61
- #
62
- # - Parser:
63
- # - Choose "Identity parser" when the loader already yields dicts/objects that match your DTO shape,
64
- # and no type conversion is needed.
65
- # - Choose "Create new parser" when you need to parse timestamps, coerce types, rename fields,
66
- # or drop/validate rows.
67
- #
68
- # - Mapper:
69
- # - Choose "Identity mapper" only when your DTO already is the final domain record shape (for example you might have used jerry to output interim datasets):
70
- # `time` is timezone-aware and identity fields are present.
71
- # - Otherwise, choose "Create new mapper" to map DTO -> domain record and add light derived fields.
72
- #
73
- # After scaffolding, you typically still need to:
74
- # - Fill placeholders in `sources/*.yaml` (path/url/headers/etc.).
75
- # - Reference your stream contract id in `dataset.yaml` under `record_stream: <contract_id>` and pick a `field` for each feature.
76
- #
77
63
  # Reinstall after commands that update entry points (pyproject.toml).
78
64
  python -m pip install -e lib/my-datapipeline
79
65
 
80
- jerry serve --dataset your-dataset --limit 3
66
+ # -> fill in your templates generated by 'jerry inflow create' and get ready to serve
67
+ jerry serve --limit 3
81
68
  ```
82
69
 
83
70
  ---
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "jerry-thomas"
7
- version = "2.0.0"
7
+ version = "2.0.1"
8
8
  description = "Jerry-Thomas: a stream-first, plugin-friendly data pipeline (mixology-themed CLI)"
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.10"
@@ -39,11 +39,12 @@ from datapipeline.services.scaffold.utils import (
39
39
 
40
40
  def handle(*, plugin_root: Path | None = None, workspace: WorkspaceContext | None = None) -> None:
41
41
  root_dir, pkg_name, _ = pkg_root(plugin_root)
42
- project_yaml = resolve_default_project_yaml(workspace) or resolve_project_yaml_path(root_dir)
42
+ project_yaml = resolve_default_project_yaml(
43
+ workspace) or resolve_project_yaml_path(root_dir)
43
44
 
44
45
  # Shared context
45
- provider = prompt_required("Provider")
46
- dataset = prompt_required("Dataset")
46
+ provider = prompt_required("Provider name (e.g. nasa)")
47
+ dataset = prompt_required("Dataset name (e.g. weather)")
47
48
  source_id = f"{provider}.{dataset}"
48
49
 
49
50
  # Collected actions (execute at end)
@@ -110,7 +111,8 @@ def handle(*, plugin_root: Path | None = None, workspace: WorkspaceContext | Non
110
111
  ]
111
112
  if choice == "fs":
112
113
  fmt_options.append(("pickle", "pickle"))
113
- fmt = pick_from_menu("Format:", fmt_options, allow_default=False)
114
+ fmt = pick_from_menu(
115
+ "Format:", fmt_options, allow_default=False)
114
116
  else:
115
117
  fmt = None
116
118
  loader_ep, loader_args = default_loader_config(choice, fmt)
@@ -142,7 +144,8 @@ def handle(*, plugin_root: Path | None = None, workspace: WorkspaceContext | Non
142
144
  [(k, k) for k in sorted(parsers.keys())],
143
145
  )
144
146
  elif pchoice == "create":
145
- dto_default = dto_class_name(f"{provider}_{dataset}") if provider and dataset else None
147
+ dto_default = dto_class_name(
148
+ f"{provider}_{dataset}") if provider and dataset else None
146
149
  dto_class, parser_create_dto = choose_existing_or_create_name(
147
150
  label=LABEL_DTO_FOR_PARSER,
148
151
  existing=sorted(list_dtos(root=plugin_root).keys()),
@@ -228,7 +231,8 @@ def handle(*, plugin_root: Path | None = None, workspace: WorkspaceContext | Non
228
231
  default=default_mapper_name_for_identity(domain),
229
232
  )
230
233
  else:
231
- mapper_name = choose_name("Mapper name", default=default_mapper_name(mapper_input_module, domain))
234
+ mapper_name = choose_name(
235
+ "Mapper name", default=default_mapper_name(mapper_input_module, domain))
232
236
  elif mchoice == "identity":
233
237
  mapper_ep = "identity"
234
238
  else:
@@ -264,9 +268,11 @@ def handle(*, plugin_root: Path | None = None, workspace: WorkspaceContext | Non
264
268
  domain=domain,
265
269
  )
266
270
  elif mchoice == "existing":
267
- mapper_plan = MapperPlan(create=False, mapper_ep=mapper_ep, domain=domain)
271
+ mapper_plan = MapperPlan(
272
+ create=False, mapper_ep=mapper_ep, domain=domain)
268
273
  else:
269
- mapper_plan = MapperPlan(create=False, mapper_ep="identity", domain=domain)
274
+ mapper_plan = MapperPlan(
275
+ create=False, mapper_ep="identity", domain=domain)
270
276
 
271
277
  plan = StreamPlan(
272
278
  provider=provider,
@@ -25,7 +25,18 @@ from datapipeline.transforms.utils import get_field, partition_key
25
25
 
26
26
  def open_source_stream(context: PipelineContext, stream_alias: str) -> Source:
27
27
  runtime = context.runtime
28
- return runtime.registries.stream_sources.get(stream_alias).stream()
28
+ registry = runtime.registries.stream_sources
29
+ try:
30
+ source = registry.get(stream_alias)
31
+ except KeyError as exc:
32
+ available = sorted(registry.keys())
33
+ available_text = ", ".join(available) if available else "(none)"
34
+ raise KeyError(
35
+ "Unknown record_stream "
36
+ f"'{stream_alias}'. Check dataset.yaml and contracts/ ids. "
37
+ f"Available streams: {available_text}"
38
+ ) from exc
39
+ return source.stream()
29
40
 
30
41
 
31
42
  def build_record_stream(
@@ -8,7 +8,16 @@ def pkg_root(start: Optional[Path] = None) -> tuple[Path, str, Path]:
8
8
  for d in [here, *here.parents]:
9
9
  pyproject = d / "pyproject.toml"
10
10
  if pyproject.exists():
11
- return d, d.name, pyproject
11
+ pkg_name = d.name
12
+ src_dir = d / "src"
13
+ if src_dir.exists():
14
+ candidates = [
15
+ p for p in src_dir.iterdir()
16
+ if p.is_dir() and (p / "__init__.py").exists()
17
+ ]
18
+ if len(candidates) == 1:
19
+ pkg_name = candidates[0].name
20
+ return d, pkg_name, pyproject
12
21
  print("[error] pyproject.toml not found (searched current and parent dirs)", file=sys.stderr)
13
22
  raise SystemExit(1)
14
23
 
@@ -8,6 +8,7 @@ from datapipeline.services.scaffold.mapper import create_mapper
8
8
  from datapipeline.services.scaffold.source_yaml import create_source_yaml
9
9
  from datapipeline.services.scaffold.contract_yaml import write_ingest_contract
10
10
  from datapipeline.services.scaffold.discovery import list_dtos
11
+ from datapipeline.services.paths import pkg_root
11
12
  from datapipeline.services.scaffold.utils import error_exit, status
12
13
 
13
14
 
@@ -50,6 +51,17 @@ class StreamPlan:
50
51
 
51
52
 
52
53
  def execute_stream_plan(plan: StreamPlan) -> None:
54
+ pyproject_path = None
55
+ before_pyproject = None
56
+ try:
57
+ root_dir, _, pyproject = pkg_root(plan.root)
58
+ pyproject_path = pyproject
59
+ if pyproject_path.exists():
60
+ before_pyproject = pyproject_path.read_text()
61
+ except SystemExit:
62
+ pyproject_path = None
63
+ before_pyproject = None
64
+
53
65
  if plan.create_domain and plan.domain:
54
66
  create_domain(domain=plan.domain, root=plan.root)
55
67
 
@@ -108,3 +120,10 @@ def execute_stream_plan(plan: StreamPlan) -> None:
108
120
  mapper_entrypoint=mapper_ep or "identity",
109
121
  )
110
122
  status("ok", "Stream created.")
123
+ if pyproject_path and before_pyproject is not None:
124
+ after_pyproject = pyproject_path.read_text()
125
+ if after_pyproject != before_pyproject:
126
+ status(
127
+ "note",
128
+ f"Entry points updated; reinstall plugin: pip install -e {pyproject_path.parent}",
129
+ )
@@ -9,7 +9,8 @@ paths:
9
9
  artifacts: ../artifacts/${project_name}/v${version}
10
10
  tasks: ./tasks
11
11
  globals:
12
- group_by: <your-bucket-cadence>
12
+ # TODO: Set your grouping cadence (must match ^\d+(m|min|h|d)$).
13
+ group_by: 1h
13
14
  start_time: null
14
15
  end_time: null
15
16
  split:
@@ -9,6 +9,7 @@ paths:
9
9
  artifacts: ../artifacts/${project_name}/v${version}
10
10
  tasks: ./tasks
11
11
  globals:
12
- group_by: <your-bucket-cadence>
12
+ # TODO: Set your grouping cadence (must match ^\d+(m|min|h|d)$).
13
+ group_by: 1h
13
14
  start_time: null
14
15
  end_time: null
@@ -24,4 +24,4 @@ class {{CLASS_NAME}}:
24
24
  # currency: str
25
25
  """
26
26
  # TODO: define fields matching the '{{DOMAIN}}' source schema
27
- raise NotImplementedError(f"Define fields for the DTO '{{CLASS_NAME}}'")
27
+ pass
@@ -11,6 +11,6 @@ def {{ FUNCTION_NAME }}(stream: Iterator[Any], field: str, target: Any) -> Itera
11
11
  Replace the condition below with your own logic.
12
12
  """
13
13
  for record in stream:
14
+ # TODO: implement filter logic
14
15
  # Example: pass through everything
15
16
  yield record
16
-
@@ -10,6 +10,9 @@ def {{FUNCTION_NAME}}(
10
10
  **params: Any,
11
11
  ) -> Iterator[{{DOMAIN_RECORD}}]:
12
12
  """Map {{INPUT_CLASS}} records to domain-level {{DOMAIN_RECORD}} records."""
13
+ raise NotImplementedError(
14
+ "Implement mapper logic for {{INPUT_CLASS}} -> {{DOMAIN_RECORD}}"
15
+ )
13
16
  for record in stream:
14
17
  # TODO: construct {{DOMAIN_RECORD}} from record fields
15
18
  yield {{DOMAIN_RECORD}}(
@@ -22,4 +22,4 @@ class {{CLASS_NAME}}(DataParser[{{DTO_CLASS}}]):
22
22
  # return {{DTO_CLASS}}(
23
23
  # ... map fields from `raw` ...
24
24
  # )
25
- raise NotImplementedError
25
+ raise NotImplementedError("Implement parser logic for {{DTO_CLASS}}")
@@ -13,6 +13,7 @@ class {{CLASS_NAME}}({{PARENT_CLASS}}):
13
13
 
14
14
  Add any additional fields you need for filtering/partitioning/grouping.
15
15
  """
16
+ # TODO: Add domain fields for filtering/partitioning/grouping.
16
17
  # Example extra fields (uncomment and adapt):
17
18
  # region: str # e.g. 'us-west', 'eu-central', etc.
18
19
  # exchange: str # e.g. 'NASDAQ', 'NYSE', etc.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jerry-thomas
3
- Version: 2.0.0
3
+ Version: 2.0.1
4
4
  Summary: Jerry-Thomas: a stream-first, plugin-friendly data pipeline (mixology-themed CLI)
5
5
  Author: Anders Skott Lind
6
6
  License: MIT
@@ -75,32 +75,19 @@ For example: `jerry serve --project lib/my-datapipeline/project.yaml`.
75
75
 
76
76
  ```bash
77
77
  jerry plugin init my-datapipeline --out lib/
78
- python -m pip install -e lib/my-datapipeline
78
+
79
+ # Note: import paths use the package name (hyphens become underscores), e.g.
80
+ # `my_datapipeline` even if the dist folder is `my-datapipeline`.
79
81
 
80
82
  # One-stop wizard: scaffolds source YAML + DTO/parser + domain + mapper + contract.
83
+ # See `docs/cli.md` for wizard tips and identity vs custom guidance.
81
84
  jerry inflow create
82
85
 
83
- # Wizard tips (identity vs custom)
84
- #
85
- # - Parser:
86
- # - Choose "Identity parser" when the loader already yields dicts/objects that match your DTO shape,
87
- # and no type conversion is needed.
88
- # - Choose "Create new parser" when you need to parse timestamps, coerce types, rename fields,
89
- # or drop/validate rows.
90
- #
91
- # - Mapper:
92
- # - Choose "Identity mapper" only when your DTO already is the final domain record shape (for example you might have used jerry to output interim datasets):
93
- # `time` is timezone-aware and identity fields are present.
94
- # - Otherwise, choose "Create new mapper" to map DTO -> domain record and add light derived fields.
95
- #
96
- # After scaffolding, you typically still need to:
97
- # - Fill placeholders in `sources/*.yaml` (path/url/headers/etc.).
98
- # - Reference your stream contract id in `dataset.yaml` under `record_stream: <contract_id>` and pick a `field` for each feature.
99
- #
100
86
  # Reinstall after commands that update entry points (pyproject.toml).
101
87
  python -m pip install -e lib/my-datapipeline
102
88
 
103
- jerry serve --dataset your-dataset --limit 3
89
+ # -> fill in your templates generated by 'jerry inflow create' and get ready to serve
90
+ jerry serve --limit 3
104
91
  ```
105
92
 
106
93
  ---
File without changes
File without changes