artesian-sdk 4.2.2.dev19__tar.gz → 4.2.3b2.dev54__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 (128) hide show
  1. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.github/workflows/dependency-review.yaml +2 -2
  2. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.github/workflows/python-tests.yml +32 -15
  3. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/PKG-INFO +159 -29
  4. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/README.md +158 -28
  5. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestActual.py +1 -1
  6. artesian_sdk-4.2.3b2.dev54/samples/TestDerivedCfgTransform.py +101 -0
  7. artesian_sdk-4.2.3b2.dev54/samples/TestDerivedTransformQueryValidation.py +37 -0
  8. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/GMEPublicOfferQuery.py +7 -0
  9. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/Market.py +1 -0
  10. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/Status.py +1 -0
  11. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/UnitType.py +2 -0
  12. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/MarketDataService.py +49 -0
  13. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/DerivedCfg.py +2 -1
  14. artesian_sdk-4.2.3b2.dev54/src/Artesian/MarketData/_Dto/DerivedTransformQueryValidation.py +34 -0
  15. artesian_sdk-4.2.3b2.dev54/src/Artesian/MarketData/_Dto/DerivedTransformQueryValidationResponse.py +30 -0
  16. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/MarketDataEntityInput.py +25 -1
  17. artesian_sdk-4.2.3b2.dev54/src/Artesian/MarketData/_Dto/TimeSerieData.py +22 -0
  18. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/__init__.py +2 -0
  19. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/DerivedAlgorithm.py +1 -0
  20. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/_ClientsExecutor/Client.py +2 -2
  21. artesian_sdk-4.2.3b2.dev54/src/Artesian/_version.py +24 -0
  22. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/artesian_sdk.egg-info/PKG-INFO +159 -29
  23. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/artesian_sdk.egg-info/SOURCES.txt +7 -0
  24. artesian_sdk-4.2.3b2.dev54/src/artesian_sdk.egg-info/scm_file_list.json +121 -0
  25. artesian_sdk-4.2.3b2.dev54/src/artesian_sdk.egg-info/scm_version.json +8 -0
  26. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestGMEPO.py +17 -2
  27. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestMarketDataService.py +109 -0
  28. artesian_sdk-4.2.2.dev19/src/Artesian/_version.py +0 -34
  29. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.flake8 +0 -0
  30. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.github/dependabot.yml +0 -0
  31. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.gitignore +0 -0
  32. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.vscode/extensions.json +0 -0
  33. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.vscode/launch.json +0 -0
  34. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.vscode/settings.json +0 -0
  35. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/CODEOWNERS +0 -0
  36. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/CONTRIBUTING.md +0 -0
  37. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/LICENSE +0 -0
  38. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/pyproject.toml +0 -0
  39. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/renovate.json +0 -0
  40. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestAuction.py +0 -0
  41. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestBidAsk.py +0 -0
  42. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestDerivedCfg.py +0 -0
  43. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestGMEOffers.py +0 -0
  44. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestMarketDataService.py +0 -0
  45. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestMas.py +0 -0
  46. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestSearchFacet.py +0 -0
  47. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestVersioned.py +0 -0
  48. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndDeleteActual.py +0 -0
  49. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndDeleteAuction.py +0 -0
  50. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndDeleteBidAsk.py +0 -0
  51. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndDeleteMas.py +0 -0
  52. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndDeleteVersioned.py +0 -0
  53. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndQueryActual.py +0 -0
  54. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndQueryAuction.py +0 -0
  55. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndQueryBidAsk.py +0 -0
  56. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndQueryMas.py +0 -0
  57. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/setup.cfg +0 -0
  58. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/.gitignore +0 -0
  59. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/ArtesianConfig.py +0 -0
  60. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/ArtesianPolicyConfig.py +0 -0
  61. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Exceptions.py +0 -0
  62. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/ExtractionRangeConfig.py +0 -0
  63. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/GMEPublicOfferQueryParameters.py +0 -0
  64. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/GMEPublicOfferService.py +0 -0
  65. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/BaType.py +0 -0
  66. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/GenerationType.py +0 -0
  67. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/Purpose.py +0 -0
  68. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/Scope.py +0 -0
  69. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/Zone.py +0 -0
  70. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/__init__.py +0 -0
  71. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/__init__.py +0 -0
  72. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Granularity.py +0 -0
  73. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/CommonUnitOfMeasure.py +0 -0
  74. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/ArtesianMetadataFacet.py +0 -0
  75. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/ArtesianSearchResults.py +0 -0
  76. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/CheckConversionResult.py +0 -0
  77. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/CurveRangeEntity.py +0 -0
  78. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/DeleteData.py +0 -0
  79. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/MarketDataEntityOutput.py +0 -0
  80. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/MarketDataIdentifier.py +0 -0
  81. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/PagedResult.py +0 -0
  82. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/UnitOfMeasure.py +0 -0
  83. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/UpsertData.py +0 -0
  84. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/AggregationRule.py +0 -0
  85. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/ArtesianMetadataFacetType.py +0 -0
  86. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/MarketDataType.py +0 -0
  87. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/UpsertMode.py +0 -0
  88. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/__init__.py +0 -0
  89. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/__init__.py +0 -0
  90. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/ActualQuery.py +0 -0
  91. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/AuctionQuery.py +0 -0
  92. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/BidAskQuery.py +0 -0
  93. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/DefaultPartitionStrategy.py +0 -0
  94. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/MasQuery.py +0 -0
  95. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/QueryService.py +0 -0
  96. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/RelativeInterval.py +0 -0
  97. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/VersionedQuery.py +0 -0
  98. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_Query.py +0 -0
  99. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/ActualQueryParameters.py +0 -0
  100. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/AuctionQueryParameters.py +0 -0
  101. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/BidAskQueryParameters.py +0 -0
  102. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/ExtractionRangeConfig.py +0 -0
  103. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/ExtractionRangeType.py +0 -0
  104. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/MasQueryParameters.py +0 -0
  105. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/MostRecentSelectionConfig.py +0 -0
  106. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/QueryParameters.py +0 -0
  107. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/VersionSelectionConfig.py +0 -0
  108. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/VersionSelectionType.py +0 -0
  109. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/VersionedQueryParameters.py +0 -0
  110. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/VersionsRangeSelectionConfig.py +0 -0
  111. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/__init__.py +0 -0
  112. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/__init__.py +0 -0
  113. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/_ClientsExecutor/ArtesianJsonSerializer.py +0 -0
  114. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/_ClientsExecutor/RequestExecutor.py +0 -0
  115. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/_ClientsExecutor/__init__.py +0 -0
  116. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/__init__.py +0 -0
  117. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/artesian_sdk.egg-info/dependency_links.txt +0 -0
  118. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/artesian_sdk.egg-info/requires.txt +0 -0
  119. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/artesian_sdk.egg-info/top_level.txt +0 -0
  120. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestActual.py +0 -0
  121. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestBidAsk.py +0 -0
  122. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestClientErrorHandling.py +0 -0
  123. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestMarketDataDeleteData.py +0 -0
  124. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestMarketDataUpsertData.py +0 -0
  125. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestMas.py +0 -0
  126. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestVersioned.py +0 -0
  127. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/__init__.py +0 -0
  128. {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/helpers.py +0 -0
@@ -9,9 +9,9 @@ jobs:
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
11
  - name: 'Checkout Repository'
12
- uses: actions/checkout@v5
12
+ uses: actions/checkout@v7
13
13
  - name: 'Dependency Review'
14
- uses: actions/dependency-review-action@v4
14
+ uses: actions/dependency-review-action@v5.0.0
15
15
  with:
16
16
  # Use comma-separated names to pass list arguments:
17
17
  allow-licenses: MIT,Apache-2.0
@@ -12,6 +12,32 @@ on:
12
12
  branches: [master]
13
13
 
14
14
  jobs:
15
+ pyright:
16
+ name: pyright
17
+ runs-on: ubuntu-latest
18
+
19
+ steps:
20
+ - uses: actions/checkout@v7
21
+
22
+ - name: Set up Python 3.11
23
+ uses: actions/setup-python@v7
24
+ with:
25
+ python-version: "3.11"
26
+
27
+ - name: Install dependencies
28
+ run: |
29
+ python -m pip install --upgrade pip
30
+ pip install -e ".[dev]"
31
+
32
+ - name: Run Pyright
33
+ uses: jordemort/action-pyright@v1
34
+ with:
35
+ github_token: ${{ secrets.GITHUB_TOKEN }}
36
+ reporter: github-check
37
+ lib:
38
+ level: warning
39
+ filter_mode: file
40
+
15
41
  build:
16
42
  runs-on: ${{ matrix.os }}
17
43
 
@@ -21,9 +47,9 @@ jobs:
21
47
  os: ["ubuntu-latest", "windows-latest", "macos-latest"]
22
48
 
23
49
  steps:
24
- - uses: actions/checkout@v5
50
+ - uses: actions/checkout@v7
25
51
  - name: Set up Python ${{ matrix.python-version }}
26
- uses: actions/setup-python@v6
52
+ uses: actions/setup-python@v7
27
53
  with:
28
54
  python-version: ${{ matrix.python-version }}
29
55
  - name: Install dependencies
@@ -35,21 +61,12 @@ jobs:
35
61
  run: |
36
62
  flake8 .
37
63
 
38
- - name: Run Pyright
39
- uses: jordemort/action-pyright@v1
40
- with:
41
- github_token: ${{ secrets.GITHUB_TOKEN }}
42
- reporter: github-check
43
- lib:
44
- level: warning
45
- filter_mode: file
46
-
47
64
  - name: Test Pytest
48
65
  run: |
49
66
  pytest --junitxml=junit/test-results-${{ matrix.python-version }}-${{ matrix.os }}.xml
50
67
 
51
68
  - name: Upload pytest test results
52
- uses: actions/upload-artifact@v5
69
+ uses: actions/upload-artifact@v7
53
70
  with:
54
71
  name: pytest-results-${{ matrix.python-version }}-${{ matrix.os }}
55
72
  path: junit/test-results-${{ matrix.python-version }}-${{ matrix.os }}.xml
@@ -59,16 +76,16 @@ jobs:
59
76
  publish:
60
77
  if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v'))
61
78
  runs-on: ubuntu-latest
62
- needs: build
79
+ needs: [build, pyright]
63
80
  env:
64
81
  python-version: "3.11"
65
82
 
66
83
  steps:
67
- - uses: actions/checkout@v5
84
+ - uses: actions/checkout@v7
68
85
  with:
69
86
  fetch-depth: 0
70
87
  - name: Set up Python ${{ env.python-version }}
71
- uses: actions/setup-python@v6
88
+ uses: actions/setup-python@v7
72
89
  with:
73
90
  python-version: ${{ env.python-version }}
74
91
  - name: Install dependencies
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: artesian-sdk
3
- Version: 4.2.2.dev19
3
+ Version: 4.2.3b2.dev54
4
4
  Summary: Library provides read access to the Artesian API
5
5
  Author-email: ARK Lab <arklab@ark-energy.eu>
6
6
  Maintainer-email: ARK Lab <arklab@ark-energy.eu>
@@ -466,23 +466,53 @@ res = mds.searchFacet(page, pageSize, searchText, filters, sorts, doNotLoadAddit
466
466
 
467
467
  Artesian support Query over GME Public Offers which comes in a custom and dedicated format.
468
468
 
469
+ Note (performance):
470
+ GME Public Offer data is partitioned by date, offerType, status, and market. Requesting very narrow subsets (for example a single status or offerType in several separate requests) does not improve performance and can cause the same data to be fetched multiple times.
471
+ For this reason, the examples below:
472
+ • Use a large page size so that all data for a given (date, market, filters) is typically returned in a single page.
473
+ • Loop over markets explicitly to cover all required markets without redundant fetches.
474
+
469
475
  ### Extract GME Public Offer
470
476
 
471
477
  ```Python
472
478
  from Artesian.GMEPublicOffers import GMEPublicOfferService, Market, Purpose, Status, Zone, Scope, UnitType, GenerationType, BAType
473
479
 
474
- qs = GMEPublicOfferService(cfg)
480
+ /* your Artesian configuration */;
481
+
482
+ var _cfg = new ArtesianServiceConfig(
483
+ new Uri("https://arkive.artesian.cloud/{TENANT_NAME}/"),
484
+ your_API_Key);
485
+
486
+ qs = GMEPublicOfferService(_cfg)
487
+
488
+ # Large page size: goal is to get all data for the given filters in one page
489
+ PAGE_SIZE = 250000
490
+
491
+ # List of markets to cover. Extend as needed for your use case.
492
+ markets = [
493
+ Market.MGP,
494
+ # Market.MSD,
495
+ # Market.MIT,
496
+ ]
475
497
 
476
- data = qs.createQuery() \
498
+ all_data = []
499
+
500
+ for market in markets:
501
+
502
+ data = (
503
+ qs.createQuery() \
477
504
  .forDate("2020-04-01") \
478
505
  .forMarket([Market.MGP]) \
479
506
  .forStatus(Status.ACC) \
480
507
  .forPurpose(Purpose.BID) \
481
508
  .forZone([Zone.NORD]) \
482
- .withPagination(1,100) \
509
+ .withPagination(1,PAGE_SIZE) \
483
510
  .execute()
511
+ )
512
+ print(f"Fetched {len(data)} offers for market {market}")
513
+ all_data.extend(data)
484
514
 
485
- print(data)
515
+ print(f"Total offers fetched: {len(all_data)}")
486
516
  ```
487
517
 
488
518
  To construct a GME Public Offer Extraction the following must be provided.
@@ -733,6 +763,76 @@ Extraction options for GME Public Offer queries.
733
763
  .withAggregationRule(AggregationRule.SumAndDivide)
734
764
  ```
735
765
 
766
+ ### DerivedTransform: Query Validation
767
+
768
+ Use the `DerivedTransformQueryValidation` to validate and execute a derived transform query against a sample TimeSerieData.
769
+
770
+ ```Python
771
+ from Artesian.MarketData import MarketDataService
772
+ from Artesian.MarketData._Dto.DerivedTransformQueryValidation import DerivedTransformQueryValidation
773
+ from Artesian.MarketData._Dto.TimeSerieData import TimeSerieData
774
+ from Artesian import MarketDataType
775
+ from datetime import datetime
776
+
777
+ mds = MarketDataService(cfg)
778
+
779
+ request = DerivedTransformQueryValidation(
780
+ data=TimeSerieData(
781
+ rows=[
782
+ (datetime(2018, 10, 1, 0, 0), 100),
783
+ (datetime(2018, 10, 1, 1, 0), 100)
784
+ ],
785
+ type=MarketDataType.ActualTimeSerie,
786
+ ),
787
+ transform="SELECT Time, (Value + 1) as Value FROM $table"
788
+ )
789
+
790
+ derivedTransformResponse = mds.derivedTransformQueryValidation(request)
791
+ ```
792
+
793
+ #### Available Columns
794
+
795
+ | Column | Type |
796
+ | ------ | -------- |
797
+ | Time | datetime |
798
+ | Value | double |
799
+
800
+ > `$table` is a virtual table exposed by the query engine.
801
+
802
+ **Returned Object: DerivedTransformQueryValidationResponse**
803
+
804
+ | Property | Description |
805
+ | -------- | ---------------------------------------------- |
806
+ | Data | Transformed time series generated by the query |
807
+ | Valid | Indicates whether the query is valid |
808
+ | Error | Validation error details when `Valid = false` |
809
+
810
+ #### Query examples
811
+
812
+ ```sql
813
+ SELECT Time + INTERVAL 1 DAY AS Time, Value FROM $table
814
+
815
+ SELECT Time, CASE WHEN EXTRACT(HOUR FROM (Time AT TIME ZONE 'UTC') AT TIME ZONE 'Europe/Rome') < 10 THEN Value + 1 ELSE Value END AS Value FROM $table WHERE Time IS NOT NULL
816
+
817
+ SELECT Time, Value FROM $table WHERE Version IS NOT NULL AND ((EXTRACT(hour FROM Version) < 10 AND Time >= date_trunc('day', Version + interval '1 day')) OR (EXTRACT(hour FROM Version) >= 10 AND Time >= date_trunc('day', Version + interval '2 day')))
818
+ ```
819
+
820
+ #### SQL Dialect & Execution Model
821
+
822
+ The query engine uses a DuckDB-compatible SQL dialect (PostgreSQL-like).
823
+
824
+ Queries are executed against a virtual table named `$table`, which represents the provided sample TimeSerieData.
825
+
826
+ The engine supports common SQL features including:
827
+
828
+ - SELECT expressions
829
+ - WHERE filtering
830
+ - CASE WHEN expressions
831
+ - Date/time arithmetic and functions
832
+ - Timezone conversion functions
833
+
834
+ Full DuckDB SQL reference: https://duckdb.org/docs/sql/introduction.html
835
+
736
836
  ## Write Data in Artesian
737
837
 
738
838
  Using the MarketDataService is possible to register MarketData and write curves into it using the UpsertData method.
@@ -786,9 +886,11 @@ mkservice.upsertData(data)
786
886
  ```
787
887
 
788
888
  Upsert has optional switches that can be applied
889
+
789
890
  ```
790
891
  mkservice.upsertData(data, deferCommandExecution, deferDataGeneration, keepNulls, upsertMode)
791
892
  ```
893
+
792
894
  The switch details are,
793
895
 
794
896
  deferCommandExecution (true/false) choose between syncronoys and asyncronous command execution, default is false.
@@ -796,12 +898,11 @@ deferDataGeneration (true/false) choose between syncronoys and asyncronous preco
796
898
  keepNulls (true/false) if true then nulls are written in the curve replacing any data present for the instant, default is false.
797
899
  upsertMode (Merge/Replace) for ActualTimeSeries the two modes are equivalent. Leaving Null/None/Empty is equivalent to Merge.
798
900
 
799
-
800
- DerivedCfg can be of algorithm type: Coalesce, Sum, Muv.
901
+ DerivedCfg can be of algorithm type: Coalesce, Sum, Muv, Transform.
801
902
 
802
903
  Updating the DerivedCfg can be performed with `updateDerivedConfiguration` on MarketDataService. A validation will be done on the existing DerivedCfg of the MarketData, that should be not null and with same type as the one used for the update.
803
904
 
804
- ```csharp
905
+ ```Python
805
906
  derivedCfgUpdate = DerivedCfg(
806
907
  version=1,
807
908
  derivedAlgorithm=DerivedAlgorithm.Coalesce,
@@ -814,6 +915,31 @@ marketDataUpdated = mkdservice.updateDerivedConfiguration(
814
915
  False)
815
916
  ```
816
917
 
918
+ For DerivedCfg Transform, `orderedReferencedMarketDataIds` contains a single source series (the series where the transform is applied), and `transform` contains the query to apply.
919
+
920
+ ```Python
921
+ derivedCfgUpdate = DerivedCfg(
922
+ version=1,
923
+ derivedAlgorithm=DerivedAlgorithm.Transform,
924
+ orderedReferencedMarketDataIds=[10001],
925
+ transform="SELECT Time, (Value + 1) as Value FROM $table"
926
+ )
927
+
928
+ marketDataUpdated = mkdservice.updateDerivedConfiguration(
929
+ registeredDerived.marketDataId,
930
+ derivedCfgUpdate,
931
+ False)
932
+ ```
933
+
934
+ #### Available Columns
935
+
936
+ | Column | Type |
937
+ | ------ | -------- |
938
+ | Time | datetime |
939
+ | Value | double |
940
+
941
+ > `$table` is a virtual table exposed by the query engine.
942
+
817
943
  In case we want to write an hourly (or lower) time series the timezone for the upsert data must be UTC:
818
944
 
819
945
  ```Python
@@ -896,9 +1022,11 @@ mkservice.upsertData(data)
896
1022
  ```
897
1023
 
898
1024
  Upsert has optional switches that can be applied
1025
+
899
1026
  ```
900
1027
  mkservice.upsertData(data, deferCommandExecution, deferDataGeneration, keepNulls, upsertMode)
901
1028
  ```
1029
+
902
1030
  The switch details are,
903
1031
 
904
1032
  deferCommandExecution (true/false) choose between syncronoys and asyncronous command execution, default is false.
@@ -906,25 +1034,24 @@ deferDataGeneration (true/false) choose between syncronoys and asyncronous preco
906
1034
  keepNulls (true/false) if true then nulls are written in the curve replacing any data present for the instant, default is false.
907
1035
  upsertMode (Merge/Replace) for VersionedTimeSeries the merge writes in to the curve replacing existing data for an existing instant, replace writes the payload removing any previous data for the version. Leaving Null/None/Empty is equivalent to Merge.
908
1036
 
909
- | DATETIME | EXISTING | PAYLOAD | MERGE | REPALACE |
910
- |---|---|---|---|---|
1037
+ | DATETIME | EXISTING | PAYLOAD | MERGE | REPLACE |
1038
+ | ------------ | ---------- | ---------- | ---------- | ---------- |
911
1039
  | VERSION NAME | 2025-01-01 | 2025-01-01 | 2025-01-01 | 2025-01-01 |
912
- | 2025-01-01 | | | | |
913
- | 2025-01-02 | 999.99 | 222.22 | 222.22 | 222.22 |
914
- | 2025-01-03 | 999.99 | 222.22 | 222.22 | 222.22 |
915
- | 2025-01-04 | 999.99 | 222.22 | 222.22 | 222.22 |
916
- | 2025-01-05 | 999.99 | 222.22 | 222.22 | 222.22 |
917
- | 2025-01-06 | 999.99 | 222.22 | 222.22 | 222.22 |
918
- | 2025-01-07 | 999.99 | 222.22 | 222.22 | 222.22 |
919
- | 2025-01-08 | | 222.22 | 222.22 | 222.22 |
920
- | 2025-01-09 | | | | |
921
- | 2025-01-10 | | | | |
922
- | 2025-01-11 | 999.99 | | 999.99 | |
923
- | 2025-01-12 | 999.99 | | 999.99 | |
924
- | 2025-01-13 | 999.99 | | 999.99 | |
925
- | 2025-01-14 | | | | |
926
- | 2025-01-15 | | | | |
927
-
1040
+ | 2025-01-01 | | | | |
1041
+ | 2025-01-02 | 999.99 | 222.22 | 222.22 | 222.22 |
1042
+ | 2025-01-03 | 999.99 | 222.22 | 222.22 | 222.22 |
1043
+ | 2025-01-04 | 999.99 | 222.22 | 222.22 | 222.22 |
1044
+ | 2025-01-05 | 999.99 | 222.22 | 222.22 | 222.22 |
1045
+ | 2025-01-06 | 999.99 | 222.22 | 222.22 | 222.22 |
1046
+ | 2025-01-07 | 999.99 | 222.22 | 222.22 | 222.22 |
1047
+ | 2025-01-08 | | 222.22 | 222.22 | 222.22 |
1048
+ | 2025-01-09 | | | | |
1049
+ | 2025-01-10 | | | | |
1050
+ | 2025-01-11 | 999.99 | | 999.99 | |
1051
+ | 2025-01-12 | 999.99 | | 999.99 | |
1052
+ | 2025-01-13 | 999.99 | | 999.99 | |
1053
+ | 2025-01-14 | | | | |
1054
+ | 2025-01-15 | | | | |
928
1055
 
929
1056
  ### Write Data in a Market Assessment Time Series
930
1057
 
@@ -974,9 +1101,11 @@ mkservice.upsertData(marketAssessment)
974
1101
  ```
975
1102
 
976
1103
  Upsert has optional switches that can be applied
1104
+
977
1105
  ```
978
1106
  mkservice.upsertData(data, deferCommandExecution, deferDataGeneration, keepNulls, upsertMode)
979
1107
  ```
1108
+
980
1109
  The switch details are,
981
1110
 
982
1111
  deferCommandExecution (true/false) choose between syncronoys and asyncronous command execution, default is false.
@@ -984,7 +1113,6 @@ deferDataGeneration (true/false) choose between syncronoys and asyncronous preco
984
1113
  keepNulls (true/false) if true then nulls are written in the curve replacing any data present for the instant, default is false.
985
1114
  upsertMode (Merge/Replace) for MarketAssessment merge adds the new products to the existing and overwrites existing with the new ones while replace replaces all the existing products with the new ones. Leaving Null/None/Empty is equivalent to Merge.
986
1115
 
987
-
988
1116
  ### Write Data in a Bid Ask Time Series
989
1117
 
990
1118
  ```Python
@@ -1032,9 +1160,11 @@ mkservice.upsertData(bidAsk)
1032
1160
  ```
1033
1161
 
1034
1162
  Upsert has optional switches that can be applied
1163
+
1035
1164
  ```
1036
1165
  mkservice.upsertData(data, deferCommandExecution, deferDataGeneration, keepNulls, upsertMode)
1037
1166
  ```
1167
+
1038
1168
  The switch details are,
1039
1169
 
1040
1170
  deferCommandExecution (true/false) choose between syncronoys and asyncronous command execution, default is false.
@@ -1042,7 +1172,6 @@ deferDataGeneration (true/false) choose between syncronoys and asyncronous preco
1042
1172
  keepNulls (true/false) if true then nulls are written in the curve replacing any data present for the instant, default is false.
1043
1173
  upsertMode (Merge/Replace) for BidAsk merge adds the new products to the existing and overwrites existing with the new ones while replace replaces all the existing products with the new ones. Leaving Null/None/Empty is equivalent to Merge.
1044
1174
 
1045
-
1046
1175
  ### Write Data in an Auction Time Series
1047
1176
 
1048
1177
  ```Python
@@ -1090,9 +1219,11 @@ auctionRows = MarketData.UpsertData(MarketData.MarketDataIdentifier('PROVIDER',
1090
1219
  ```
1091
1220
 
1092
1221
  Upsert has optional switches that can be applied
1222
+
1093
1223
  ```
1094
1224
  mkservice.upsertData(data, deferCommandExecution, deferDataGeneration, keepNulls, upsertMode)
1095
1225
  ```
1226
+
1096
1227
  The switch details are,
1097
1228
 
1098
1229
  deferCommandExecution (true/false) choose between syncronoys and asyncronous command execution, default is false.
@@ -1100,7 +1231,6 @@ deferDataGeneration (true/false) choose between syncronoys and asyncronous preco
1100
1231
  keepNulls (true/false) if true then nulls are written in the curve replacing any data present for the instant, default is false.
1101
1232
  upsertMode (Merge/Replace) for Auction merge and replace are equivalent. Leaving Null/None/Empty is equivalent to Merge.
1102
1233
 
1103
-
1104
1234
  ## Delete Data in Artesian
1105
1235
 
1106
1236
  Using the MarketDataService is possible to delete MarketData and its curves.