pycarlo 0.12.330__tar.gz → 0.12.332__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 (131) hide show
  1. {pycarlo-0.12.330 → pycarlo-0.12.332}/PKG-INFO +1 -1
  2. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/lib/schema.json +199 -0
  3. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/lib/schema.py +104 -0
  4. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo.egg-info/PKG-INFO +1 -1
  5. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/data/schema_original.py +104 -0
  6. {pycarlo-0.12.330 → pycarlo-0.12.332}/.circleci/README.md +0 -0
  7. {pycarlo-0.12.330 → pycarlo-0.12.332}/.circleci/config.yml +0 -0
  8. {pycarlo-0.12.330 → pycarlo-0.12.332}/.circleci/scripts/clean-generated-types-prs.sh +0 -0
  9. {pycarlo-0.12.330 → pycarlo-0.12.332}/.coveragerc +0 -0
  10. {pycarlo-0.12.330 → pycarlo-0.12.332}/.github/workflows/release.yml +0 -0
  11. {pycarlo-0.12.330 → pycarlo-0.12.332}/.gitignore +0 -0
  12. {pycarlo-0.12.330 → pycarlo-0.12.332}/.pre-commit-config.yaml +0 -0
  13. {pycarlo-0.12.330 → pycarlo-0.12.332}/CONTRIBUTING.md +0 -0
  14. {pycarlo-0.12.330 → pycarlo-0.12.332}/LICENSE +0 -0
  15. {pycarlo-0.12.330 → pycarlo-0.12.332}/Makefile +0 -0
  16. {pycarlo-0.12.330 → pycarlo-0.12.332}/README.md +0 -0
  17. {pycarlo-0.12.330 → pycarlo-0.12.332}/examples/sample_agent_ci_build_script.py +0 -0
  18. {pycarlo-0.12.330 → pycarlo-0.12.332}/examples/sample_circuit_breaker.py +0 -0
  19. {pycarlo-0.12.330 → pycarlo-0.12.332}/examples/sample_ingest_lineage.py +0 -0
  20. {pycarlo-0.12.330 → pycarlo-0.12.332}/examples/sample_ingest_metadata.py +0 -0
  21. {pycarlo-0.12.330 → pycarlo-0.12.332}/examples/sample_ingest_query_logs.py +0 -0
  22. {pycarlo-0.12.330 → pycarlo-0.12.332}/examples/sample_insight_upload.py +0 -0
  23. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/__init__.py +0 -0
  24. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/common/__init__.py +0 -0
  25. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/common/errors.py +0 -0
  26. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/common/files.py +0 -0
  27. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/common/http.py +0 -0
  28. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/common/mcon.py +0 -0
  29. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/common/retries.py +0 -0
  30. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/common/settings.py +0 -0
  31. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/common/utils.py +0 -0
  32. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/core/__init__.py +0 -0
  33. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/core/client.py +0 -0
  34. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/core/endpoint.py +0 -0
  35. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/core/operations.py +0 -0
  36. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/core/session.py +0 -0
  37. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/__init__.py +0 -0
  38. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/agent/__init__.py +0 -0
  39. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/agent/models.py +0 -0
  40. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/agent/queries.py +0 -0
  41. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/agent/service.py +0 -0
  42. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/circuit_breakers/__init__.py +0 -0
  43. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/circuit_breakers/exceptions.py +0 -0
  44. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/circuit_breakers/service.py +0 -0
  45. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/dbt/__init__.py +0 -0
  46. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/dbt/dbt_importer.py +0 -0
  47. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/dbt/queries.py +0 -0
  48. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/exceptions.py +0 -0
  49. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/ingestion/__init__.py +0 -0
  50. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/ingestion/exceptions.py +0 -0
  51. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/ingestion/models.py +0 -0
  52. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/ingestion/service.py +0 -0
  53. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/metadata/__init__.py +0 -0
  54. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/metadata/asset_allow_block_list.py +0 -0
  55. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/metadata/asset_filters_container.py +0 -0
  56. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/metadata/base_allow_block_list.py +0 -0
  57. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/metadata/metadata_allow_block_list.py +0 -0
  58. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/metadata/metadata_filters_container.py +0 -0
  59. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/monitor/__init__.py +0 -0
  60. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/monitor/models.py +0 -0
  61. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/monitor/queries.py +0 -0
  62. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/monitor/service.py +0 -0
  63. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/pii/__init__.py +0 -0
  64. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/pii/constants.py +0 -0
  65. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/pii/pii_filterer.py +0 -0
  66. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/pii/queries.py +0 -0
  67. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/pii/service.py +0 -0
  68. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/user/__init__.py +0 -0
  69. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/user/exceptions.py +0 -0
  70. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/user/models.py +0 -0
  71. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/user/queries.py +0 -0
  72. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/features/user/service.py +0 -0
  73. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/lib/README.md +0 -0
  74. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/lib/__init__.py +0 -0
  75. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo/lib/types.py +0 -0
  76. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo.egg-info/SOURCES.txt +0 -0
  77. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo.egg-info/dependency_links.txt +0 -0
  78. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo.egg-info/requires.txt +0 -0
  79. {pycarlo-0.12.330 → pycarlo-0.12.332}/pycarlo.egg-info/top_level.txt +0 -0
  80. {pycarlo-0.12.330 → pycarlo-0.12.332}/pyproject.toml +0 -0
  81. {pycarlo-0.12.330 → pycarlo-0.12.332}/requirements-ci.txt +0 -0
  82. {pycarlo-0.12.330 → pycarlo-0.12.332}/requirements-dev.txt +0 -0
  83. {pycarlo-0.12.330 → pycarlo-0.12.332}/requirements.txt +0 -0
  84. {pycarlo-0.12.330 → pycarlo-0.12.332}/setup.cfg +0 -0
  85. {pycarlo-0.12.330 → pycarlo-0.12.332}/setup.py +0 -0
  86. {pycarlo-0.12.330 → pycarlo-0.12.332}/test_agent_spans.py +0 -0
  87. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/__init__.py +0 -0
  88. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/common/__init__.py +0 -0
  89. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/common/data.json +0 -0
  90. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/common/test_files.py +0 -0
  91. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/common/test_http.py +0 -0
  92. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/common/test_mcon.py +0 -0
  93. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/common/test_retries.py +0 -0
  94. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/common/test_utils.py +0 -0
  95. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/data/README.md +0 -0
  96. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/__init__.py +0 -0
  97. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/agent/__init__.py +0 -0
  98. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/agent/test_service.py +0 -0
  99. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/circuit_breakers/__init__.py +0 -0
  100. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/circuit_breakers/test_service.py +0 -0
  101. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/dbt/__init__.py +0 -0
  102. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/dbt/sample_logs.txt +0 -0
  103. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/dbt/sample_manifest.json +0 -0
  104. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/dbt/sample_run_results.json +0 -0
  105. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/dbt/test_dbt_importer.py +0 -0
  106. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/ingestion/__init__.py +0 -0
  107. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/ingestion/test_models.py +0 -0
  108. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/ingestion/test_service.py +0 -0
  109. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/metadata/test_asset_filtering.py +0 -0
  110. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/metadata/test_dataset_filtering.py +0 -0
  111. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/monitor/__init__.py +0 -0
  112. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/monitor/test_service.py +0 -0
  113. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/pii/sample_events/sample_md_events_01.json +0 -0
  114. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/pii/sample_events/sample_md_events_02.json +0 -0
  115. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/pii/test_pii_filtering.py +0 -0
  116. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/user/__init__.py +0 -0
  117. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/features/user/test_user_service.py +0 -0
  118. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/lib/test_enum.py +0 -0
  119. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/lib/test_enum_integration.py +0 -0
  120. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/lib/test_schema_generation.py +0 -0
  121. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/test_client.py +0 -0
  122. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/test_forgiving_enums_published.sh +0 -0
  123. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/test_operations.py +0 -0
  124. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/test_retry_decorator.py +0 -0
  125. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/test_session.py +0 -0
  126. {pycarlo-0.12.330 → pycarlo-0.12.332}/tests/verify_forgiving_enums_published.py +0 -0
  127. {pycarlo-0.12.330 → pycarlo-0.12.332}/utils/env.sh +0 -0
  128. {pycarlo-0.12.330 → pycarlo-0.12.332}/utils/generate.py +0 -0
  129. {pycarlo-0.12.330 → pycarlo-0.12.332}/utils/sample.env +0 -0
  130. {pycarlo-0.12.330 → pycarlo-0.12.332}/utils/sanity.py +0 -0
  131. {pycarlo-0.12.330 → pycarlo-0.12.332}/utils/vars.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycarlo
