api/edited: pass the _keep_nans parameter
3 files changed, 50 insertions(+), 6 deletions(-)

M test/test_api.py
M tshistory_supervision/api.py
M tshistory_supervision/http.py
M test/test_api.py +28 -0
@@ 1,3 1,4 @@ 
+import numpy as np
 import pandas as pd
 
 from tshistory.testutil import assert_df

          
@@ 39,6 40,33 @@ 2020-01-02    False
 2020-01-03    False
 """, marker)
 
+    edited = series.copy()
+    edited.iloc[1] = np.NaN
+    tsx.update('multi-local', edited, 'test', manual=True)
+
+    ts, marker = tsx.edited('multi-local', _keep_nans=True)
+    assert_df("""
+2020-01-01    1.0
+2020-01-02    NaN
+2020-01-03    3.0
+""", ts)
+    assert_df("""
+2020-01-01    False
+2020-01-02     True
+2020-01-03    False
+""", marker)
+
+    ts, marker = tsx.edited('multi-local', _keep_nans=False)
+    assert_df("""
+2020-01-01    1.0
+2020-01-03    3.0
+""", ts)
+    assert_df("""
+2020-01-01    False
+2020-01-02     True
+2020-01-03    False
+""", marker)
+
 
 def test_multi_source_handcrafted_federated(tsa1, tsa2):
     series = pd.Series(

          
M tshistory_supervision/api.py +10 -5
@@ 13,7 13,8 @@ from tshistory.api import (
 def edited(self, name: str,
            revision_date: Optional[pd.Timestamp]=None,
            from_value_date: Optional[pd.Timestamp]=None,
-           to_value_date: Optional[pd.Timestamp]=None) -> Tuple[pd.Series, pd.Series]:
+           to_value_date: Optional[pd.Timestamp]=None,
+           _keep_nans: bool=False) -> Tuple[pd.Series, pd.Series]:
     """
     Returns the base series and a second boolean series whose entries
     indicate if an override has been made or not.

          
@@ 26,14 27,16 @@ def edited(self, name: str,
                 name,
                 revision_date=revision_date,
                 from_value_date=from_value_date,
-                to_value_date=to_value_date
+                to_value_date=to_value_date,
+                _keep_nans=_keep_nans
             )
 
     return self.othersources.edited(
         name,
         revision_date,
         from_value_date,
-        to_value_date
+        to_value_date,
+        _keep_nans=_keep_nans
     )
 
 

          
@@ 42,7 45,8 @@ def edited(self,  # noqa: F811
            name,
            revision_date=None,
            from_value_date=None,
-           to_value_date=None):
+           to_value_date=None,
+           _keep_nans=False):
 
     source = self._findsourcefor(name)
     if source is None:

          
@@ 51,7 55,8 @@ def edited(self,  # noqa: F811
         name,
         revision_date,
         from_value_date,
-        to_value_date
+        to_value_date,
+        _keep_nans
     )
 
 

          
M tshistory_supervision/http.py +12 -1
@@ 1,9 1,12 @@ 
+import json
+
 import pandas as pd
 from psyl import lisp
 
 from flask import make_response
 
 from flask_restx import (
+    inputs,
     Resource,
     reqparse
 )

          
@@ 49,6 52,10 @@ edited.add_argument(
     'horizon', type=str, default=None,
     help='override from/to_value_date'
 )
+edited.add_argument(
+    '_keep_nans', type=inputs.boolean, default=False,
+    help='keep erasure information'
+)
 
 
 class supervision_httpapi(httpapi):

          
@@ 85,11 92,13 @@ class supervision_httpapi(httpapi):
                         api.abort(400, f'bad horizon expression for `{args.name}`')
                     fvd = horizon.past
                     tvd = horizon.future
+
                 series, markers = tsa.edited(
                     args.name,
                     revision_date=args.insertion_date,
                     from_value_date=fvd,
                     to_value_date=tvd,
+                    _keep_nans=args._keep_nans
                 )
                 metadata = tsa.metadata(args.name, all=True)
                 assert metadata is not None, f'series {args.name} has no metadata'

          
@@ 134,9 143,11 @@ class supervision_httpclient(httpclient)
     def edited(self, name,
                revision_date=None,
                from_value_date=None,
-               to_value_date=None):
+               to_value_date=None,
+               _keep_nans=False):
         args = {
             'name': name,
+            '_keep_nans': json.dumps(_keep_nans),
             'format': 'tshpack',
         }
         if revision_date: