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.
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.github/workflows/dependency-review.yaml +2 -2
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.github/workflows/python-tests.yml +32 -15
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/PKG-INFO +159 -29
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/README.md +158 -28
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestActual.py +1 -1
- artesian_sdk-4.2.3b2.dev54/samples/TestDerivedCfgTransform.py +101 -0
- artesian_sdk-4.2.3b2.dev54/samples/TestDerivedTransformQueryValidation.py +37 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/GMEPublicOfferQuery.py +7 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/Market.py +1 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/Status.py +1 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/UnitType.py +2 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/MarketDataService.py +49 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/DerivedCfg.py +2 -1
- artesian_sdk-4.2.3b2.dev54/src/Artesian/MarketData/_Dto/DerivedTransformQueryValidation.py +34 -0
- artesian_sdk-4.2.3b2.dev54/src/Artesian/MarketData/_Dto/DerivedTransformQueryValidationResponse.py +30 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/MarketDataEntityInput.py +25 -1
- artesian_sdk-4.2.3b2.dev54/src/Artesian/MarketData/_Dto/TimeSerieData.py +22 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/__init__.py +2 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/DerivedAlgorithm.py +1 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/_ClientsExecutor/Client.py +2 -2
- artesian_sdk-4.2.3b2.dev54/src/Artesian/_version.py +24 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/artesian_sdk.egg-info/PKG-INFO +159 -29
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/artesian_sdk.egg-info/SOURCES.txt +7 -0
- artesian_sdk-4.2.3b2.dev54/src/artesian_sdk.egg-info/scm_file_list.json +121 -0
- artesian_sdk-4.2.3b2.dev54/src/artesian_sdk.egg-info/scm_version.json +8 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestGMEPO.py +17 -2
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestMarketDataService.py +109 -0
- artesian_sdk-4.2.2.dev19/src/Artesian/_version.py +0 -34
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.flake8 +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.github/dependabot.yml +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.gitignore +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.vscode/extensions.json +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.vscode/launch.json +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.vscode/settings.json +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/CODEOWNERS +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/CONTRIBUTING.md +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/LICENSE +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/pyproject.toml +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/renovate.json +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestAuction.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestBidAsk.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestDerivedCfg.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestGMEOffers.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestMarketDataService.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestMas.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestSearchFacet.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestVersioned.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndDeleteActual.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndDeleteAuction.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndDeleteBidAsk.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndDeleteMas.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndDeleteVersioned.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndQueryActual.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndQueryAuction.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndQueryBidAsk.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/samples/TestWriteDataAndQueryMas.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/setup.cfg +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/.gitignore +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/ArtesianConfig.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/ArtesianPolicyConfig.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Exceptions.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/ExtractionRangeConfig.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/GMEPublicOfferQueryParameters.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/GMEPublicOfferService.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/BaType.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/GenerationType.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/Purpose.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/Scope.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/Zone.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/_Enum/__init__.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/GMEPublicOffers/__init__.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Granularity.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/CommonUnitOfMeasure.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/ArtesianMetadataFacet.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/ArtesianSearchResults.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/CheckConversionResult.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/CurveRangeEntity.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/DeleteData.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/MarketDataEntityOutput.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/MarketDataIdentifier.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/PagedResult.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/UnitOfMeasure.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Dto/UpsertData.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/AggregationRule.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/ArtesianMetadataFacetType.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/MarketDataType.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/UpsertMode.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/_Enum/__init__.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/MarketData/__init__.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/ActualQuery.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/AuctionQuery.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/BidAskQuery.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/DefaultPartitionStrategy.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/MasQuery.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/QueryService.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/RelativeInterval.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/VersionedQuery.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_Query.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/ActualQueryParameters.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/AuctionQueryParameters.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/BidAskQueryParameters.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/ExtractionRangeConfig.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/ExtractionRangeType.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/MasQueryParameters.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/MostRecentSelectionConfig.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/QueryParameters.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/VersionSelectionConfig.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/VersionSelectionType.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/VersionedQueryParameters.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/VersionsRangeSelectionConfig.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/_QueryParameters/__init__.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/Query/__init__.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/_ClientsExecutor/ArtesianJsonSerializer.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/_ClientsExecutor/RequestExecutor.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/_ClientsExecutor/__init__.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/Artesian/__init__.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/artesian_sdk.egg-info/dependency_links.txt +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/artesian_sdk.egg-info/requires.txt +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/src/artesian_sdk.egg-info/top_level.txt +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestActual.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestBidAsk.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestClientErrorHandling.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestMarketDataDeleteData.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestMarketDataUpsertData.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestMas.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/TestVersioned.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/__init__.py +0 -0
- {artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/tests/helpers.py +0 -0
{artesian_sdk-4.2.2.dev19 → artesian_sdk-4.2.3b2.dev54}/.github/workflows/dependency-review.yaml
RENAMED
|
@@ -9,9 +9,9 @@ jobs:
|
|
|
9
9
|
runs-on: ubuntu-latest
|
|
10
10
|
steps:
|
|
11
11
|
- name: 'Checkout Repository'
|
|
12
|
-
uses: actions/checkout@
|
|
12
|
+
uses: actions/checkout@v7
|
|
13
13
|
- name: 'Dependency Review'
|
|
14
|
-
uses: actions/dependency-review-action@
|
|
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@
|
|
50
|
+
- uses: actions/checkout@v7
|
|
25
51
|
- name: Set up Python ${{ matrix.python-version }}
|
|
26
|
-
uses: actions/setup-python@
|
|
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@
|
|
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@
|
|
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@
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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(
|
|
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
|
-
```
|
|
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
|
|
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
|
|
914
|
-
| 2025-01-03
|
|
915
|
-
| 2025-01-04
|
|
916
|
-
| 2025-01-05
|
|
917
|
-
| 2025-01-06
|
|
918
|
-
| 2025-01-07
|
|
919
|
-
| 2025-01-08
|
|
920
|
-
| 2025-01-09
|
|
921
|
-
| 2025-01-10
|
|
922
|
-
| 2025-01-11
|
|
923
|
-
| 2025-01-12
|
|
924
|
-
| 2025-01-13
|
|
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.
|