def test_flat(): # Create a bare Message msg = DataMessage() # Recreate the content from exr-flat.json header = Header( id="62b5f19d-f1c9-495d-8446-a3661ed24753", prepared="2012-11-29T08:40:26Z", sender=model.Agency(id="ECB"), ) msg.header = header ds = DataSet() # Create a Key and attributes key = Key( FREQ="D", CURRENCY="NZD", CURRENCY_DENOM="EUR", EXR_TYPE="SP00", EXR_SUFFIX="A", TIME_PERIOD="2013-01-18", ) obs_status = DataAttribute(id="OBS_STATUS") attr = {"OBS_STATUS": AttributeValue(value_for=obs_status, value="A")} ds.obs.append( Observation(dimension=key, value=1.5931, attached_attribute=attr)) key = key.copy(TIME_PERIOD="2013-01-21") ds.obs.append( Observation(dimension=key, value=1.5925, attached_attribute=attr)) key = key.copy(CURRENCY="RUB", TIME_PERIOD="2013-01-18") ds.obs.append( Observation(dimension=key, value=40.3426, attached_attribute=attr)) key = key.copy(TIME_PERIOD="2013-01-21") ds.obs.append( Observation(dimension=key, value=40.3000, attached_attribute=attr)) msg.data.append(ds) # Write to pd.Dataframe df1 = pandasdmx.to_pandas(msg) with specimen("flat.json") as f: ref = pandasdmx.read_sdmx(f) df2 = pandasdmx.to_pandas(ref) assert_pd_equal(df1, df2)
def test_flat(): # Create a bare Message msg = DataMessage() # Recreate the content from exr-flat.json header = Header( id='62b5f19d-f1c9-495d-8446-a3661ed24753', prepared='2012-11-29T08:40:26Z', sender='ECB', ) msg.header = header ds = DataSet() # Create a Key and attributes key = Key(FREQ='D', CURRENCY='NZD', CURRENCY_DENOM='EUR', EXR_TYPE='SP00', EXR_SUFFIX='A', TIME_PERIOD='2013-01-18') obs_status = DataAttribute(id='OBS_STATUS') attr = {'OBS_STATUS': AttributeValue(value_for=obs_status, value='A')} ds.obs.append( Observation(dimension=key, value=1.5931, attached_attribute=attr)) key = key.copy(TIME_PERIOD='2013-01-21') ds.obs.append( Observation(dimension=key, value=1.5925, attached_attribute=attr)) key = key.copy(CURRENCY='RUB', TIME_PERIOD='2013-01-18') ds.obs.append( Observation(dimension=key, value=40.3426, attached_attribute=attr)) key = key.copy(TIME_PERIOD='2013-01-21') ds.obs.append( Observation(dimension=key, value=40.3000, attached_attribute=attr)) msg.data.append(ds) # Write to pd.Dataframe df1 = sdmx.to_pandas(msg) with specimen('flat.json') as f: ref = sdmx.read_sdmx(f) df2 = sdmx.to_pandas(ref) assert_pd_equal(df1, df2)
def test_key(): # Construct with a dict k1 = Key({'foo': 1, 'bar': 2}) # Construct with kwargs k2 = Key(foo=1, bar=2) # Results are __eq__ each other assert k1 == k2 # Doing both is an error with raises(ValueError): Key({'foo': 1}, bar=2) # __len__ assert len(k1) == 2 # __contains__: symmetrical if keys are identical assert k1 in k2 assert k2 in k1 assert Key(foo=1) in k1 assert k1 not in Key(foo=1) # Set and get using item convenience k1['baz'] = 3 # bare value is converted to a KeyValue assert k1['foo'] == 1 # __str__ assert str(k1) == '(foo=1, bar=2, baz=3)' # copying: returns a new object equal to the old one k2 = k1.copy() assert id(k1) != id(k2) and k1 == k2 # copy with changes k2 = Key(foo=1, bar=2).copy(baz=3) assert id(k1) != id(k2) and k1 == k2 # __add__: Key with something else with raises(NotImplementedError): k1 + 4 # Two Keys k2 = Key(foo=1) + Key(bar=2) assert k2 == k1 # __radd__: adding a Key to None produces a Key assert None + k1 == k1 # anything else is an error with raises(NotImplementedError): 4 + k1 # get_values(): preserve ordering assert k1.get_values() == (1, 2, 3)
def test_add_obs(DataSetType): # Create a Key and Attributes key = Key(CURRENCY="NZD", CURRENCY_DENOM="EUR", TIME_PERIOD="2018-01-01") obs_status = DataAttribute(id="OBS_STATUS") attr = {"OBS_STATUS": AttributeValue(value_for=obs_status, value="A")} obs = [] for day, value in enumerate([5, 6, 7]): key = key.copy(TIME_PERIOD="2018-01-{:02d}".format(day)) obs.append(Observation(dimension=key, value=value, attached_attribute=attr)) ds = DataSetType() ds.add_obs(obs) # PandasDataSet does not store Observation objects internally, but should # emit them when the .obs property is accessed assert all(a == b for a, b in zip(ds.obs, obs))