artesian-sdk 4.0.3.dev2__tar.gz → 4.0.3.dev14__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.0.3.dev2 → artesian_sdk-4.0.3.dev14}/PKG-INFO +25 -3
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/README.md +23 -1
- artesian_sdk-4.0.3.dev14/samples/TestDerivedCfg.py +176 -0
- artesian_sdk-4.0.3.dev14/samples/TestSearchFacet.py +26 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndDeleteActual.py +6 -2
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndDeleteAuction.py +20 -13
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndDeleteBidAsk.py +16 -11
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndDeleteMas.py +8 -4
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndDeleteVersioned.py +14 -8
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/_Enum/Zone.py +2 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/MarketDataService.py +68 -0
- artesian_sdk-4.0.3.dev14/src/Artesian/MarketData/_Dto/DerivedCfg.py +21 -0
- artesian_sdk-4.0.3.dev14/src/Artesian/MarketData/_Dto/MarketDataEntityInput.py +88 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Dto/MarketDataEntityOutput.py +15 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Dto/__init__.py +2 -0
- artesian_sdk-4.0.3.dev14/src/Artesian/MarketData/_Enum/DerivedAlgorithm.py +7 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Enum/__init__.py +2 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/__init__.py +4 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/_ClientsExecutor/ArtesianJsonSerializer.py +2 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/__init__.py +1 -1
- artesian_sdk-4.0.3.dev14/src/Artesian/_version.py +21 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/artesian_sdk.egg-info/PKG-INFO +25 -3
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/artesian_sdk.egg-info/SOURCES.txt +3 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/TestMarketDataDeleteData.py +3 -7
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/TestMarketDataService.py +24 -9
- artesian_sdk-4.0.3.dev2/samples/TestSearchFacet.py +0 -28
- artesian_sdk-4.0.3.dev2/src/Artesian/MarketData/_Dto/MarketDataEntityInput.py +0 -38
- artesian_sdk-4.0.3.dev2/src/Artesian/_version.py +0 -16
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/.flake8 +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/.github/dependabot.yml +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/.github/workflows/dependency-review.yaml +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/.github/workflows/python-tests.yml +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/.gitignore +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/.vscode/extensions.json +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/.vscode/launch.json +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/.vscode/settings.json +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/CODEOWNERS +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/CONTRIBUTING.md +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/LICENSE +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/pyproject.toml +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/renovate.json +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestActual.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestAuction.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestBidAsk.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestGMEOffers.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestMarketDataService.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestMas.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestVersioned.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndQueryActual.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndQueryAuction.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndQueryBidAsk.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndQueryMas.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/setup.cfg +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/.gitignore +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/ArtesianConfig.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/ArtesianPolicyConfig.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Exceptions.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/ExtractionRangeConfig.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/GMEPublicOfferQuery.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/GMEPublicOfferQueryParameters.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/GMEPublicOfferService.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/_Enum/BaType.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/_Enum/GenerationType.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/_Enum/Market.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/_Enum/Purpose.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/_Enum/Scope.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/_Enum/Status.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/_Enum/UnitType.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/_Enum/__init__.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/GMEPublicOffers/__init__.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Granularity.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Dto/ArtesianMetadataFacet.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Dto/ArtesianSearchResults.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Dto/CurveRangeEntity.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Dto/DeleteData.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Dto/MarketDataIdentifier.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Dto/PagedResult.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Dto/UpsertData.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Enum/AggregationRule.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Enum/ArtesianMetadataFacetType.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/_Enum/MarketDataType.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/ActualQuery.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/AuctionQuery.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/BidAskQuery.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/DefaultPartitionStrategy.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/MasQuery.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/QueryService.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/RelativeInterval.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/VersionedQuery.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_Query.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/ActualQueryParameters.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/AuctionQueryParameters.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/BidAskQueryParameters.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/ExtractionRangeConfig.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/ExtractionRangeType.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/MasQueryParameters.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/MostRecentSelectionConfig.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/QueryParameters.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/VersionSelectionConfig.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/VersionSelectionType.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/VersionedQueryParameters.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/VersionsRangeSelectionConfig.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/_QueryParameters/__init__.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/Query/__init__.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/_ClientsExecutor/Client.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/_ClientsExecutor/RequestExecutor.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/_ClientsExecutor/__init__.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/artesian_sdk.egg-info/dependency_links.txt +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/artesian_sdk.egg-info/requires.txt +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/artesian_sdk.egg-info/top_level.txt +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/TestActual.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/TestBidAsk.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/TestClientErrorHandling.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/TestGMEPO.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/TestMarketDataUpsertData.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/TestMas.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/TestVersioned.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/__init__.py +0 -0
- {artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/tests/helpers.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: artesian-sdk
|
|
3
|
-
Version: 4.0.3.
|
|
3
|
+
Version: 4.0.3.dev14
|
|
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>
|
|
@@ -600,7 +600,12 @@ mkd = MarketData.MarketDataEntityInput(
|
|
|
600
600
|
aggregationRule=AggregationRule.AverageAndReplicate,
|
|
601
601
|
tags={
|
|
602
602
|
'TestSDKPython': ['PythonValue2']
|
|
603
|
-
}
|
|
603
|
+
},
|
|
604
|
+
derivedCfg=DerivedCfg(
|
|
605
|
+
version=1,
|
|
606
|
+
derivedAlgorithm=DerivedAlgorithm.Coalesce,
|
|
607
|
+
orderedReferencedMarketDataIds=[10000, 10001, 10002],
|
|
608
|
+
),
|
|
604
609
|
)
|
|
605
610
|
|
|
606
611
|
registered = mkservice.readMarketDataRegistryByName(mkdid.provider, mkdid.name)
|
|
@@ -620,6 +625,23 @@ mkservice.upsertData(data)
|
|
|
620
625
|
|
|
621
626
|
```
|
|
622
627
|
|
|
628
|
+
DerivedCfg can be of algorithm type: Coalesce, Sum, Muv.
|
|
629
|
+
|
|
630
|
+
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.
|
|
631
|
+
|
|
632
|
+
```csharp
|
|
633
|
+
derivedCfgUpdate = DerivedCfg(
|
|
634
|
+
version=1,
|
|
635
|
+
derivedAlgorithm=DerivedAlgorithm.Coalesce,
|
|
636
|
+
orderedReferencedMarketDataIds=[10002, 10001, 10000],
|
|
637
|
+
)
|
|
638
|
+
|
|
639
|
+
marketDataUpdated = mkdservice.updateDerivedConfiguration(
|
|
640
|
+
registeredDerived.marketDataId,
|
|
641
|
+
derivedCfgUpdate,
|
|
642
|
+
False)
|
|
643
|
+
```
|
|
644
|
+
|
|
623
645
|
In case we want to write an hourly (or lower) time series the timezone for the upsert data must be UTC:
|
|
624
646
|
|
|
625
647
|
```Python
|
|
@@ -546,7 +546,12 @@ mkd = MarketData.MarketDataEntityInput(
|
|
|
546
546
|
aggregationRule=AggregationRule.AverageAndReplicate,
|
|
547
547
|
tags={
|
|
548
548
|
'TestSDKPython': ['PythonValue2']
|
|
549
|
-
}
|
|
549
|
+
},
|
|
550
|
+
derivedCfg=DerivedCfg(
|
|
551
|
+
version=1,
|
|
552
|
+
derivedAlgorithm=DerivedAlgorithm.Coalesce,
|
|
553
|
+
orderedReferencedMarketDataIds=[10000, 10001, 10002],
|
|
554
|
+
),
|
|
550
555
|
)
|
|
551
556
|
|
|
552
557
|
registered = mkservice.readMarketDataRegistryByName(mkdid.provider, mkdid.name)
|
|
@@ -566,6 +571,23 @@ mkservice.upsertData(data)
|
|
|
566
571
|
|
|
567
572
|
```
|
|
568
573
|
|
|
574
|
+
DerivedCfg can be of algorithm type: Coalesce, Sum, Muv.
|
|
575
|
+
|
|
576
|
+
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.
|
|
577
|
+
|
|
578
|
+
```csharp
|
|
579
|
+
derivedCfgUpdate = DerivedCfg(
|
|
580
|
+
version=1,
|
|
581
|
+
derivedAlgorithm=DerivedAlgorithm.Coalesce,
|
|
582
|
+
orderedReferencedMarketDataIds=[10002, 10001, 10000],
|
|
583
|
+
)
|
|
584
|
+
|
|
585
|
+
marketDataUpdated = mkdservice.updateDerivedConfiguration(
|
|
586
|
+
registeredDerived.marketDataId,
|
|
587
|
+
derivedCfgUpdate,
|
|
588
|
+
False)
|
|
589
|
+
```
|
|
590
|
+
|
|
569
591
|
In case we want to write an hourly (or lower) time series the timezone for the upsert data must be UTC:
|
|
570
592
|
|
|
571
593
|
```Python
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
import Artesian
|
|
3
|
+
from Artesian import Query
|
|
4
|
+
from Artesian.Granularity import Granularity
|
|
5
|
+
from Artesian.MarketData._Dto.DerivedCfg import DerivedCfg
|
|
6
|
+
from Artesian.MarketData._Enum.DerivedAlgorithm import DerivedAlgorithm
|
|
7
|
+
from Artesian.MarketData._Enum.MarketDataType import MarketDataType
|
|
8
|
+
import time
|
|
9
|
+
|
|
10
|
+
cfg = Artesian.ArtesianConfig("https://arkive.artesian.cloud/tenantName/", "APIKey")
|
|
11
|
+
mkdservice = Artesian.MarketData.MarketDataService(cfg)
|
|
12
|
+
|
|
13
|
+
# curveOne
|
|
14
|
+
versionedCurveOne = Artesian.MarketData.MarketDataEntityInput(
|
|
15
|
+
"TestProviderNameDerived",
|
|
16
|
+
"CurveOne",
|
|
17
|
+
Granularity.Hour,
|
|
18
|
+
MarketDataType.VersionedTimeSerie,
|
|
19
|
+
"UTC"
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
registeredCurveOne = mkdservice.readMarketDataRegistryByName(
|
|
23
|
+
versionedCurveOne.providerName, versionedCurveOne.marketDataName
|
|
24
|
+
)
|
|
25
|
+
if registeredCurveOne is None:
|
|
26
|
+
registeredCurveOne = mkdservice.registerMarketData(versionedCurveOne)
|
|
27
|
+
|
|
28
|
+
marketIdentifierCurveOne = Artesian.MarketData.MarketDataIdentifier(
|
|
29
|
+
versionedCurveOne.providerName, versionedCurveOne.marketDataName
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
# mkdservice.deleteMarketData(registeredCurveOne.marketDataId)
|
|
33
|
+
|
|
34
|
+
testVersion = datetime(2020, 1, 1, 12)
|
|
35
|
+
|
|
36
|
+
data = Artesian.MarketData.UpsertData(
|
|
37
|
+
marketIdentifierCurveOne,
|
|
38
|
+
"UTC",
|
|
39
|
+
version=testVersion,
|
|
40
|
+
rows={datetime(2020, 1, 1, h): h for h in range(0, 8)},
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
mkdservice.upsertData(data)
|
|
44
|
+
|
|
45
|
+
# curveTwo
|
|
46
|
+
versionedCurveTwo = Artesian.MarketData.MarketDataEntityInput(
|
|
47
|
+
"TestProviderNameDerived",
|
|
48
|
+
"CurveTwo",
|
|
49
|
+
Granularity.Hour,
|
|
50
|
+
MarketDataType.VersionedTimeSerie,
|
|
51
|
+
"UTC"
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
registeredCurveTwo = mkdservice.readMarketDataRegistryByName(
|
|
55
|
+
versionedCurveTwo.providerName, versionedCurveTwo.marketDataName
|
|
56
|
+
)
|
|
57
|
+
if registeredCurveTwo is None:
|
|
58
|
+
registeredCurveTwo = mkdservice.registerMarketData(versionedCurveTwo)
|
|
59
|
+
|
|
60
|
+
marketIdentifierCurveTwo = Artesian.MarketData.MarketDataIdentifier(
|
|
61
|
+
versionedCurveTwo.providerName, versionedCurveTwo.marketDataName
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# mkdservice.deleteMarketData(registeredCurveTwo.marketDataId)
|
|
65
|
+
|
|
66
|
+
testVersion = datetime(2020, 1, 1, 12)
|
|
67
|
+
|
|
68
|
+
data = Artesian.MarketData.UpsertData(
|
|
69
|
+
marketIdentifierCurveTwo,
|
|
70
|
+
"UTC",
|
|
71
|
+
version=testVersion,
|
|
72
|
+
rows={datetime(2020, 1, 1, h): h*2 for h in range(4, 12)},
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
mkdservice.upsertData(data)
|
|
76
|
+
|
|
77
|
+
curveIds = [registeredCurveOne.marketDataId, registeredCurveTwo.marketDataId]
|
|
78
|
+
|
|
79
|
+
# Create DerivedCfgCoalesce with order curveId one and two
|
|
80
|
+
derivedCfg = DerivedCfg(
|
|
81
|
+
version=1,
|
|
82
|
+
derivedAlgorithm=DerivedAlgorithm.Coalesce,
|
|
83
|
+
orderedReferencedMarketDataIds=curveIds,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
actualCurveDerived = Artesian.MarketData.MarketDataEntityInput(
|
|
87
|
+
"TestProviderNameDerived",
|
|
88
|
+
"CurveDerived",
|
|
89
|
+
Granularity.Hour,
|
|
90
|
+
MarketDataType.ActualTimeSerie,
|
|
91
|
+
"UTC",
|
|
92
|
+
derivedCfg=derivedCfg,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
registeredDerived = mkdservice.readMarketDataRegistryByName(
|
|
96
|
+
actualCurveDerived.providerName, actualCurveDerived.marketDataName
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
# mkdservice.deleteMarketData(registeredDerived.marketDataId)
|
|
100
|
+
|
|
101
|
+
if registeredDerived is None:
|
|
102
|
+
registeredDerived = mkdservice.registerMarketData(actualCurveDerived)
|
|
103
|
+
|
|
104
|
+
# check that derivedCfg is as expected
|
|
105
|
+
assert (
|
|
106
|
+
registeredDerived.derivedCfg is not None
|
|
107
|
+
and registeredDerived.derivedCfg.derivedAlgorithm == DerivedAlgorithm.Coalesce
|
|
108
|
+
), "Derived Algorithm is not the expected (Coalesce)"
|
|
109
|
+
|
|
110
|
+
marketIdentifierDerived = Artesian.MarketData.MarketDataIdentifier(
|
|
111
|
+
actualCurveDerived.providerName, actualCurveDerived.marketDataName
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
time.sleep(2)
|
|
115
|
+
|
|
116
|
+
# get the derived curve and check values are in according to the configuration
|
|
117
|
+
query = Query.QueryService(cfg)
|
|
118
|
+
|
|
119
|
+
res = (
|
|
120
|
+
query.createActual()
|
|
121
|
+
.forMarketData([registeredDerived.marketDataId])
|
|
122
|
+
.inAbsoluteDateRange("2020-01-01", "2020-01-02")
|
|
123
|
+
.inTimeZone("UTC")
|
|
124
|
+
.inGranularity(Granularity.Hour)
|
|
125
|
+
.execute()
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
print(res)
|
|
129
|
+
|
|
130
|
+
for i in range(0, 12):
|
|
131
|
+
if i < 8:
|
|
132
|
+
assert res[i]['D'] == i, "Value derived curve is wrong"
|
|
133
|
+
elif i < 12:
|
|
134
|
+
assert res[i]['D'] == (i*2), "Value derived curve is wrong"
|
|
135
|
+
else:
|
|
136
|
+
assert res[i]['D'] == 0
|
|
137
|
+
|
|
138
|
+
curveIdsUpdate = [registeredCurveTwo.marketDataId, registeredCurveOne.marketDataId]
|
|
139
|
+
|
|
140
|
+
# Create DerivedCfgCoalesce with order curveId two and one
|
|
141
|
+
derivedCfgUpdate = DerivedCfg(
|
|
142
|
+
version=1,
|
|
143
|
+
derivedAlgorithm=DerivedAlgorithm.Coalesce,
|
|
144
|
+
orderedReferencedMarketDataIds=curveIdsUpdate,
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
marketDataUpdated = mkdservice.updateDerivedConfiguration(
|
|
148
|
+
registeredDerived.marketDataId,
|
|
149
|
+
derivedCfgUpdate,
|
|
150
|
+
False)
|
|
151
|
+
|
|
152
|
+
time.sleep(2)
|
|
153
|
+
|
|
154
|
+
res = (
|
|
155
|
+
query.createActual()
|
|
156
|
+
.forMarketData([registeredDerived.marketDataId])
|
|
157
|
+
.inAbsoluteDateRange("2020-01-01", "2020-01-02")
|
|
158
|
+
.inTimeZone("UTC")
|
|
159
|
+
.inGranularity(Granularity.Hour)
|
|
160
|
+
.execute()
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
print(res)
|
|
164
|
+
|
|
165
|
+
for i in range(0, 12):
|
|
166
|
+
if i < 4:
|
|
167
|
+
assert res[i]['D'] == i, "Value derived curve is wrong"
|
|
168
|
+
elif i < 12:
|
|
169
|
+
assert res[i]['D'] == (i*2), "Value derived curve is wrong"
|
|
170
|
+
else:
|
|
171
|
+
assert res[i]['D'] == 0
|
|
172
|
+
|
|
173
|
+
# Delete the curves completely
|
|
174
|
+
mkdservice.deleteMarketData(registeredCurveOne.marketDataId)
|
|
175
|
+
mkdservice.deleteMarketData(registeredCurveTwo.marketDataId)
|
|
176
|
+
mkdservice.deleteMarketData(registeredDerived.marketDataId)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from Artesian import ArtesianConfig
|
|
2
|
+
from Artesian.MarketData import *
|
|
3
|
+
|
|
4
|
+
cfg = ArtesianConfig("https://arkive.artesian.cloud/tenantName/", "APIKey")
|
|
5
|
+
mkdservice = MarketDataService(cfg)
|
|
6
|
+
|
|
7
|
+
res = mkdservice.searchFacet(
|
|
8
|
+
1,
|
|
9
|
+
1,
|
|
10
|
+
"Riconsegnato_",
|
|
11
|
+
filters={"ProviderName": ["SNAM", "France"]},
|
|
12
|
+
sorts=["MarketDataId asc"],
|
|
13
|
+
doNotLoadAdditionalInfo=False,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
print(res.results)
|
|
17
|
+
|
|
18
|
+
res1 = mkdservice.searchFacet(1, 1, "Riconsegnato_")
|
|
19
|
+
|
|
20
|
+
print(res1.results)
|
|
21
|
+
|
|
22
|
+
res2 = mkdservice.searchFacet(1, 1, "Riconsegnato_", doNotLoadAdditionalInfo=True)
|
|
23
|
+
|
|
24
|
+
print(res2.results)
|
|
25
|
+
|
|
26
|
+
print("Test completed")
|
{artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndDeleteActual.py
RENAMED
|
@@ -47,7 +47,9 @@ print(res)
|
|
|
47
47
|
|
|
48
48
|
# Delete data between 2020-01-01 06:00 and 2020-01-01 18:00
|
|
49
49
|
deleteData = Artesian.MarketData.DeleteData(
|
|
50
|
-
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
50
|
+
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
51
|
+
registered.providerName, registered.marketDataName
|
|
52
|
+
),
|
|
51
53
|
timezone="CET",
|
|
52
54
|
rangeStart=datetime(2020, 1, 1, 6),
|
|
53
55
|
rangeEnd=datetime(2020, 1, 1, 18),
|
|
@@ -69,7 +71,9 @@ print(res)
|
|
|
69
71
|
|
|
70
72
|
# Delete data between 2020-01-01 06:00 and 2020-01-01 18:00 without Timezone
|
|
71
73
|
deleteData = Artesian.MarketData.DeleteData(
|
|
72
|
-
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
74
|
+
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
75
|
+
registered.providerName, registered.marketDataName
|
|
76
|
+
),
|
|
73
77
|
rangeStart=datetime(2020, 1, 1, 6),
|
|
74
78
|
rangeEnd=datetime(2020, 1, 1, 18),
|
|
75
79
|
)
|
{artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndDeleteAuction.py
RENAMED
|
@@ -23,17 +23,20 @@ registered = mkdservice.readMarketDataRegistryByName(
|
|
|
23
23
|
if registered is None:
|
|
24
24
|
registered = mkdservice.registerMarketData(auction)
|
|
25
25
|
|
|
26
|
-
auctionRowData={
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
auctionRowData = {
|
|
27
|
+
datetime(2020, 1, 1, h): MarketData.AuctionBids(
|
|
28
|
+
datetime(2020, 1, 1),
|
|
29
|
+
bid=[
|
|
30
|
+
MarketData.AuctionBidValue(11.0, 12.0),
|
|
31
|
+
MarketData.AuctionBidValue(13.0, 14.0),
|
|
32
|
+
],
|
|
33
|
+
offer=[
|
|
34
|
+
MarketData.AuctionBidValue(21.0, 22.0),
|
|
35
|
+
MarketData.AuctionBidValue(23.0, 24.0),
|
|
36
|
+
],
|
|
37
|
+
)
|
|
38
|
+
for h in range(0, 23)
|
|
39
|
+
}
|
|
37
40
|
|
|
38
41
|
auctionRows = MarketData.UpsertData(
|
|
39
42
|
Artesian.MarketData.MarketDataIdentifier(
|
|
@@ -60,7 +63,9 @@ print(res)
|
|
|
60
63
|
|
|
61
64
|
# Delete data between 2020-01-01 06:00 and 2020-01-01 18:00
|
|
62
65
|
deleteData = Artesian.MarketData.DeleteData(
|
|
63
|
-
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
66
|
+
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
67
|
+
registered.providerName, registered.marketDataName
|
|
68
|
+
),
|
|
64
69
|
timezone="CET",
|
|
65
70
|
rangeStart=datetime(2020, 1, 1, 6),
|
|
66
71
|
rangeEnd=datetime(2020, 1, 1, 18),
|
|
@@ -80,7 +85,9 @@ print(res)
|
|
|
80
85
|
|
|
81
86
|
# Delete data between 2020-01-01 06:00 and 2020-01-01 18:00 without Timezone
|
|
82
87
|
deleteData = Artesian.MarketData.DeleteData(
|
|
83
|
-
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
88
|
+
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
89
|
+
registered.providerName, registered.marketDataName
|
|
90
|
+
),
|
|
84
91
|
rangeStart=datetime(2020, 1, 1, 6),
|
|
85
92
|
rangeEnd=datetime(2020, 1, 1, 18),
|
|
86
93
|
)
|
{artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndDeleteBidAsk.py
RENAMED
|
@@ -25,12 +25,13 @@ registered = mkdservice.readMarketDataRegistryByName(
|
|
|
25
25
|
if registered is None:
|
|
26
26
|
registered = mkdservice.registerMarketData(bidAsk)
|
|
27
27
|
|
|
28
|
-
bidAskData={
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
bidAskData = {
|
|
29
|
+
datetime(2020, 1, 1, h): {
|
|
30
|
+
"Feb-20": MarketData.BidAskValue(bestBidPrice=15.0, lastQuantity=14.0),
|
|
31
|
+
"Mar-20": MarketData.BidAskValue(bestBidPrice=25.0, lastQuantity=24.0),
|
|
32
|
+
}
|
|
33
|
+
for h in range(0, 23)
|
|
34
|
+
}
|
|
34
35
|
|
|
35
36
|
bidAsk = MarketData.UpsertData(
|
|
36
37
|
Artesian.MarketData.MarketDataIdentifier(
|
|
@@ -58,11 +59,13 @@ print(res)
|
|
|
58
59
|
|
|
59
60
|
# Delete data between 2020-01-01 6am and 2020-01-01 6pm for product Feb-18
|
|
60
61
|
deleteData = Artesian.MarketData.DeleteData(
|
|
61
|
-
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
62
|
+
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
63
|
+
registered.providerName, registered.marketDataName
|
|
64
|
+
),
|
|
62
65
|
timezone="CET",
|
|
63
66
|
rangeStart=datetime(2020, 1, 1, 6),
|
|
64
67
|
rangeEnd=datetime(2020, 1, 1, 18),
|
|
65
|
-
product=["Feb-20"]
|
|
68
|
+
product=["Feb-20"],
|
|
66
69
|
)
|
|
67
70
|
|
|
68
71
|
mkdservice.deleteData(deleteData)
|
|
@@ -80,10 +83,12 @@ print(res)
|
|
|
80
83
|
|
|
81
84
|
# Delete data between 2020-01-01 6am and 2020-01-01 6pm for product Feb-18 without Timezone
|
|
82
85
|
deleteData = Artesian.MarketData.DeleteData(
|
|
83
|
-
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
86
|
+
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
87
|
+
registered.providerName, registered.marketDataName
|
|
88
|
+
),
|
|
84
89
|
rangeStart=datetime(2020, 1, 1, 6),
|
|
85
90
|
rangeEnd=datetime(2020, 1, 1, 18),
|
|
86
|
-
product=["Feb-20"]
|
|
91
|
+
product=["Feb-20"],
|
|
87
92
|
)
|
|
88
93
|
|
|
89
94
|
mkdservice.deleteData(deleteData)
|
|
@@ -100,4 +105,4 @@ res = (
|
|
|
100
105
|
print(res)
|
|
101
106
|
|
|
102
107
|
# Delete the curve completely
|
|
103
|
-
mkdservice.deleteMarketData(registered.marketDataId)
|
|
108
|
+
mkdservice.deleteMarketData(registered.marketDataId)
|
|
@@ -58,11 +58,13 @@ print(res)
|
|
|
58
58
|
|
|
59
59
|
# Delete data with product Feb-20 between 2020-01-01 and 2020-01-03
|
|
60
60
|
deleteData = Artesian.MarketData.DeleteData(
|
|
61
|
-
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
61
|
+
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
62
|
+
registered.providerName, registered.marketDataName
|
|
63
|
+
),
|
|
62
64
|
timezone="CET",
|
|
63
65
|
rangeStart=datetime(2020, 1, 1, 0),
|
|
64
66
|
rangeEnd=datetime(2020, 1, 3, 0),
|
|
65
|
-
product=["Feb-20"]
|
|
67
|
+
product=["Feb-20"],
|
|
66
68
|
)
|
|
67
69
|
|
|
68
70
|
mkdservice.deleteData(deleteData)
|
|
@@ -80,10 +82,12 @@ print(res)
|
|
|
80
82
|
|
|
81
83
|
# Delete data with product Feb-20 between 2020-01-01 and 2020-01-03 without Timezone
|
|
82
84
|
deleteData = Artesian.MarketData.DeleteData(
|
|
83
|
-
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
85
|
+
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
86
|
+
registered.providerName, registered.marketDataName
|
|
87
|
+
),
|
|
84
88
|
rangeStart=datetime(2020, 1, 1, 0),
|
|
85
89
|
rangeEnd=datetime(2020, 1, 3, 0),
|
|
86
|
-
product=["Feb-20"]
|
|
90
|
+
product=["Feb-20"],
|
|
87
91
|
)
|
|
88
92
|
|
|
89
93
|
mkdservice.deleteData(deleteData)
|
{artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/samples/TestWriteDataAndDeleteVersioned.py
RENAMED
|
@@ -22,8 +22,10 @@ registered = mkdservice.readMarketDataRegistryByName(
|
|
|
22
22
|
if registered is None:
|
|
23
23
|
registered = mkdservice.registerMarketData(versioned)
|
|
24
24
|
|
|
25
|
-
marketIdentifier = Artesian.MarketData.MarketDataIdentifier(
|
|
26
|
-
|
|
25
|
+
marketIdentifier = Artesian.MarketData.MarketDataIdentifier(
|
|
26
|
+
versioned.providerName, versioned.marketDataName
|
|
27
|
+
)
|
|
28
|
+
testVersion = datetime(2020, 1, 1, 12)
|
|
27
29
|
|
|
28
30
|
data = Artesian.MarketData.UpsertData(
|
|
29
31
|
marketIdentifier,
|
|
@@ -42,8 +44,8 @@ res = (
|
|
|
42
44
|
.inAbsoluteDateRange("2020-01-01", "2020-01-02")
|
|
43
45
|
.inTimeZone("CET")
|
|
44
46
|
.inGranularity(Granularity.Hour)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
# .forMUV()
|
|
48
|
+
# .forLastNVersions(2)
|
|
47
49
|
.forVersion("2020-01-01T12:00:00")
|
|
48
50
|
.execute()
|
|
49
51
|
)
|
|
@@ -52,11 +54,13 @@ print(res)
|
|
|
52
54
|
|
|
53
55
|
# Delete data between 2020-01-01 06:00 and 2020-01-01 18:00
|
|
54
56
|
deleteData = Artesian.MarketData.DeleteData(
|
|
55
|
-
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
57
|
+
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
58
|
+
registered.providerName, registered.marketDataName
|
|
59
|
+
),
|
|
56
60
|
timezone="CET",
|
|
57
61
|
rangeStart=datetime(2020, 1, 1, 6),
|
|
58
62
|
rangeEnd=datetime(2020, 1, 1, 18),
|
|
59
|
-
version=testVersion
|
|
63
|
+
version=testVersion,
|
|
60
64
|
)
|
|
61
65
|
|
|
62
66
|
mkdservice.deleteData(deleteData)
|
|
@@ -75,10 +79,12 @@ print(res)
|
|
|
75
79
|
|
|
76
80
|
# Delete data between 2020-01-01 06:00 and 2020-01-01 18:00 without Timezone
|
|
77
81
|
deleteData = Artesian.MarketData.DeleteData(
|
|
78
|
-
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
82
|
+
ID=Artesian.MarketData.MarketDataIdentifier(
|
|
83
|
+
registered.providerName, registered.marketDataName
|
|
84
|
+
),
|
|
79
85
|
rangeStart=datetime(2020, 1, 1, 6),
|
|
80
86
|
rangeEnd=datetime(2020, 1, 1, 18),
|
|
81
|
-
version=testVersion
|
|
87
|
+
version=testVersion,
|
|
82
88
|
)
|
|
83
89
|
|
|
84
90
|
mkdservice.deleteData(deleteData)
|
{artesian_sdk-4.0.3.dev2 → artesian_sdk-4.0.3.dev14}/src/Artesian/MarketData/MarketDataService.py
RENAMED
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
from typing import List, Optional, cast, Dict
|
|
3
3
|
|
|
4
4
|
from Artesian.MarketData._Dto import DeleteData
|
|
5
|
+
from ._Dto.DerivedCfg import DerivedCfg
|
|
5
6
|
from .._ClientsExecutor.RequestExecutor import _RequestExecutor
|
|
6
7
|
from .._ClientsExecutor.Client import _Client
|
|
7
8
|
from ..ArtesianConfig import ArtesianConfig
|
|
@@ -388,10 +389,77 @@ class MarketDataService:
|
|
|
388
389
|
Returns:
|
|
389
390
|
MarketData Entity Output.
|
|
390
391
|
"""
|
|
392
|
+
|
|
393
|
+
entity._validateDerivedCfg()
|
|
394
|
+
|
|
391
395
|
return _get_event_loop().run_until_complete(
|
|
392
396
|
self.registerMarketDataAsync(entity)
|
|
393
397
|
)
|
|
394
398
|
|
|
399
|
+
async def updateDerivedConfigurationAsync(
|
|
400
|
+
self: MarketDataService,
|
|
401
|
+
marketDataId: int,
|
|
402
|
+
derivedCfg: DerivedCfg,
|
|
403
|
+
force: bool = False
|
|
404
|
+
) -> MarketDataEntityOutput:
|
|
405
|
+
"""
|
|
406
|
+
Update Derived Configuration for marketData with id supplied in MarketDataId.
|
|
407
|
+
The update will trigger a Rebuild
|
|
408
|
+
|
|
409
|
+
Args:
|
|
410
|
+
marketDataId: The Market Data Id to be updated
|
|
411
|
+
derivedCfg: The Derived Configuration to be updated
|
|
412
|
+
force: Force the update of configuration also if another
|
|
413
|
+
rebuild process is running (Default=false)
|
|
414
|
+
|
|
415
|
+
Returns:
|
|
416
|
+
MarketData Entity Output (Async).
|
|
417
|
+
"""
|
|
418
|
+
|
|
419
|
+
marketDataOutput = await self.readMarketDataRegistryByIdAsync(marketDataId)
|
|
420
|
+
|
|
421
|
+
marketDataOutput._validateUpdateDerivedCfg(derivedCfgUpdate=derivedCfg)
|
|
422
|
+
|
|
423
|
+
url = "/marketdata/entity/" + str(marketDataId) + "/updateDerivedConfiguration"
|
|
424
|
+
params = {"force": force}
|
|
425
|
+
with self.__client as c:
|
|
426
|
+
res = await asyncio.gather(
|
|
427
|
+
*[
|
|
428
|
+
self.__executor.exec(
|
|
429
|
+
c.exec,
|
|
430
|
+
"POST",
|
|
431
|
+
url,
|
|
432
|
+
derivedCfg,
|
|
433
|
+
retcls=MarketDataEntityOutput,
|
|
434
|
+
params=params,
|
|
435
|
+
)
|
|
436
|
+
]
|
|
437
|
+
)
|
|
438
|
+
return cast(MarketDataEntityOutput, res[0])
|
|
439
|
+
|
|
440
|
+
def updateDerivedConfiguration(
|
|
441
|
+
self: MarketDataService,
|
|
442
|
+
marketDataId: int,
|
|
443
|
+
derivedCfg: DerivedCfg,
|
|
444
|
+
force: bool = False
|
|
445
|
+
) -> MarketDataEntityOutput:
|
|
446
|
+
"""
|
|
447
|
+
Update Derived Configuration for marketData with id supplied in MarketDataId.
|
|
448
|
+
The update will trigger a Rebuild
|
|
449
|
+
|
|
450
|
+
Args:
|
|
451
|
+
marketDataId: The Market Data Id to be updated
|
|
452
|
+
derivedCfg: The Derived Configuration to be updated
|
|
453
|
+
force: Force the update of configuration also if another
|
|
454
|
+
rebuild process is running (Default=false)
|
|
455
|
+
|
|
456
|
+
Returns:
|
|
457
|
+
MarketData Entity Output.
|
|
458
|
+
"""
|
|
459
|
+
return _get_event_loop().run_until_complete(
|
|
460
|
+
self.updateDerivedConfigurationAsync(marketDataId, derivedCfg, force)
|
|
461
|
+
)
|
|
462
|
+
|
|
395
463
|
async def upsertDataAsync(self: MarketDataService, data: UpsertData) -> None:
|
|
396
464
|
url = "/marketdata/upsertdata"
|
|
397
465
|
with self.__client as c:
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import List, Optional
|
|
3
|
+
from .._Enum import DerivedAlgorithm
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@dataclass
|
|
7
|
+
class DerivedCfg:
|
|
8
|
+
"""
|
|
9
|
+
Class for the Derived Configuration.
|
|
10
|
+
|
|
11
|
+
Attributes:
|
|
12
|
+
derivedAlgorithm: the derived configuration algorithm (MUV, Coalesce, Sum)
|
|
13
|
+
version: the derived configuration version
|
|
14
|
+
orderedReferencedMarketDataIds: the ordered reference MarketData Ids
|
|
15
|
+
used in the computation
|
|
16
|
+
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
derivedAlgorithm: DerivedAlgorithm
|
|
20
|
+
version: int
|
|
21
|
+
orderedReferencedMarketDataIds: Optional[List[int]]
|