3
- Version: 0.12.330
3
+ Version: 0.12.332
4
4
  Summary: Monte Carlo's Python SDK
5
5
  Home-page: https://www.montecarlodata.com/
6
6
  Author: Monte Carlo Data, Inc
@@ -6449,6 +6449,67 @@
6449
6449
  "ofType": null
6450
6450
  }
6451
6451
  },
6452
+ {
6453
+ "args": [
6454
+ {
6455
+ "defaultValue": null,
6456
+ "description": "SQL query to parse",
6457
+ "name": "query",
6458
+ "type": {
6459
+ "kind": "NON_NULL",
6460
+ "name": null,
6461
+ "ofType": {
6462
+ "kind": "SCALAR",
6463
+ "name": "String",
6464
+ "ofType": null
6465
+ }
6466
+ }
6467
+ },
6468
+ {
6469
+ "defaultValue": null,
6470
+ "description": "Candidate log_types (push resource_type values) to try, 1..15 entries.",
6471
+ "name": "logTypes",
6472
+ "type": {
6473
+ "kind": "NON_NULL",
6474
+ "name": null,
6475
+ "ofType": {
6476
+ "kind": "LIST",
6477
+ "name": null,
6478
+ "ofType": {
6479
+ "kind": "NON_NULL",
6480
+ "name": null,
6481
+ "ofType": {
6482
+ "kind": "SCALAR",
6483
+ "name": "String",
6484
+ "ofType": null
6485
+ }
6486
+ }
6487
+ }
6488
+ }
6489
+ }
6490
+ ],
6491
+ "deprecationReason": null,
6492
+ "description": "(experimental) For each candidate log_type, returns the sources and destination Monte Carlo's SQL parser would extract from the query. Useful for push-ingestion customers comparing extraction across log_types before committing to one for POST /ingest/v1/querylogs \u2014 pick the one whose lineage matches your real data flow. The alias 'generic' maps to the transactional-db dialect for warehouses that do not have a dedicated parser. Parser behavior mirrors production push ingestion: Rust SQL parser first, Java Presto parser fallback on Rust error or timeout. So the lineage shown here is a faithful preview of what downstream OpenSearch will index for the same payload \u2014 not a dialect-strictness check. If every log_type returns the same lineage for a query, that's genuine 'any of these will work' news; if they diverge, you pick the one whose extraction matches your intent. Scope note: this is a pre-decision discovery tool. It does not perform MCON resolution \u2014 use ``parseQuery`` with a chosen ``resourceId`` for that, once a log_type has been picked.",
6493
+ "isDeprecated": false,
6494
+ "name": "parseQueryForLogTypes",
6495
+ "type": {
6496
+ "kind": "NON_NULL",
6497
+ "name": null,
6498
+ "ofType": {
6499
+ "kind": "LIST",
6500
+ "name": null,
6501
+ "ofType": {
6502
+ "kind": "NON_NULL",
6503
+ "name": null,
6504
+ "ofType": {
6505
+ "kind": "OBJECT",
6506
+ "name": "LogTypeParseResult",
6507
+ "ofType": null
6508
+ }
6509
+ }
6510
+ }
6511
+ }
6512
+ },
6452
6513
  {
6453
6514
  "args": [
6454
6515
  {
@@ -127672,6 +127733,101 @@
127672
127733
  "name": "SqlParsedTable",
127673
127734
  "possibleTypes": null
127674
127735
  },
127736
+ {
127737
+ "description": null,
127738
+ "enumValues": null,
127739
+ "fields": [
127740
+ {
127741
+ "args": [],
127742
+ "deprecationReason": null,
127743
+ "description": "The candidate log_type this result corresponds to, echoed from the input (e.g. 'snowflake', 'bigquery', 'generic').",
127744
+ "isDeprecated": false,
127745
+ "name": "logType",
127746
+ "type": {
127747
+ "kind": "NON_NULL",
127748
+ "name": null,
127749
+ "ofType": {
127750
+ "kind": "SCALAR",
127751
+ "name": "String",
127752
+ "ofType": null
127753
+ }
127754
+ }
127755
+ },
127756
+ {
127757
+ "args": [],
127758
+ "deprecationReason": null,
127759
+ "description": "Parsed query sources for this log_type. ``mcon`` is always null here \u2014 this API does not perform table resolution. Call ``parseQuery`` with a chosen ``resourceId`` once the right dialect has been identified to get MCONs.",
127760
+ "isDeprecated": false,
127761
+ "name": "sources",
127762
+ "type": {
127763
+ "kind": "LIST",
127764
+ "name": null,
127765
+ "ofType": {
127766
+ "kind": "NON_NULL",
127767
+ "name": null,
127768
+ "ofType": {
127769
+ "kind": "OBJECT",
127770
+ "name": "SqlParsedTable",
127771
+ "ofType": null
127772
+ }
127773
+ }
127774
+ }
127775
+ },
127776
+ {
127777
+ "args": [],
127778
+ "deprecationReason": null,
127779
+ "description": "Parsed query destination for this log_type. ``mcon`` is always null here \u2014 see the note on ``sources``.",
127780
+ "isDeprecated": false,
127781
+ "name": "destination",
127782
+ "type": {
127783
+ "kind": "OBJECT",
127784
+ "name": "SqlParsedTable",
127785
+ "ofType": null
127786
+ }
127787
+ },
127788
+ {
127789
+ "args": [],
127790
+ "deprecationReason": null,
127791
+ "description": "SQL parser errors for this log_type",
127792
+ "isDeprecated": false,
127793
+ "name": "errors",
127794
+ "type": {
127795
+ "kind": "LIST",
127796
+ "name": null,
127797
+ "ofType": {
127798
+ "kind": "NON_NULL",
127799
+ "name": null,
127800
+ "ofType": {
127801
+ "kind": "SCALAR",
127802
+ "name": "String",
127803
+ "ofType": null
127804
+ }
127805
+ }
127806
+ }
127807
+ },
127808
+ {
127809
+ "args": [],
127810
+ "deprecationReason": null,
127811
+ "description": "True when the parser returned no errors and at least one source or a destination was parsed for this log_type.",
127812
+ "isDeprecated": false,
127813
+ "name": "success",
127814
+ "type": {
127815
+ "kind": "NON_NULL",
127816
+ "name": null,
127817
+ "ofType": {
127818
+ "kind": "SCALAR",
127819
+ "name": "Boolean",
127820
+ "ofType": null
127821
+ }
127822
+ }
127823
+ }
127824
+ ],
127825
+ "inputFields": null,
127826
+ "interfaces": [],
127827
+ "kind": "OBJECT",
127828
+ "name": "LogTypeParseResult",
127829
+ "possibleTypes": null
127830
+ },
127675
127831
  {
127676
127832
  "description": "Describes the result of pinging a data collector.",
127677
127833
  "enumValues": null,
@@ -155950,6 +156106,16 @@
155950
156106
  "ofType": null
155951
156107
  }
155952
156108
  },
156109
+ {
156110
+ "defaultValue": null,
156111
+ "description": "Return only findings whose parent finding has this UUID.",
156112
+ "name": "parentFindingUuid",
156113
+ "type": {
156114
+ "kind": "SCALAR",
156115
+ "name": "UUID",
156116
+ "ofType": null
156117
+ }
156118
+ },
155953
156119
  {
155954
156120
  "defaultValue": null,
155955
156121
  "description": null,
@@ -155989,6 +156155,16 @@
155989
156155
  "name": "DateTime",
155990
156156
  "ofType": null
155991
156157
  }
156158
+ },
156159
+ {
156160
+ "defaultValue": null,
156161
+ "description": "Order of results by detection_time. Defaults to DESC (newest first).",
156162
+ "name": "detectionTimeOrder",
156163
+ "type": {
156164
+ "kind": "ENUM",
156165
+ "name": "FindingSortDirection",
156166
+ "ofType": null
156167
+ }
155992
156168
  }
