sqllocks-spindle 2.2.2__tar.gz → 2.2.4__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 (298) hide show
  1. {sqllocks_spindle-2.2.2/sqllocks_spindle.egg-info → sqllocks_spindle-2.2.4}/PKG-INFO +1 -1
  2. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/pyproject.toml +1 -1
  3. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/__init__.py +1 -1
  4. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/fabric/warehouse_bulk_writer.py +12 -3
  5. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/packs/runner.py +1 -1
  6. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4/sqllocks_spindle.egg-info}/PKG-INFO +1 -1
  7. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/LICENSE +0 -0
  8. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/LICENSE-NOTICES.md +0 -0
  9. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/README.md +0 -0
  10. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/setup.cfg +0 -0
  11. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/chaos/__init__.py +0 -0
  12. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/chaos/categories.py +0 -0
  13. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/chaos/config.py +0 -0
  14. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/chaos/engine.py +0 -0
  15. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/cli.py +0 -0
  16. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/__init__.py +0 -0
  17. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/_shared/reference_data/us_zip_locations.json +0 -0
  18. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/base.py +0 -0
  19. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/capital_markets/__init__.py +0 -0
  20. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/capital_markets/capital_markets.py +0 -0
  21. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/capital_markets/profiles/default.json +0 -0
  22. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/capital_markets/reference_data/exchanges.json +0 -0
  23. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/capital_markets/reference_data/gics_sectors.json +0 -0
  24. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/capital_markets/reference_data/index_memberships.json +0 -0
  25. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/capital_markets/reference_data/sp500_constituents.json +0 -0
  26. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/composite.py +0 -0
  27. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/education/__init__.py +0 -0
  28. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/education/education.py +0 -0
  29. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/education/profiles/default.json +0 -0
  30. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/education/reference_data/aid_types.json +0 -0
  31. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/education/reference_data/course_catalog.json +0 -0
  32. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/education/reference_data/department_names.json +0 -0
  33. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/financial/__init__.py +0 -0
  34. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/financial/financial.py +0 -0
  35. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/financial/profiles/default.json +0 -0
  36. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/financial/reference_data/branch_names.json +0 -0
  37. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/financial/reference_data/merchant_names.json +0 -0
  38. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/financial/reference_data/transaction_categories.json +0 -0
  39. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/healthcare/__init__.py +0 -0
  40. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/healthcare/healthcare.py +0 -0
  41. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/healthcare/profiles/default.json +0 -0
  42. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/healthcare/reference_data/cpt_codes.json +0 -0
  43. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/healthcare/reference_data/icd10_codes.json +0 -0
  44. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/healthcare/reference_data/insurance_plans.json +0 -0
  45. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/healthcare/reference_data/medication_names.json +0 -0
  46. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/healthcare/reference_data/specialties.json +0 -0
  47. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/healthcare/reference_data/us_zip_locations.json +0 -0
  48. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/hr/__init__.py +0 -0
  49. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/hr/hr.py +0 -0
  50. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/hr/profiles/default.json +0 -0
  51. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/hr/reference_data/department_names.json +0 -0
  52. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/hr/reference_data/position_titles.json +0 -0
  53. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/hr/reference_data/training_courses.json +0 -0
  54. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/insurance/__init__.py +0 -0
  55. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/insurance/insurance.py +0 -0
  56. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/insurance/profiles/default.json +0 -0
  57. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/insurance/reference_data/claim_categories.json +0 -0
  58. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/insurance/reference_data/peril_types.json +0 -0
  59. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/insurance/reference_data/policy_types.json +0 -0
  60. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/iot/__init__.py +0 -0
  61. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/iot/iot.py +0 -0
  62. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/iot/profiles/default.json +0 -0
  63. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/iot/reference_data/alert_severity_levels.json +0 -0
  64. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/iot/reference_data/device_types.json +0 -0
  65. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/iot/reference_data/sensor_types.json +0 -0
  66. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/manufacturing/__init__.py +0 -0
  67. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/manufacturing/manufacturing.py +0 -0
  68. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/manufacturing/profiles/default.json +0 -0
  69. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/manufacturing/reference_data/defect_codes.json +0 -0
  70. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/manufacturing/reference_data/material_types.json +0 -0
  71. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/manufacturing/reference_data/operation_types.json +0 -0
  72. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/marketing/__init__.py +0 -0
  73. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/marketing/marketing.py +0 -0
  74. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/marketing/profiles/default.json +0 -0
  75. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/marketing/reference_data/campaign_types.json +0 -0
  76. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/marketing/reference_data/industry_names.json +0 -0
  77. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/marketing/reference_data/lead_sources.json +0 -0
  78. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/real_estate/__init__.py +0 -0
  79. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/real_estate/profiles/default.json +0 -0
  80. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/real_estate/real_estate.py +0 -0
  81. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/real_estate/reference_data/inspection_items.json +0 -0
  82. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/real_estate/reference_data/neighborhoods.json +0 -0
  83. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/real_estate/reference_data/property_types.json +0 -0
  84. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/retail/__init__.py +0 -0
  85. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/retail/profiles/default.json +0 -0
  86. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/retail/reference_data/categories.json +0 -0
  87. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/retail/reference_data/product_names.json +0 -0
  88. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/retail/reference_data/promo_names.json +0 -0
  89. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/retail/reference_data/us_zip_locations.json +0 -0
  90. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/retail/retail.py +0 -0
  91. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/shared_registry.py +0 -0
  92. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/supply_chain/__init__.py +0 -0
  93. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/supply_chain/profiles/default.json +0 -0
  94. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/supply_chain/reference_data/carrier_names.json +0 -0
  95. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/supply_chain/reference_data/material_categories.json +0 -0
  96. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/supply_chain/reference_data/shipping_methods.json +0 -0
  97. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/supply_chain/supply_chain.py +0 -0
  98. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/telecom/__init__.py +0 -0
  99. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/telecom/profiles/default.json +0 -0
  100. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/telecom/reference_data/device_models.json +0 -0
  101. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/telecom/reference_data/network_event_types.json +0 -0
  102. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/telecom/reference_data/plan_types.json +0 -0
  103. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/domains/telecom/telecom.py +0 -0
  104. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/__init__.py +0 -0
  105. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/chunked_generator.py +0 -0
  106. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/generator.py +0 -0
  107. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/id_manager.py +0 -0
  108. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/rules/__init__.py +0 -0
  109. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/rules/business_rules.py +0 -0
  110. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/__init__.py +0 -0
  111. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/base.py +0 -0
  112. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/computed.py +0 -0
  113. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/conditional.py +0 -0
  114. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/correlated.py +0 -0
  115. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/derived.py +0 -0
  116. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/distribution.py +0 -0
  117. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/enum.py +0 -0
  118. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/faker_strategy.py +0 -0
  119. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/first_per_parent.py +0 -0
  120. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/foreign_key.py +0 -0
  121. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/formula.py +0 -0
  122. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/lifecycle.py +0 -0
  123. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/lookup.py +0 -0
  124. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/pattern.py +0 -0
  125. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/record_field.py +0 -0
  126. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/record_sample.py +0 -0
  127. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/reference_data.py +0 -0
  128. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/scd2.py +0 -0
  129. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/self_referencing.py +0 -0
  130. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/sequence.py +0 -0
  131. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/temporal.py +0 -0
  132. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/strategies/uuid_strategy.py +0 -0
  133. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/engine/table_generator.py +0 -0
  134. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/fabric/__init__.py +0 -0
  135. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/fabric/credentials.py +0 -0
  136. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/fabric/eventhouse_writer.py +0 -0
  137. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/fabric/eventstream_client.py +0 -0
  138. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/fabric/lakehouse_files_writer.py +0 -0
  139. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/fabric/onelake_paths.py +0 -0
  140. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/fabric/semantic_model_writer.py +0 -0
  141. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/fabric/sql_database_writer.py +0 -0
  142. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/fabric/stream_writer_convenience.py +0 -0
  143. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/incremental/__init__.py +0 -0
  144. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/incremental/continue_config.py +0 -0
  145. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/incremental/continue_engine.py +0 -0
  146. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/incremental/time_travel.py +0 -0
  147. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/inference/__init__.py +0 -0
  148. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/inference/comparator.py +0 -0
  149. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/inference/masker.py +0 -0
  150. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/inference/profile_io.py +0 -0
  151. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/inference/profiler.py +0 -0
  152. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/inference/schema_builder.py +0 -0
  153. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/manifests/__init__.py +0 -0
  154. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/manifests/run_manifest.py +0 -0
  155. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/mcp_bridge.py +0 -0
  156. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/observability.py +0 -0
  157. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/output/__init__.py +0 -0
  158. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/output/csv_writer.py +0 -0
  159. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/output/delta_writer.py +0 -0
  160. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/output/fabric_utils.py +0 -0
  161. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/output/pandas_writer.py +0 -0
  162. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/packs/__init__.py +0 -0
  163. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/packs/loader.py +0 -0
  164. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/packs/validator.py +0 -0
  165. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/presets/__init__.py +0 -0
  166. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/presets/builtin.py +0 -0
  167. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/presets/registry.py +0 -0
  168. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/py.typed +0 -0
  169. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/__init__.py +0 -0
  170. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/ddl_parser.py +0 -0
  171. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/dependency.py +0 -0
  172. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/inference/__init__.py +0 -0
  173. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/inference/business_rule_inference.py +0 -0
  174. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/inference/cardinality_inference.py +0 -0
  175. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/inference/column_classifier.py +0 -0
  176. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/inference/correlation_inference.py +0 -0
  177. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/inference/enum_inference.py +0 -0
  178. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/inference/fk_distribution.py +0 -0
  179. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/inference/numeric_inference.py +0 -0
  180. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/inference/table_classifier.py +0 -0
  181. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/inference/temporal_inference.py +0 -0
  182. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/parser.py +0 -0
  183. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/schema/validator.py +0 -0
  184. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/simulation/__init__.py +0 -0
  185. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/simulation/clickstream_patterns.py +0 -0
  186. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/simulation/file_drop.py +0 -0
  187. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/simulation/financial_patterns.py +0 -0
  188. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/simulation/hybrid.py +0 -0
  189. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/simulation/iot_patterns.py +0 -0
  190. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/simulation/operational_log_patterns.py +0 -0
  191. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/simulation/scd2_file_drops.py +0 -0
  192. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/simulation/state_machine.py +0 -0
  193. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/simulation/stream_emit.py +0 -0
  194. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/specs/__init__.py +0 -0
  195. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/specs/gsl_parser.py +0 -0
  196. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/__init__.py +0 -0
  197. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/anomaly.py +0 -0
  198. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/config.py +0 -0
  199. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/envelope.py +0 -0
  200. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/rate_limiter.py +0 -0
  201. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/sinks/__init__.py +0 -0
  202. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/sinks/console_sink.py +0 -0
  203. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/sinks/eventhub_sink.py +0 -0
  204. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/sinks/file_sink.py +0 -0
  205. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/sinks/kafka_sink.py +0 -0
  206. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/stream_writer.py +0 -0
  207. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/streaming/streamer.py +0 -0
  208. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/transform/__init__.py +0 -0
  209. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/transform/cdm_mapper.py +0 -0
  210. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/transform/star_schema.py +0 -0
  211. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/validation/__init__.py +0 -0
  212. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/validation/gates.py +0 -0
  213. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle/validation/quarantine.py +0 -0
  214. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle.egg-info/SOURCES.txt +0 -0
  215. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle.egg-info/dependency_links.txt +0 -0
  216. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle.egg-info/entry_points.txt +0 -0
  217. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle.egg-info/requires.txt +0 -0
  218. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/sqllocks_spindle.egg-info/top_level.txt +0 -0
  219. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_acceptance.py +0 -0
  220. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_adventureworks_integration.py +0 -0
  221. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_anomaly.py +0 -0
  222. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_capital_markets.py +0 -0
  223. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_cdm_mapper.py +0 -0
  224. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_chaos_config.py +0 -0
  225. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_chaos_engine.py +0 -0
  226. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_clickstream_patterns.py +0 -0
  227. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_comparator.py +0 -0
  228. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_composite_domain.py +0 -0
  229. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_composite_presets.py +0 -0
  230. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_credentials.py +0 -0
  231. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_ddl_parser.py +0 -0
  232. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_delta_writer.py +0 -0
  233. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_chaos_integration.py +0 -0
  234. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_cli.py +0 -0
  235. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_composites.py +0 -0
  236. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_credentials.py +0 -0
  237. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_ddl_pipeline.py +0 -0
  238. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_domain_sweep.py +0 -0
  239. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_generation.py +0 -0
  240. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_incremental.py +0 -0
  241. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_inference.py +0 -0
  242. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_masking.py +0 -0
  243. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_notebooks.py +0 -0
  244. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_observability.py +0 -0
  245. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_outputs.py +0 -0
  246. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_scenario_scripts.py +0 -0
  247. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_simulation_systems.py +0 -0
  248. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_strategies.py +0 -0
  249. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_transforms.py +0 -0
  250. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_e2e_validation_gates.py +0 -0
  251. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_education.py +0 -0
  252. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_envelope.py +0 -0
  253. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_eventhouse_writer.py +0 -0
  254. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_fabric_paths.py +0 -0
  255. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_fabric_utils.py +0 -0
  256. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_file_chaos_poison.py +0 -0
  257. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_financial.py +0 -0
  258. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_financial_patterns.py +0 -0
  259. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_gsl_parser.py +0 -0
  260. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_healthcare.py +0 -0
  261. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_hr.py +0 -0
  262. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_incremental.py +0 -0
  263. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_inference.py +0 -0
  264. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_insurance.py +0 -0
  265. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_iot.py +0 -0
  266. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_iot_patterns.py +0 -0
  267. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_manifest_enhancements.py +0 -0
  268. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_manifests.py +0 -0
  269. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_manufacturing.py +0 -0
  270. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_marketing.py +0 -0
  271. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_masker.py +0 -0
  272. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_mcp_bridge.py +0 -0
  273. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_multi_file_manifest.py +0 -0
  274. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_observability.py +0 -0
  275. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_operational_log_patterns.py +0 -0
  276. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_packs.py +0 -0
  277. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_profile_io.py +0 -0
  278. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_publish_cli.py +0 -0
  279. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_real_estate.py +0 -0
  280. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_restatement.py +0 -0
  281. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_retail.py +0 -0
  282. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_scd2_file_drops.py +0 -0
  283. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_scd2_strategy.py +0 -0
  284. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_semantic_model_writer.py +0 -0
  285. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_simulation_file_drop.py +0 -0
  286. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_simulation_hybrid.py +0 -0
  287. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_simulation_stream_emit.py +0 -0
  288. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_smart_inference.py +0 -0
  289. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_sql_database_writer.py +0 -0
  290. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_star_schema.py +0 -0
  291. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_state_machine.py +0 -0
  292. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_strategies.py +0 -0
  293. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_streaming.py +0 -0
  294. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_supply_chain.py +0 -0
  295. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_telecom.py +0 -0
  296. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_time_travel.py +0 -0
  297. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_validation_gates.py +0 -0
  298. {sqllocks_spindle-2.2.2 → sqllocks_spindle-2.2.4}/tests/test_validation_quarantine.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqllocks-spindle
