tdfs4ds 0.2.4.13__py3-none-any.whl → 0.2.4.14__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.
tdfs4ds/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = '0.2.4.13'
1
+ __version__ = '0.2.4.14'
2
2
  import logging
3
3
  # Setup the logger
4
4
  logging.basicConfig(
@@ -27,8 +27,8 @@ FOLLOW_UP_NAME = 'FS_FOLLOW_UP'
27
27
  DATA_DISTRIBUTION_TEMPORAL = False
28
28
  FILTER_MANAGER_NAME = 'FS_FILTER_MANAGER'
29
29
 
30
- END_PERIOD = 'UNTIL_CHANGED' #'9999-01-01 00:00:00'
31
- FEATURE_STORE_TIME = None #'9999-01-01 00:00:00'
30
+ END_PERIOD = 'UNTIL_CHANGED' #'9999-01-01 00:00:00+00:00'
31
+ FEATURE_STORE_TIME = None #'9999-01-01 00:00:00+00:00'
32
32
  FEATURE_VERSION_DEFAULT = 'dev.0.0'
33
33
  DISPLAY_LOGS = True
34
34
  DEBUG_MODE = False
@@ -3,6 +3,7 @@ import datetime
3
3
 
4
4
  import tdfs4ds
5
5
  import numpy as np
6
+ import pandas as pd
6
7
 
7
8
  def get_hidden_table_name(table_name):
8
9
  return table_name + '_HIDDEN'
@@ -58,14 +59,20 @@ class TimeManager:
58
59
  'BUSINESS_DATE' : df[time_column]
59
60
  })[['time_id','BUSINESS_DATE']]
60
61
 
62
+ type_BUSINESS_DATE = tdfs4ds.utils.info.get_feature_types_sql_format(df_)['BUSINESS_DATE']
63
+ if 'TIMESTAMP' in type_BUSINESS_DATE.upper() and 'ZONE' not in type_BUSINESS_DATE.upper():
64
+ print(f"data type of the time colum has been modified from {type_BUSINESS_DATE} to {type_BUSINESS_DATE + ' WITH TIME ZONE'}")
65
+ type_BUSINESS_DATE = type_BUSINESS_DATE + ' WITH TIME ZONE'
66
+ df_ = df_.assign(type_BUSINESS_DATE = tdml.sqlalchemy.literal_column(f"CAST(BUSINESS_DATE AS {type_BUSINESS_DATE})"))
67
+
61
68
  d_ = {x[0]: x[1] for x in df_._td_column_names_and_types}
62
- self.data_type = d_['BUSINESS_DATE']
69
+ self.data_type = type_BUSINESS_DATE #d_['BUSINESS_DATE']
63
70
 
64
71
  df_.to_sql(
65
72
  table_name = self.table_name,
66
73
  schema_name = self.schema_name,
67
74
  if_exists = 'replace',
68
- primary_index = ['time_id']
75
+ primary_index = ['time_id'],
69
76
  )
70
77
 
71
78
  query = f"""
@@ -127,36 +134,40 @@ class TimeManager:
127
134
  Returns:
128
135
  DataFrame: The table data as a DataFrame.
129
136
  """
130
- return tdml.DataFrame(tdml.in_schema(self.schema_name, self.view_name))
137
+
138
+ cols = tdml.DataFrame(tdml.in_schema(self.schema_name, self.view_name)).columns
139
+ return pd.DataFrame(tdml.execute_sql(f"SEL * FROM {self.schema_name}.{self.view_name}").fetchall(), columns=cols)
131
140
 
132
141
  def get_date_in_the_past(self):
133
142
  """
134
143
  Retrieves the earliest date and time value from the table.
135
144
 
136
145
  Returns:
137
- str: The earliest date and time value as a formatted string ('YYYY-MM-DD HH:MM:SS').
146
+ str: The earliest date and time value as a formatted string
147
+ ('YYYY-MM-DD HH:MM:SS±HH:MM' if timezone is available, else 'YYYY-MM-DD HH:MM:SS').
138
148
  """
139
- # '9999-01-01 00:00:00'
140
- date_obj = self.display().to_pandas().reset_index().BUSINESS_DATE.values[0]
149
+ # Use iloc to preserve timezone awareness from pandas
150
+ date_obj = self.display().BUSINESS_DATE.iloc[0]
141
151
 
142
- if isinstance(date_obj, datetime.datetime):
143
- # print("temp is a datetime.datetime object")
152
+ if isinstance(date_obj, pd.Timestamp):
153
+ datetime_obj = date_obj.to_pydatetime()
154
+ elif isinstance(date_obj, datetime.datetime):
144
155
  datetime_obj = date_obj
145
156
  elif isinstance(date_obj, datetime.date):
146
- # print("temp is a datetime.date object")
147
- # Convert date object to a datetime object at midnight (00:00:00)
148
157
  datetime_obj = datetime.datetime.combine(date_obj, datetime.time.min)
149
158
  elif isinstance(date_obj, np.datetime64):
150
- # Case when the object is a numpy.datetime64, convert it to datetime
151
- datetime_obj = date_obj.astype('datetime64[ms]').astype(datetime.datetime)
159
+ datetime_obj = pd.to_datetime(date_obj).to_pydatetime()
152
160
  else:
153
- print("temp is neither a datetime.date nor a datetime.datetime object")
161
+ print("temp is of unrecognized type")
154
162
  print('temp', date_obj)
155
163
  print('temp type', type(date_obj))
156
164
  return
157
165
 
158
- # Convert datetime object to string
159
- output_string = datetime_obj.strftime("%Y-%m-%d %H:%M:%S")
166
+ # Format with timezone offset if available
167
+ if datetime_obj.tzinfo is not None and datetime_obj.tzinfo.utcoffset(datetime_obj) is not None:
168
+ output_string = datetime_obj.isoformat(sep=' ', timespec='seconds')
169
+ else:
170
+ output_string = datetime_obj.strftime("%Y-%m-%d %H:%M:%S")
160
171
 
161
172
  return output_string
162
173
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tdfs4ds
3
- Version: 0.2.4.13
3
+ Version: 0.2.4.14
4
4
  Summary: A python package to simplify the usage of feature store using Teradata Vantage ...
5
5
  Author: Denis Molin
6
6
  Requires-Python: >=3.6
@@ -2,7 +2,7 @@ tdfs/__init__.py,sha256=7AcO7uB1opRCt7t2JOHworKimfAaDeO3boRW7u9Geo8,23
2
2
  tdfs/datasets.py,sha256=-b2MPEKGki2V1M8iUcoDR9uc2krIK7u1CK-EhChvihs,985
3
3
  tdfs/feature_store.py,sha256=Honu7eOAXxP4Ivz0mRlhuNkfTDzgZl5HB1WlQUwzcZ0,31354
4
4
  tdfs/data/curves.csv,sha256=q0Tm-0yu7VMK4lHvHpgi1LMeRq0lO5gJy2Q17brKbEM,112488
5
- tdfs4ds/__init__.py,sha256=lAuC88U7w8sXMOnyq-XvncIkBeQu4Mb0Qs6xt-leY0s,65845
5
+ tdfs4ds/__init__.py,sha256=GfLqTgZOCeV0h2_ceuOsqeVQmb1kN4X9RTlkeTZ-86w,65857
6
6
  tdfs4ds/datasets.py,sha256=LE4Gn0muwdyrIrCrbkE92cnafUML63z1lj5bFIIVzmc,3524
7
7
  tdfs4ds/feature_engineering.py,sha256=oVnZ2V_XNGE12LKC_fNfkrWSQZLgtYRmaf8Dispi6S4,7081
8
8
  tdfs4ds/feature_store.py,sha256=y-oItPZw6nBkBcGAceaATZbkLPTsvpk0OnpzTxYofDs,68576
@@ -27,9 +27,9 @@ tdfs4ds/utils/filter_management.py,sha256=7D47N_hnTSUVOkaV2XuKrlUFMxzWjDsCBvRYsH
27
27
  tdfs4ds/utils/info.py,sha256=sShnUxXMlvCtQ6xtShDhqdpTr6sMG0dZQhNBFgUENDY,12058
28
28
  tdfs4ds/utils/lineage.py,sha256=LI-5pG7D8lO3-YFa9qA6CrEackiYugV23_Vz9IpF5xw,28670
29
29
  tdfs4ds/utils/query_management.py,sha256=nAcE8QY1GWAKgOtb-ubSfDVcnYbU7Ge8CruVRLoPtmY,6356
30
- tdfs4ds/utils/time_management.py,sha256=_jbwdyZH4Yr3VzbUrq6X93FpXDCDEdH0iv56vX7j8mA,8446
30
+ tdfs4ds/utils/time_management.py,sha256=rVxtIXcFtQih2UabAtos4DK-j9MPqzYVieIz_SvySZE,9241
31
31
  tdfs4ds/utils/visualization.py,sha256=5S528KoKzzkrAdCxfy7ecyqKvAXBoibNvHwz_u5ISMs,23167
32
- tdfs4ds-0.2.4.13.dist-info/METADATA,sha256=b-SwW84vY9Hs3MS10r01QPUpn2p_onb7Hf-F-Xuw5Eg,11945
33
- tdfs4ds-0.2.4.13.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
34
- tdfs4ds-0.2.4.13.dist-info/top_level.txt,sha256=wMyVkMvnBn8RRt1xBveGQxOpWFijPMPkMiE7G2mi8zo,8
35
- tdfs4ds-0.2.4.13.dist-info/RECORD,,
32
+ tdfs4ds-0.2.4.14.dist-info/METADATA,sha256=uaiMXMjkNR7aA6yZitLJEYAzdigDKhF5ozzm7bJPrlA,11945
33
+ tdfs4ds-0.2.4.14.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
34
+ tdfs4ds-0.2.4.14.dist-info/top_level.txt,sha256=wMyVkMvnBn8RRt1xBveGQxOpWFijPMPkMiE7G2mi8zo,8
35
+ tdfs4ds-0.2.4.14.dist-info/RECORD,,