artesian-sdk 4.2.2.dev16__py3-none-any.whl → 4.2.3b2.dev54__py3-none-any.whl

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.
@@ -384,6 +384,8 @@ class GMEPublicOfferQuery:
384
384
  UnitType.UC: "UC",
385
385
  UnitType.UPV: "UPV",
386
386
  UnitType.UCV: "UCV",
387
+ UnitType.UVZi: "UVZi",
388
+ UnitType.UVZp: "UVZp",
387
389
  }
388
390
  vr = switcher.get(unitType, "DefunitType")
389
391
  if vr == "DefunitType":
@@ -424,6 +426,11 @@ class GMEPublicOfferQuery:
424
426
  Zone.SVIZ: "SVIZ",
425
427
  Zone.CALA: "CALA",
426
428
  Zone.MONT: "MONT",
429
+ Zone.XGRE: "XGRE",
430
+ Zone.XSVI: "XSVI",
431
+ Zone.BSP: "BSP",
432
+ Zone.XAUS: "XAUS",
433
+ Zone.XFRA: "XFRA",
427
434
  }
428
435
  vr = switcher.get(zone, "DefZone")
429
436
  if vr == "DefZone":
@@ -24,3 +24,4 @@ class Market(Enum):
24
24
  MRR = 50
25
25
  MIXBID = 70
26
26
  AFRR = 100
27
+ AFRE = 200
@@ -10,3 +10,4 @@ class Status(Enum):
10
10
  SUB = 6
11
11
  COM = 7
12
12
  PCOM = 8
13
+ PREJ = 9
@@ -6,4 +6,6 @@ class UnitType(Enum):
6
6
  UC = 2
7
7
  UPV = 3
8
8
  UCV = 4
9
+ UVZi = 5
10
+ UVZp = 6
9
11
  UNKNOWN = 99
@@ -2,6 +2,8 @@ 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 Artesian.MarketData._Dto.DerivedTransformQueryValidation import DerivedTransformQueryValidation
6
+ from Artesian.MarketData._Dto.DerivedTransformQueryValidationResponse import DerivedTransformQueryValidationResponse
5
7
  from ._Dto.DerivedCfg import DerivedCfg
6
8
  from .._ClientsExecutor.RequestExecutor import _RequestExecutor
7
9
  from .._ClientsExecutor.Client import _Client
@@ -534,6 +536,53 @@ class MarketDataService:
534
536
  def deleteData(self: MarketDataService, data: DeleteData) -> None:
535
537
  return _get_event_loop().run_until_complete(self.deleteDataAsync(data))
536
538
 
539
+ async def derivedTransformQueryValidationAsync(
540
+ self: MarketDataService,
541
+ request: DerivedTransformQueryValidation
542
+ ) -> DerivedTransformQueryValidationResponse:
543
+ """
544
+ Derived Transform Query Validation.
545
+
546
+ Args:
547
+ request: Request containing TimeSerieData and the Query to be applied to verify the derived transformation
548
+ Returns:
549
+ DerivedTransformQueryValidationResponse Entity (Async).
550
+ """
551
+ url = "/utils/derivedTransform/queryValidation"
552
+
553
+ with self.__client as c:
554
+ res = await asyncio.gather(
555
+ *[
556
+ self.__executor.exec(
557
+ c.exec,
558
+ "POST",
559
+ url,
560
+ request,
561
+ retcls=DerivedTransformQueryValidationResponse
562
+ )
563
+ ]
564
+ )
565
+
566
+ return cast(DerivedTransformQueryValidationResponse, res[0])
567
+
568
+ def derivedTransformQueryValidation(
569
+ self: MarketDataService,
570
+ request: DerivedTransformQueryValidation
571
+ ) -> DerivedTransformQueryValidationResponse:
572
+ """
573
+ Derived Transform Query Validation.
574
+
575
+ Args:
576
+ request: Request containing TimeSerieData and the Query to be applied to verify the derived transformation
577
+
578
+ Returns:
579
+ DerivedTransformQueryValidationResponse Entity.
580
+ """
581
+
582
+ return _get_event_loop().run_until_complete(
583
+ self.derivedTransformQueryValidationAsync(request)
584
+ )
585
+
537
586
 
538
587
  def _get_event_loop() -> asyncio.AbstractEventLoop:
539
588
  """
@@ -9,7 +9,7 @@ class DerivedCfg:
9
9
  Class for the Derived Configuration.
10
10
 
11
11
  Attributes:
12
- derivedAlgorithm: the derived configuration algorithm (MUV, Coalesce, Sum)
12
+ derivedAlgorithm: the derived configuration algorithm (MUV, Coalesce, Sum, Transform)
13
13
  version: the derived configuration version
14
14
  orderedReferencedMarketDataIds: the ordered reference MarketData Ids
15
15
  used in the computation
@@ -19,3 +19,4 @@ class DerivedCfg:
19
19
  derivedAlgorithm: DerivedAlgorithm
20
20
  version: int
21
21
  orderedReferencedMarketDataIds: Optional[List[int]]
22
+ transform: Optional[str] = None
@@ -0,0 +1,34 @@
1
+ from dataclasses import dataclass
2
+ from typing import Optional
3
+
4
+ from .TimeSerieData import TimeSerieData
5
+
6
+
7
+ @dataclass
8
+ class DerivedTransformQueryValidation:
9
+ """
10
+ Class Derived transform query validation.
11
+
12
+ Attributes:
13
+ data: The time series data used for the query validation
14
+ transform: The Transform query to apply on the referenced timeseries.
15
+ The query is executed against the helper table `$table`.
16
+ For ActualTimeSerie the table exposes `Time` (datetime) and `Value` (double).
17
+ For VersionedTimeSerie it exposes `Version` (datetime), `Time` (datetime) and `Value` (double).
18
+ The transform query should return `Time` and `Value` columns in the response.
19
+ Query examples
20
+ SELECT Time + INTERVAL 1 DAY AS Time, Value FROM $table
21
+ SELECT Time, CASE WHEN EXTRACT(HOUR FROM (Time AT TIME ZONE 'UTC') AT TIME ZONE 'Europe/Rome')
22
+ < 10 THEN Value + 1 ELSE Value END AS Value FROM $table WHERE Time IS NOT NULL
23
+ SELECT Time, Value FROM $table WHERE Version IS NOT NULL AND((EXTRACT(hour FROM Version)
24
+ < 10 AND Time >= date_trunc('day', Version + interval '1 day')) OR(EXTRACT(hour FROM Version)
25
+ >= 10 AND Time >= date_trunc('day', Version + interval '2 day')))
26
+
27
+ """
28
+
29
+ data: TimeSerieData
30
+ transform: Optional[str] = None
31
+
32
+ def __post_init__(self: "DerivedTransformQueryValidation") -> None:
33
+ if self.transform is None:
34
+ raise ValueError("transform must be provided for query validation.")
@@ -0,0 +1,30 @@
1
+ from dataclasses import dataclass
2
+ from typing import Optional
3
+ from .TimeSerieData import TimeSerieData
4
+
5
+
6
+ @dataclass
7
+ class Error:
8
+ """
9
+ Class Represents an error in the derived transform query validation response.
10
+ Attributes:
11
+ message: The Error message when the query validation is invalid.
12
+
13
+ """
14
+
15
+ message: Optional[str] = None
16
+
17
+
18
+ @dataclass
19
+ class DerivedTransformQueryValidationResponse:
20
+ """
21
+ Class Represents the response of a derived transform query validation.
22
+ Attributes:
23
+ data: The time series data transformed by the query.
24
+ error: The Error in case of invalid query validation.
25
+ valid: The transformation is valid or invalid.
26
+ """
27
+
28
+ data: TimeSerieData
29
+ valid: bool
30
+ error: Optional[Error] = None
@@ -70,7 +70,8 @@ class MarketDataEntityInput:
70
70
  self.derivedCfg is not None
71
71
  and self.derivedCfg.derivedAlgorithm in {
72
72
  DerivedAlgorithm.Coalesce,
73
- DerivedAlgorithm.Sum
73
+ DerivedAlgorithm.Sum,
74
+ DerivedAlgorithm.Transform
74
75
  }
75
76
  and self.type is not MarketDataType.ActualTimeSerie
76
77
  ):
@@ -88,3 +89,26 @@ class MarketDataEntityInput:
88
89
  f"DerivedCfg with {self.derivedCfg.derivedAlgorithm} algorithm "
89
90
  "must be set to MarketData of type Versioned only."
90
91
  )
92
+
93
+ if (
94
+ self.derivedCfg is not None
95
+ and self.derivedCfg.derivedAlgorithm is DerivedAlgorithm.Transform
96
+ and self.derivedCfg.transform is None
97
+ ):
98
+ raise Exception(
99
+ f"DerivedCfg with {self.derivedCfg.derivedAlgorithm} algorithm "
100
+ "must have transform set."
101
+ )
102
+
103
+ if (
104
+ self.derivedCfg is not None
105
+ and self.derivedCfg.derivedAlgorithm is DerivedAlgorithm.Transform
106
+ and (
107
+ self.derivedCfg.orderedReferencedMarketDataIds is None
108
+ or len(self.derivedCfg.orderedReferencedMarketDataIds) != 1
109
+ )
110
+ ):
111
+ raise Exception(
112
+ f"DerivedCfg with {self.derivedCfg.derivedAlgorithm} algorithm "
113
+ "must have exactly one orderedReferencedMarketDataIds."
114
+ )
@@ -0,0 +1,22 @@
1
+ from dataclasses import dataclass
2
+ from typing import Dict, Optional
3
+ from datetime import datetime
4
+ from Artesian.MarketData._Enum.MarketDataType import MarketDataType
5
+
6
+
7
+ @dataclass
8
+ class TimeSerieData:
9
+ """
10
+ Class Timeserie data.
11
+
12
+ Attributes:
13
+ rows: The timeserie data in OriginalTimezone or, when Hourly, UTC.
14
+ type: MarketDataEntity Type
15
+ version: The Version to operate on
16
+ timezone: The timezone of the Rows. Must be the OriginalTimezone or, when Hourly, must be "UTC".
17
+ """
18
+
19
+ type: MarketDataType
20
+ rows: Optional[Dict[datetime, Optional[float]]] = None
21
+ version: Optional[datetime] = None
22
+ timezone: Optional[str] = None
@@ -2,6 +2,7 @@ from .MarketDataEntityInput import MarketDataEntityInput
2
2
  from .MarketDataEntityOutput import MarketDataEntityOutput
3
3
  from .CheckConversionResult import CheckConversionResult
4
4
  from .UnitOfMeasure import UnitOfMeasure
5
+ from .TimeSerieData import TimeSerieData
5
6
  from .CurveRangeEntity import CurveRangeEntity
6
7
  from .PagedResult import PagedResultCurveRangeEntity
7
8
  from .ArtesianSearchResults import ArtesianSearchResults
@@ -35,4 +36,5 @@ __all__ = [
35
36
  DerivedCfg.__name__,
36
37
  CheckConversionResult.__name__,
37
38
  UnitOfMeasure.__name__,
39
+ TimeSerieData.__name__,
38
40
  ] # type: ignore
@@ -5,3 +5,4 @@ class DerivedAlgorithm(Enum):
5
5
  MUV = 0
6
6
  Sum = 1
7
7
  Coalesce = 2
8
+ Transform = 3
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
- import cgi
3
- from typing import Any, Optional
2
+ from email.message import Message
3
+ from typing import Any, Optional, cast
4
4
  import requests
5
5
  import platform
6
6
 
@@ -57,7 +57,7 @@ class _Client:
57
57
  retcls: Optional[type] = None,
58
58
  params: Optional[dict] = None,
59
59
  ) -> Any | None:
60
- json = artesianJsonSerialize(obj)
60
+ json = cast(Any, artesianJsonSerialize(obj))
61
61
  url = self.__baseUrl + url
62
62
  r = requests.Request(method, url, json=json, params=params)
63
63
  prep = self.__session.prepare_request(r)
@@ -68,7 +68,11 @@ class _Client:
68
68
  "Unexpected error while calling {}|{}".format(method, url)
69
69
  ) from e
70
70
 
71
- mimetype, _ = cgi.parse_header(res.headers.get("Content-Type", ""))
71
+ # Replaced the deprecated 'cgi' module (removed in Python 3.13) with 'email.message'.
72
+ msg = Message()
73
+ msg['content-type'] = res.headers.get("Content-Type", "")
74
+ mimetype = msg.get_content_type() # es. "text/html"
75
+ _ = msg.get_params()
72
76
 
73
77
  if res.status_code >= 200 and res.status_code < 300:
74
78
  if mimetype == "application/json":
Artesian/_version.py CHANGED
@@ -1,5 +1,6 @@
1
- # file generated by setuptools-scm
1
+ # file generated by vcs-versioning
2
2
  # don't change, don't track in version control
3
+ from __future__ import annotations
3
4
 
4
5
  __all__ = [
5
6
  "__version__",
@@ -10,25 +11,14 @@ __all__ = [
10
11
  "commit_id",
11
12
  ]
12
13
 
13
- TYPE_CHECKING = False
14
- if TYPE_CHECKING:
15
- from typing import Tuple
16
- from typing import Union
17
-
18
- VERSION_TUPLE = Tuple[Union[int, str], ...]
19
- COMMIT_ID = Union[str, None]
20
- else:
21
- VERSION_TUPLE = object
22
- COMMIT_ID = object
23
-
24
14
  version: str
25
15
  __version__: str
26
- __version_tuple__: VERSION_TUPLE
27
- version_tuple: VERSION_TUPLE
28
- commit_id: COMMIT_ID
29
- __commit_id__: COMMIT_ID
16
+ __version_tuple__: tuple[int | str, ...]
17
+ version_tuple: tuple[int | str, ...]
18
+ commit_id: str | None
19
+ __commit_id__: str | None
30
20
 
31
- __version__ = version = '4.2.2.dev16'
32
- __version_tuple__ = version_tuple = (4, 2, 2, 'dev16')
21
+ __version__ = version = '4.2.3b2.dev54'
22
+ __version_tuple__ = version_tuple = (4, 2, 3, 'b2', 'dev54')
33
23
 
34
24
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: artesian-sdk
3
- Version: 4.2.2.dev16
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.
@@ -4,40 +4,43 @@ Artesian/ArtesianPolicyConfig.py,sha256=ULLngwH1762K8Kre08_JZ7aNYs4LZOxocTYLPJjX
4
4
  Artesian/Exceptions.py,sha256=asPwxz8TaIpjZV4GJmWchGen_04Ib3Rdd7_Btud4X9E,6141
5
5
  Artesian/Granularity.py,sha256=EOeBP9Wz-tAhdm3rVVJBXx9jAkiMH9OIMJUsrNawsNU,206
6
6
  Artesian/__init__.py,sha256=c-Fu4VGOuvQCGRefF5C4CY9OxoGTDce7CgjipZN8lIo,1119
7
- Artesian/_version.py,sha256=ZW91Yk1KDZKccTWJPuwVGKxTwQ6w40J2lII1GmbfTKQ,719
7
+ Artesian/_version.py,sha256=YpmR3k6JV45o4OXs_A-oiFaVSKBeMpvKDmyG6VPeS0M,543
8
8
  Artesian/GMEPublicOffers/ExtractionRangeConfig.py,sha256=pXVFdLpLqFvgzu2Y5UTckDWysFiJDKc0ZaXjuv46iJU,415
9
- Artesian/GMEPublicOffers/GMEPublicOfferQuery.py,sha256=IECU7nk6wN7alLIxiUQmPUWaeXWsoSDC1R9qv5JMjYI,15367
9
+ Artesian/GMEPublicOffers/GMEPublicOfferQuery.py,sha256=zC2xChY1dug34japlfa9S-ehqCbIMXvPAboEiADNLGg,15590
10
10
  Artesian/GMEPublicOffers/GMEPublicOfferQueryParameters.py,sha256=gs5SVNEYJTpwV9whZFw07jm5cIsion6TvgRDAeHj1Kw,3330
11
11
  Artesian/GMEPublicOffers/GMEPublicOfferService.py,sha256=SSGng222MTLN7f7jXIk4uWPn5IMO77aiuAnsgJK4qZ0,1315
12
12
  Artesian/GMEPublicOffers/__init__.py,sha256=eCFTipFo_M7XjnJDs46GUs7Q63a7tCPwwEvTL0__esE,667
13
13
  Artesian/GMEPublicOffers/_Enum/BaType.py,sha256=HapOc1zeOzvzuBhxepl5aCu4DCEAi-oNonw2sgHEl70,95
14
14
  Artesian/GMEPublicOffers/_Enum/GenerationType.py,sha256=nXZpBIrrIfj_JGuEGEkWQMLHIoObb69-oIhk8wiemqU,245
15
- Artesian/GMEPublicOffers/_Enum/Market.py,sha256=0pkB7Yr4qHLSkUbZSf4zz6W9hEBuucFk1eXpslav3VU,327
15
+ Artesian/GMEPublicOffers/_Enum/Market.py,sha256=ESEpY0rOw1VjhY06xLTpgRQKIzwW2sYyIeLJfWHECT0,342
16
16
  Artesian/GMEPublicOffers/_Enum/Purpose.py,sha256=vE5TMsXFlvKS_gP13tU-UULEp6xo75VdIrmoh0Tuqw8,69
17
17
  Artesian/GMEPublicOffers/_Enum/Scope.py,sha256=TnULjRZq-ptv8o8iHJDfcJXxEylUyPiKnRczsLBSSEE,149
18
- Artesian/GMEPublicOffers/_Enum/Status.py,sha256=wJ6d7Lbr30EbPRUnnhCkCXeF1-d3MSYwNxhCcXz4-fA,141
19
- Artesian/GMEPublicOffers/_Enum/UnitType.py,sha256=PukftC_s7BTYQmHa-LNgz7G-QliPci7mod8DX0dWTDQ,109
18
+ Artesian/GMEPublicOffers/_Enum/Status.py,sha256=jvvFbXhY8Njey9Kl1Mo6KhxQlXUDtNBXwnl_FYdO9OU,154
19
+ Artesian/GMEPublicOffers/_Enum/UnitType.py,sha256=p4ERSxHpDYIAhyPM3xoTBa9pYWMOs02x24Jb5vkEJT8,135
20
20
  Artesian/GMEPublicOffers/_Enum/Zone.py,sha256=dl_3io_JZ1F9R7t1iEjexLKeNY1HWvV-CMVgh8XlVnw,380
21
21
  Artesian/GMEPublicOffers/_Enum/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  Artesian/MarketData/CommonUnitOfMeasure.py,sha256=mybttan-Zpcf8NNYj48_xWpJSgadSXh-6mn4ZPvHvKo,257
23
- Artesian/MarketData/MarketDataService.py,sha256=VJjvPsT3i-ucC7XaURXCNv_J42fQVHUjnc85UTGkfS8,18341
23
+ Artesian/MarketData/MarketDataService.py,sha256=hfzR8F-sVkcYnuM8Ih6iDMOY0pa209BTsHd0VXFRQAQ,20128
24
24
  Artesian/MarketData/__init__.py,sha256=fchVl7COy5IV9Kbsfuh94DT2v_IknVmfp0XM_Y-VhGM,1589
25
25
  Artesian/MarketData/_Dto/ArtesianMetadataFacet.py,sha256=Ib9YYpGp1_6LdHy2WjL5pUlUVNNGQiyXfCUeh6t5ky4,800
26
26
  Artesian/MarketData/_Dto/ArtesianSearchResults.py,sha256=nazdj1G4jpOUhn1irML3Duafp4I0kNhyfnZZzL4496k,581
27
27
  Artesian/MarketData/_Dto/CheckConversionResult.py,sha256=vXyKtb-ZpcIL7QMKhSNiz9iV_FkGMoxQ2_aDOOV3Apk,570
28
28
  Artesian/MarketData/_Dto/CurveRangeEntity.py,sha256=_zjXxuueNoIG4Xg1K-5TeJQBF0ejcDpFkvW5R9siby8,891
29
29
  Artesian/MarketData/_Dto/DeleteData.py,sha256=0hLz28pdnNdUG82DGtPgW6NcsCNBOxIhGBD_dc8HLTA,1307
30
- Artesian/MarketData/_Dto/DerivedCfg.py,sha256=XrXVJXhenhpxl3Jtp9x0UcE9pOMOqIpvK6IE1Mfg0f4,567
31
- Artesian/MarketData/_Dto/MarketDataEntityInput.py,sha256=5c5pw3B0zw8T0Yg455FsfuDyH32c6Y6x3aO42bOS_FQ,3558
30
+ Artesian/MarketData/_Dto/DerivedCfg.py,sha256=vMTkoh4FVgh02EwglewlVC2e1nSvloiOjnFKQVZXMbs,614
31
+ Artesian/MarketData/_Dto/DerivedTransformQueryValidation.py,sha256=0v0QT5hEKlPudBavxwZEHhqPfZAnn2f_tgAYSaNrDmw,1641
32
+ Artesian/MarketData/_Dto/DerivedTransformQueryValidationResponse.py,sha256=TXVMEz6ARt-zWb6LqRyV9rgZ6NkTcKXJJZIM7LQcrLM,772
33
+ Artesian/MarketData/_Dto/MarketDataEntityInput.py,sha256=6QYnq07HmQFljnQqsM0e4lL3Q1xhz1ycp3HG3d7n8aA,4482
32
34
  Artesian/MarketData/_Dto/MarketDataEntityOutput.py,sha256=TKV4n0aBZzInFVY_yI8UASIyYnnHGqs7N18nUrfCfGM,2254
33
35
  Artesian/MarketData/_Dto/MarketDataIdentifier.py,sha256=egNOuOI3qugbFl8_w3IUSV9mOdBj-akq7M4Gj0X4Ig8,289
34
36
  Artesian/MarketData/_Dto/PagedResult.py,sha256=-o0zKOLTbLg2wdz8K4K4qQJTkarEl-4SYppS6cf6j2o,736
37
+ Artesian/MarketData/_Dto/TimeSerieData.py,sha256=24jYzjxlrmxLCWwPcILjgd28aA0lRddi8vpRkj_U4gI,677
35
38
  Artesian/MarketData/_Dto/UnitOfMeasure.py,sha256=B6Axt5wxMhLsjdXIiK0K912REmbCaZcaxWMImxEjXXY,304
36
39
  Artesian/MarketData/_Dto/UpsertData.py,sha256=abIA7kQTW-9u3D-sjgv7mMEiY6UCARnj8Z1dMNYc8hM,3998
37
- Artesian/MarketData/_Dto/__init__.py,sha256=iTYvyR14J0tq7iuj-zQtn9xO1W1eJCX1GzsDvGrMkhQ,1289
40
+ Artesian/MarketData/_Dto/__init__.py,sha256=HMZiX_S4DUGNqsyc0nmv3ieIWlk6S499T_YG3hvVUlc,1358
38
41
  Artesian/MarketData/_Enum/AggregationRule.py,sha256=fkYmouBQwC68rFMyG_j-D_0IQA5JVrJRfSA7KxsCF-4,120
39
42
  Artesian/MarketData/_Enum/ArtesianMetadataFacetType.py,sha256=1wE9VOzZ4gHk5oBjwpJd_kCgrUIfyNQmxuOZevj4f28,92
40
- Artesian/MarketData/_Enum/DerivedAlgorithm.py,sha256=m64IQxmlyGPghLuTKaBAE6Y5afYBJdYofp8z0FQbASw,95
43
+ Artesian/MarketData/_Enum/DerivedAlgorithm.py,sha256=aW6zzbT8-BJEM6AKPprIjWJa2NIgiqvxuRBzESoLTDE,113
41
44
  Artesian/MarketData/_Enum/MarketDataType.py,sha256=lIXV21b1wNWEah0q76OD4bMV1n_dtsUHQNSr8SbTBcE,159
42
45
  Artesian/MarketData/_Enum/UpsertMode.py,sha256=UuAMKcvehXN8pagJ-UtadbVIer7mjJaYOoEop-QjvrU,78
43
46
  Artesian/MarketData/_Enum/__init__.py,sha256=7YM19VPx7kz7prHe3fHj23aF3efievZziaND50AxKUA,485
@@ -65,11 +68,11 @@ Artesian/Query/_QueryParameters/VersionedQueryParameters.py,sha256=rAiZieHfm3awb
65
68
  Artesian/Query/_QueryParameters/VersionsRangeSelectionConfig.py,sha256=OP6dTHiBbCLcL9eCtgoWh50UEP0muNwM3bw-AqbvbW4,1508
66
69
  Artesian/Query/_QueryParameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
70
  Artesian/_ClientsExecutor/ArtesianJsonSerializer.py,sha256=CDnq1sgKLvxSampykFtF9iZHZjgV6BPZvED6MU3K74Y,3563
68
- Artesian/_ClientsExecutor/Client.py,sha256=AYVMOj9mf3QmCY1vmWzHQA4WRL2zqCB-yhE5XRfk8RE,3833
71
+ Artesian/_ClientsExecutor/Client.py,sha256=il2vebcCVwlVgdMxSSAzu24iw49cX2WjtpE4Uxz3Wdo,4071
69
72
  Artesian/_ClientsExecutor/RequestExecutor.py,sha256=KKq31g8GFS-Mdp3S1QXFm5tZhacjnIeWs1YFc3f8NkY,10613
70
73
  Artesian/_ClientsExecutor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- artesian_sdk-4.2.2.dev16.dist-info/licenses/LICENSE,sha256=Y27w-dSf1pHlXO4yNy70OCCO4VuYYVxUdDOQ-sLdXds,1074
72
- artesian_sdk-4.2.2.dev16.dist-info/METADATA,sha256=U2TFO-Ul9K0FKOredNK-lCBBWsjyHmsH_Ks_AS1mJOs,38369
73
- artesian_sdk-4.2.2.dev16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
74
- artesian_sdk-4.2.2.dev16.dist-info/top_level.txt,sha256=1Fv89OOnRKHLMmQEBRXPaNuPMoZytK4dnfrOFDdGGYI,9
75
- artesian_sdk-4.2.2.dev16.dist-info/RECORD,,
74
+ artesian_sdk-4.2.3b2.dev54.dist-info/licenses/LICENSE,sha256=Y27w-dSf1pHlXO4yNy70OCCO4VuYYVxUdDOQ-sLdXds,1074
75
+ artesian_sdk-4.2.3b2.dev54.dist-info/METADATA,sha256=Fffc1SaPB7HMJ0Byh8njDPg1OHq_qNc5gZUf0oI6aK8,42987
76
+ artesian_sdk-4.2.3b2.dev54.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
77
+ artesian_sdk-4.2.3b2.dev54.dist-info/top_level.txt,sha256=1Fv89OOnRKHLMmQEBRXPaNuPMoZytK4dnfrOFDdGGYI,9
78
+ artesian_sdk-4.2.3b2.dev54.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (83.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5