3
- Version: 2.2.2
3
+ Version: 2.2.4
4
4
  Summary: Multi-domain, schema-aware synthetic data generator for Microsoft Fabric
5
5
  Author-email: Jonathan Stewart <jonathan@sqllocks.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sqllocks-spindle"
7
- version = "2.2.2"
7
+ version = "2.2.4"
8
8
  description = "Multi-domain, schema-aware synthetic data generator for Microsoft Fabric"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -1,6 +1,6 @@
1
1
  """Spindle by SQLLocks — Multi-domain synthetic data generator for Microsoft Fabric."""
2
2
 
3
- __version__ = "2.2.2"
3
+ __version__ = "2.2.3"
4
4
 
5
5
  from sqllocks_spindle.engine.generator import Spindle
6
6
  from sqllocks_spindle.domains.retail import RetailDomain
@@ -240,11 +240,20 @@ class WarehouseBulkWriter:
240
240
  if pd.api.types.is_datetime64_ns_dtype(chunk_df[col]):
241
241
  chunk_df[col] = chunk_df[col].astype("datetime64[us]")
242
242
 
243
- # Inside Fabric Notebook — write via notebookutils (no upload needed)
243
+ # Inside Fabric Notebook — write to local temp then copy to OneLake.
244
+ # notebookutils.fs.put() is UTF-8 text only (per Microsoft Learn docs);
245
+ # binary Parquet data must go through fs.cp() from a local file.
244
246
  try:
245
247
  import notebookutils # type: ignore[import-not-found]
246
- parquet_bytes = chunk_df.to_parquet(index=False, engine="pyarrow")
247
- notebookutils.fs.put(remote_path, parquet_bytes, overwrite=True)
248
+ import os as _os
249
+
250
+ local_tmp = tempfile.mktemp(suffix=".parquet")
251
+ try:
252
+ chunk_df.to_parquet(local_tmp, index=False, engine="pyarrow")
253
+ notebookutils.fs.cp(f"file://{local_tmp}", remote_path, recurse=False)
254
+ finally:
255
+ if _os.path.exists(local_tmp):
256
+ _os.unlink(local_tmp)
248
257
  logger.info(
249
258
  "Staged chunk %d for %s on OneLake via notebookutils (%d rows)",
250
259
  chunk_idx, table_name, len(chunk_df),
@@ -144,7 +144,7 @@ class PackRunner:
144
144
 
145
145
  # Record outputs in manifest
146
146
  for table_name, df in gen_result.tables.items():
147
- table_paths = [p for p in files_written if table_name in p]
147
+ table_paths = [p for p in files_written if table_name in str(p)]
148
148
  builder.record_output(
149
149
  table_name=table_name,
150
150
  rows=len(df),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqllocks-spindle
3
- Version: 2.2.2
3
+ Version: 2.2.4
4
4
  Summary: Multi-domain, schema-aware synthetic data generator for Microsoft Fabric
5
5
  Author-email: Jonathan Stewart <jonathan@sqllocks.com>
6
6
  License: MIT