From 3de046fe54b8488ebfe59cdcc71b089b3068cd0a Mon Sep 17 00:00:00 2001 From: Mirko Petrelli Date: Wed, 21 Aug 2024 10:15:11 +0200 Subject: [PATCH 1/2] added support to analysis date parameter on versioned queries --- .../VersionedTimeSerieQueries.cs | 9 +++++++++ .../Query/Partitioning/PartitionByIDStrategy.cs | 3 ++- .../QueryParamaters/VersionedQueryParamaters.cs | 9 ++++++++- .../Artesian.SDK/Service/Query/VersionedQuery.cs | 16 ++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Artesian/Artesian.SDK.Tests/VersionedTimeSerieQueries.cs b/Artesian/Artesian.SDK.Tests/VersionedTimeSerieQueries.cs index 47c2c3d..226b679 100644 --- a/Artesian/Artesian.SDK.Tests/VersionedTimeSerieQueries.cs +++ b/Artesian/Artesian.SDK.Tests/VersionedTimeSerieQueries.cs @@ -2651,6 +2651,15 @@ public void Ver_RelativePeriodExtractionWindowChange() .WithVerb(HttpMethod.Get) .Times(1); + var test4 = partialQuery + .ForAnalysisDate(new LocalDate(2018, 07, 19)) + .ExecuteAsync().Result; + + httpTest.ShouldHaveCalledPath($"{_cfg.BaseAddress}query/v1.0/vts/MUV/Day/P5D") + .WithQueryParam("ad", "2018-07-19") + .WithVerb(HttpMethod.Get) + .Times(1); + } } #endregion diff --git a/Artesian/Artesian.SDK/Service/Query/Partitioning/PartitionByIDStrategy.cs b/Artesian/Artesian.SDK/Service/Query/Partitioning/PartitionByIDStrategy.cs index fe3454d..3af19e3 100644 --- a/Artesian/Artesian.SDK/Service/Query/Partitioning/PartitionByIDStrategy.cs +++ b/Artesian/Artesian.SDK/Service/Query/Partitioning/PartitionByIDStrategy.cs @@ -62,7 +62,8 @@ public IEnumerable Partition(IEnumerable /// /// + /// public VersionedQueryParamaters( IEnumerable ids, ExtractionRangeSelectionConfig extractionRangeSelectionConfig, @@ -47,7 +48,8 @@ public VersionedQueryParamaters( VersionSelectionType? versionSelectionType, LocalDateTime? versionLimit, FillerKindType fillerK, - FillerConfig fillerConfig + FillerConfig fillerConfig, + LocalDate? analysisDate ) : base(ids, extractionRangeSelectionConfig, extractionRangeType, timezone, filterId, fillerK, fillerConfig) { @@ -56,6 +58,7 @@ FillerConfig fillerConfig this.Granularity = granularity; this.TransformId = transformId; this.VersionLimit = versionLimit; + this.AnalysisDate = analysisDate; this.FillerConfig = fillerConfig; } @@ -79,5 +82,9 @@ FillerConfig fillerConfig /// Version Limit /// public LocalDateTime? VersionLimit { get; set; } + /// + /// The analysis date from which apply the relative interval (default Today) + /// + public LocalDate? AnalysisDate { get; set; } } } diff --git a/Artesian/Artesian.SDK/Service/Query/VersionedQuery.cs b/Artesian/Artesian.SDK/Service/Query/VersionedQuery.cs index 00884f3..bdbd11f 100644 --- a/Artesian/Artesian.SDK/Service/Query/VersionedQuery.cs +++ b/Artesian/Artesian.SDK/Service/Query/VersionedQuery.cs @@ -327,6 +327,16 @@ public VersionedQuery ForVersion(LocalDateTime version) return this; } /// + /// Set a specific analysis date from wich apply the relative interval/period + /// + /// VersionedQuery + public VersionedQuery ForAnalysisDate(LocalDate analysisDate) + { + _queryParamaters.AnalysisDate = analysisDate; + + return this; + } + /// /// Set the Filler strategy to Null /// /// VersionedQuery @@ -415,6 +425,11 @@ protected override void _validateQuery() } } + if ( + ( _queryParamaters.ExtractionRangeSelectionConfig.DateStart != null || _queryParamaters.ExtractionRangeSelectionConfig.DateEnd != null ) + && _queryParamaters.AnalysisDate != null + ) + throw new ArtesianSdkClientException("Analysis should be related to a Period. Provide a period or remove analysis date."); } private string _buildVersionRoute(VersionedQueryParamaters queryParamaters) @@ -492,6 +507,7 @@ private List _buildRequest() .SetQueryParam("fillerK", qp.FillerKindType) .SetQueryParam("fillerDV", qp.FillerConfig.FillerTimeSeriesDV) .SetQueryParam("fillerP", qp.FillerConfig.FillerPeriod) + .SetQueryParam("ad", qp.AnalysisDate) .ToString()) .ToList(); From 62ba407747cada89c7cffe36dc71d3d121ad3bd3 Mon Sep 17 00:00:00 2001 From: Mirko Petrelli Date: Wed, 21 Aug 2024 14:20:52 +0200 Subject: [PATCH 2/2] Add error test, and moved test for analysis date --- .../VersionedTimeSerieQueries.cs | 53 ++++++++++++++++--- .../Service/Query/VersionedQuery.cs | 12 +++-- 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/Artesian/Artesian.SDK.Tests/VersionedTimeSerieQueries.cs b/Artesian/Artesian.SDK.Tests/VersionedTimeSerieQueries.cs index 226b679..d7da460 100644 --- a/Artesian/Artesian.SDK.Tests/VersionedTimeSerieQueries.cs +++ b/Artesian/Artesian.SDK.Tests/VersionedTimeSerieQueries.cs @@ -2613,6 +2613,8 @@ public void Ver_PeriodRelativeIntervalChange() } } + + [Test] public void Ver_RelativePeriodExtractionWindowChange() { using (var httpTest = new HttpTest()) @@ -2650,18 +2652,57 @@ public void Ver_RelativePeriodExtractionWindowChange() .WithQueryParam("id", 100000001) .WithVerb(HttpMethod.Get) .Times(1); + } + } - var test4 = partialQuery + [Test] + public void Ver_RelativePeriodForAnalysisDate() + { + using (var httpTest = new HttpTest()) + { + var qs = new QueryService(_cfg); + + var partialQuery = qs.CreateVersioned() + .ForMarketData(new [] { 100000001 }) + .InGranularity(Granularity.Hour) + .ForMUV() + .InRelativePeriod(Period.FromDays(5)); + + var test = partialQuery .ForAnalysisDate(new LocalDate(2018, 07, 19)) .ExecuteAsync().Result; - httpTest.ShouldHaveCalledPath($"{_cfg.BaseAddress}query/v1.0/vts/MUV/Day/P5D") - .WithQueryParam("ad", "2018-07-19") - .WithVerb(HttpMethod.Get) - .Times(1); - + httpTest.ShouldHaveCalledPath($"{_cfg.BaseAddress}query/v1.0/vts/MUV/Hour/P5D") + .WithQueryParam("id", 100000001) + .WithQueryParam("ad", "2018-07-19") + .WithVerb(HttpMethod.Get) + .Times(1); } } + + [Test] + public void Ver_RelativePeriodExtractionWindowFail() + { + var qs = new QueryService(_cfg); + + var query = qs.CreateVersioned() + .ForMarketData(new [] {100000001}) + .InGranularity(Granularity.Day) + .ForLastNVersions(3) + .InAbsoluteDateRange( + new LocalDate(2018, 07, 15), + new LocalDate(2018, 07, 20) + ) + .ForAnalysisDate(new LocalDate(2018, 07, 19)) + ; + + Assert.Throws( + () => { + query.ExecuteAsync().ConfigureAwait(true).GetAwaiter().GetResult(); + } + ); + } + #endregion #region Filler diff --git a/Artesian/Artesian.SDK/Service/Query/VersionedQuery.cs b/Artesian/Artesian.SDK/Service/Query/VersionedQuery.cs index bdbd11f..208c816 100644 --- a/Artesian/Artesian.SDK/Service/Query/VersionedQuery.cs +++ b/Artesian/Artesian.SDK/Service/Query/VersionedQuery.cs @@ -6,6 +6,7 @@ using NodaTime; using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Net.Http; using System.Threading; @@ -425,10 +426,7 @@ protected override void _validateQuery() } } - if ( - ( _queryParamaters.ExtractionRangeSelectionConfig.DateStart != null || _queryParamaters.ExtractionRangeSelectionConfig.DateEnd != null ) - && _queryParamaters.AnalysisDate != null - ) + if (_queryParamaters.ExtractionRangeType == ExtractionRangeType.DateRange && _queryParamaters.AnalysisDate != null) throw new ArtesianSdkClientException("Analysis should be related to a Period. Provide a period or remove analysis date."); } @@ -507,7 +505,11 @@ private List _buildRequest() .SetQueryParam("fillerK", qp.FillerKindType) .SetQueryParam("fillerDV", qp.FillerConfig.FillerTimeSeriesDV) .SetQueryParam("fillerP", qp.FillerConfig.FillerPeriod) - .SetQueryParam("ad", qp.AnalysisDate) + .SetQueryParam("ad", + qp.AnalysisDate.HasValue + ? qp.AnalysisDate.Value.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture) + : null + ) .ToString()) .ToList();