155993
156169
  ],
155994
156170
  "interfaces": null,
@@ -155996,6 +156172,29 @@
155996
156172
  "name": "FindingFilterInput",
155997
156173
  "possibleTypes": null
155998
156174
  },
156175
+ {
156176
+ "description": null,
156177
+ "enumValues": [
156178
+ {
156179
+ "deprecationReason": null,
156180
+ "description": null,
156181
+ "isDeprecated": false,
156182
+ "name": "ASC"
156183
+ },
156184
+ {
156185
+ "deprecationReason": null,
156186
+ "description": null,
156187
+ "isDeprecated": false,
156188
+ "name": "DESC"
156189
+ }
156190
+ ],
156191
+ "fields": null,
156192
+ "inputFields": null,
156193
+ "interfaces": null,
156194
+ "kind": "ENUM",
156195
+ "name": "FindingSortDirection",
156196
+ "possibleTypes": null
156197
+ },
155999
156198
  {
156000
156199
  "description": null,
156001
156200
  "enumValues": null,
@@ -3487,6 +3487,17 @@ class FindingSeverity(pycarlo.lib.types.Enum):
3487
3487
  __choices__ = ("CRITICAL", "INFO", "WARNING")
3488
3488
 
3489
3489
 
3490
+ class FindingSortDirection(pycarlo.lib.types.Enum):
3491
+ """Enumeration Choices:
3492
+
3493
+ * `ASC`None
3494
+ * `DESC`None
3495
+ """
3496
+
3497
+ __schema__ = schema
3498
+ __choices__ = ("ASC", "DESC")
3499
+
3500
+
3490
3501
  class FindingStatus(pycarlo.lib.types.Enum):
3491
3502
  """Enumeration Choices:
3492
3503
 
@@ -9619,10 +9630,12 @@ class FindingFilterInput(sgqlc.types.Input):
9619
9630
  "agentic_scope_uuids",
9620
9631
  "use_cases",
9621
9632
  "asset_mcon",
9633
+ "parent_finding_uuid",
9622
9634
  "search_query",
9623
9635
  "needs_attention",
9624
9636
  "detection_time_start",
9625
9637
  "detection_time_end",
9638
+ "detection_time_order",
9626
9639
  )
9627
9640
  finding_types = sgqlc.types.Field(
9628
9641
  sgqlc.types.list_of(sgqlc.types.non_null(FindingType)), graphql_name="findingTypes"
@@ -9650,6 +9663,9 @@ class FindingFilterInput(sgqlc.types.Input):
9650
9663
 
9651
9664
  asset_mcon = sgqlc.types.Field(String, graphql_name="assetMcon")
9652
9665
 
9666
+ parent_finding_uuid = sgqlc.types.Field(UUID, graphql_name="parentFindingUuid")
9667
+ """Return only findings whose parent finding has this UUID."""
9668
+
9653
9669
  search_query = sgqlc.types.Field(String, graphql_name="searchQuery")
9654
9670
 
9655
9671
  needs_attention = sgqlc.types.Field(Boolean, graphql_name="needsAttention")
@@ -9658,6 +9674,13 @@ class FindingFilterInput(sgqlc.types.Input):
9658
9674
 
9659
9675
  detection_time_end = sgqlc.types.Field(DateTime, graphql_name="detectionTimeEnd")
9660
9676
 
9677
+ detection_time_order = sgqlc.types.Field(
9678
+ FindingSortDirection, graphql_name="detectionTimeOrder"
9679
+ )
9680
+ """Order of results by detection_time. Defaults to DESC (newest
9681
+ first).
9682
+ """
9683
+
9661
9684
 
9662
9685
  class FreshnessAutomatedAlertConditionInput(sgqlc.types.Input):
9663
9686
  __schema__ = schema
@@ -31203,6 +31226,39 @@ class ListTagsOutput(sgqlc.types.Type):
31203
31226
  """Tags list."""
31204
31227
 
31205
31228
 
31229
+ class LogTypeParseResult(sgqlc.types.Type):
31230
+ __schema__ = schema
31231
+ __field_names__ = ("log_type", "sources", "destination", "errors", "success")
31232
+ log_type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="logType")
31233
+ """The candidate log_type this result corresponds to, echoed from the
31234
+ input (e.g. 'snowflake', 'bigquery', 'generic').
31235
+ """
31236
+
31237
+ sources = sgqlc.types.Field(
31238
+ sgqlc.types.list_of(sgqlc.types.non_null("SqlParsedTable")), graphql_name="sources"
31239
+ )
31240
+ """Parsed query sources for this log_type. ``mcon`` is always null
31241
+ here — this API does not perform table resolution. Call
31242
+ ``parseQuery`` with a chosen ``resourceId`` once the right dialect
31243
+ has been identified to get MCONs.
31244
+ """
31245
+
31246
+ destination = sgqlc.types.Field("SqlParsedTable", graphql_name="destination")
31247
+ """Parsed query destination for this log_type. ``mcon`` is always
31248
+ null here — see the note on ``sources``.
31249
+ """
31250
+
31251
+ errors = sgqlc.types.Field(
31252
+ sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="errors"
31253
+ )
31254
+ """SQL parser errors for this log_type"""
31255
+
31256
+ success = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="success")
31257
+ """True when the parser returned no errors and at least one source or
31258
+ a destination was parsed for this log_type.
31259
+ """
31260
+
31261
+
31206
31262
  class LoginDetails(sgqlc.types.Type):
31207
31263
  """Login information"""
31208
31264
 
@@ -56328,6 +56384,7 @@ class Query(sgqlc.types.Type):
56328
56384
  "get_domains_for_mcons",
56329
56385
  "get_data_product_dry_run_counts",
56330
56386
  "parse_query",
56387
+ "parse_query_for_log_types",
56331
56388
  "ping_data_collector",
56332
56389
  "get_notebook",
56333
56390
  "get_notebooks",
@@ -60420,6 +60477,53 @@ class Query(sgqlc.types.Type):
60420
60477
  * `schema` (`String`): Name of schema to use for table resolution
60421
60478
  """
60422
60479
 
60480
+ parse_query_for_log_types = sgqlc.types.Field(
60481
+ sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(LogTypeParseResult))),
60482
+ graphql_name="parseQueryForLogTypes",
60483
+ args=sgqlc.types.ArgDict(
60484
+ (
60485
+ (
60486
+ "query",
60487
+ sgqlc.types.Arg(
60488
+ sgqlc.types.non_null(String), graphql_name="query", default=None
60489
+ ),
60490
+ ),
60491
+ (
60492
+ "log_types",
60493
+ sgqlc.types.Arg(
60494
+ sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))),
60495
+ graphql_name="logTypes",
60496
+ default=None,
60497
+ ),
60498
+ ),
60499
+ )
60500
+ ),
60501
+ )
60502
+ """(experimental) For each candidate log_type, returns the sources
60503
+ and destination Monte Carlo's SQL parser would extract from the
60504
+ query. Useful for push-ingestion customers comparing extraction
60505
+ across log_types before committing to one for POST
60506
+ /ingest/v1/querylogs — pick the one whose lineage matches your
60507
+ real data flow. The alias 'generic' maps to the transactional-db
60508
+ dialect for warehouses that do not have a dedicated parser. Parser
60509
+ behavior mirrors production push ingestion: Rust SQL parser first,
60510
+ Java Presto parser fallback on Rust error or timeout. So the
60511
+ lineage shown here is a faithful preview of what downstream
60512
+ OpenSearch will index for the same payload — not a dialect-
60513
+ strictness check. If every log_type returns the same lineage for a
60514
+ query, that's genuine 'any of these will work' news; if they
60515
+ diverge, you pick the one whose extraction matches your intent.
60516
+ Scope note: this is a pre-decision discovery tool. It does not
60517
+ perform MCON resolution — use ``parseQuery`` with a chosen
60518
+ ``resourceId`` for that, once a log_type has been picked.
60519
+
60520
+ Arguments:
60521
+
60522
+ * `query` (`String!`): SQL query to parse
60523
+ * `log_types` (`[String!]!`): Candidate log_types (push
60524
+ resource_type values) to try, 1..15 entries.
60525
+ """
60526
+
60423
60527
  ping_data_collector = sgqlc.types.Field(
60424
60528
  DcPingResponse,
60425
60529
  graphql_name="pingDataCollector",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycarlo
3
- Version: 0.12.330
3
+ Version: 0.12.332
4
4
  Summary: Monte Carlo's Python SDK
5
5
  Home-page: https://www.montecarlodata.com/
6
6
  Author: Monte Carlo Data, Inc
@@ -3486,6 +3486,17 @@ class FindingSeverity(sgqlc.types.Enum):
3486
3486
  __choices__ = ("CRITICAL", "INFO", "WARNING")
3487
3487
 
3488
3488
 
3489
+ class FindingSortDirection(sgqlc.types.Enum):
3490
+ """Enumeration Choices:
3491
+
3492
+ * `ASC`None
3493
+ * `DESC`None
3494
+ """
3495
+
3496
+ __schema__ = schema
3497
+ __choices__ = ("ASC", "DESC")
3498
+
3499
+
3489
3500
  class FindingStatus(sgqlc.types.Enum):
3490
3501
  """Enumeration Choices:
3491
3502
 
@@ -9618,10 +9629,12 @@ class FindingFilterInput(sgqlc.types.Input):
9618
9629
  "agentic_scope_uuids",
9619
9630
  "use_cases",
9620
9631
  "asset_mcon",
9632
+ "parent_finding_uuid",
9621
9633
  "search_query",
9622
9634
  "needs_attention",
9623
9635
  "detection_time_start",
9624
9636
  "detection_time_end",
9637
+ "detection_time_order",
9625
9638
  )
9626
9639
  finding_types = sgqlc.types.Field(
9627
9640
  sgqlc.types.list_of(sgqlc.types.non_null(FindingType)), graphql_name="findingTypes"
@@ -9649,6 +9662,9 @@ class FindingFilterInput(sgqlc.types.Input):
9649
9662
 
9650
9663
  asset_mcon = sgqlc.types.Field(String, graphql_name="assetMcon")
9651
9664
 
9665
+ parent_finding_uuid = sgqlc.types.Field(UUID, graphql_name="parentFindingUuid")
9666
+ """Return only findings whose parent finding has this UUID."""
9667
+
9652
9668
  search_query = sgqlc.types.Field(String, graphql_name="searchQuery")
9653
9669
 
9654
9670
  needs_attention = sgqlc.types.Field(Boolean, graphql_name="needsAttention")
@@ -9657,6 +9673,13 @@ class FindingFilterInput(sgqlc.types.Input):
9657
9673
 
9658
9674
  detection_time_end = sgqlc.types.Field(DateTime, graphql_name="detectionTimeEnd")
9659
9675
 
9676
+ detection_time_order = sgqlc.types.Field(
9677
+ FindingSortDirection, graphql_name="detectionTimeOrder"
9678
+ )
9679
+ """Order of results by detection_time. Defaults to DESC (newest
9680
+ first).
9681
+ """
9682
+
9660
9683
 
9661
9684
  class FreshnessAutomatedAlertConditionInput(sgqlc.types.Input):
9662
9685
  __schema__ = schema
@@ -31202,6 +31225,39 @@ class ListTagsOutput(sgqlc.types.Type):
31202
31225
  """Tags list."""
31203
31226
 
31204
31227
 
31228
+ class LogTypeParseResult(sgqlc.types.Type):
31229
+ __schema__ = schema
31230
+ __field_names__ = ("log_type", "sources", "destination", "errors", "success")
31231
+ log_type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="logType")
31232
+ """The candidate log_type this result corresponds to, echoed from the
31233
+ input (e.g. 'snowflake', 'bigquery', 'generic').
31234
+ """
31235
+
31236
+ sources = sgqlc.types.Field(
31237
+ sgqlc.types.list_of(sgqlc.types.non_null("SqlParsedTable")), graphql_name="sources"
31238
+ )
31239
+ """Parsed query sources for this log_type. ``mcon`` is always null
31240
+ here — this API does not perform table resolution. Call
31241
+ ``parseQuery`` with a chosen ``resourceId`` once the right dialect
31242
+ has been identified to get MCONs.
31243
+ """
31244
+
31245
+ destination = sgqlc.types.Field("SqlParsedTable", graphql_name="destination")
31246
+ """Parsed query destination for this log_type. ``mcon`` is always
31247
+ null here — see the note on ``sources``.
31248
+ """
31249
+
31250
+ errors = sgqlc.types.Field(
31251
+ sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="errors"
31252
+ )
31253
+ """SQL parser errors for this log_type"""
31254
+
31255
+ success = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="success")
31256
+ """True when the parser returned no errors and at least one source or
31257
+ a destination was parsed for this log_type.
31258
+ """
31259
+
31260
+
31205
31261
  class LoginDetails(sgqlc.types.Type):
31206
31262
  """Login information"""
31207
31263
 
@@ -56327,6 +56383,7 @@ class Query(sgqlc.types.Type):
56327
56383
  "get_domains_for_mcons",
56328
56384
  "get_data_product_dry_run_counts",
56329
56385
  "parse_query",
56386
+ "parse_query_for_log_types",
56330
56387
  "ping_data_collector",
56331
56388
  "get_notebook",
56332
56389
  "get_notebooks",
@@ -60419,6 +60476,53 @@ class Query(sgqlc.types.Type):
60419
60476
  * `schema` (`String`): Name of schema to use for table resolution
60420
60477
  """
60421
60478
 
60479
+ parse_query_for_log_types = sgqlc.types.Field(
60480
+ sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(LogTypeParseResult))),
60481
+ graphql_name="parseQueryForLogTypes",
60482
+ args=sgqlc.types.ArgDict(
60483
+ (
60484
+ (
60485
+ "query",
60486
+ sgqlc.types.Arg(
60487
+ sgqlc.types.non_null(String), graphql_name="query", default=None
60488
+ ),
60489
+ ),
60490
+ (
60491
+ "log_types",
60492
+ sgqlc.types.Arg(
60493
+ sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))),
60494
+ graphql_name="logTypes",
60495
+ default=None,
60496
+ ),
60497
+ ),
60498
+ )
60499
+ ),
60500
+ )
60501
+ """(experimental) For each candidate log_type, returns the sources
60502
+ and destination Monte Carlo's SQL parser would extract from the
60503
+ query. Useful for push-ingestion customers comparing extraction
60504
+ across log_types before committing to one for POST
60505
+ /ingest/v1/querylogs — pick the one whose lineage matches your
60506
+ real data flow. The alias 'generic' maps to the transactional-db
60507
+ dialect for warehouses that do not have a dedicated parser. Parser
60508
+ behavior mirrors production push ingestion: Rust SQL parser first,
60509
+ Java Presto parser fallback on Rust error or timeout. So the
60510
+ lineage shown here is a faithful preview of what downstream
60511
+ OpenSearch will index for the same payload — not a dialect-
60512
+ strictness check. If every log_type returns the same lineage for a
60513
+ query, that's genuine 'any of these will work' news; if they
60514
+ diverge, you pick the one whose extraction matches your intent.
60515
+ Scope note: this is a pre-decision discovery tool. It does not
60516
+ perform MCON resolution — use ``parseQuery`` with a chosen
60517
+ ``resourceId`` for that, once a log_type has been picked.
60518
+
60519
+ Arguments:
60520
+
60521
+ * `query` (`String!`): SQL query to parse
60522
+ * `log_types` (`[String!]!`): Candidate log_types (push
60523
+ resource_type values) to try, 1..15 entries.
60524
+ """
60525
+
60422
60526
  ping_data_collector = sgqlc.types.Field(
60423
60527
  DcPingResponse,
60424
60528
  graphql_name="pingDataCollector",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes