Setup none-blocking stream handler for sending loggin to the console.
Exported source
def init_console_logging(name=__name__, level=logging.INFO, timestamp=True):'''Setup none-blocking stream handler for sending loggin to the console.''' logger = logging.getLogger(name)# Only if no handlers defined.ifnot logger.hasHandlers(): logger.setLevel(level) console = logging.StreamHandler() console.setLevel(level)# set a format which is simpler for console useif timestamp: formatter = logging.Formatter("%(asctime)s%(levelname)s\t%(process)d\t%(name)s\t%(filename)s\t%(funcName)s\t%(lineno)d\t%(message)s", datefmt='%Y-%m-%dT%H:%M:%S%z')else: formatter = logging.Formatter("%(levelname)s\t%(process)d\t%(name)s\t%(filename)s\t%(funcName)s\t%(lineno)d\t%(message)s")#formatter = logging.Formatter("%(asctime)s %(levelname)s\t%(process)d\t%(name)s\t%(filename)s\t%(lineno)d\t%(message)s", datefmt='%Y-%m-%dT%H:%M:%S%z')# tell the handler to use this format console.setFormatter(formatter)# add the handler to the root logger logger.addHandler(console) logger.info(f"Installed {console} for {name}")else: logger.info(f'There already is a logger installed for {name}.') logger.propagate =Falsereturn logger
syslog = init_console_logging(__name__)
2025-11-05T15:51:40+0100 INFO 5868 __main__ 2225119750.py 30 Installed <StreamHandler stderr (INFO)> for __main__
syslog.info('Test')
2025-11-05T15:51:40+0100 INFO 5868 __main__ 130201418.py 1 Test
syslog.info('Test 2')
2025-11-05T15:51:40+0100 INFO 5868 __main__ 1107363523.py 1 Test 2
@lru_cache(128)def snake_case_to_camel_case(snake_case:str) ->str: splittext = snake_case.split('_')return''.join([x.capitalize() if n >0else x for x,n inzip(splittext, range(len(splittext)))])
Converts Pandas dataframes and series, Numpy array’s and recarrays or a dictionary of individual timeseries into a Pandas dataframe with one datetime index. With all arrays dataframes and series it is assumed that the first column contains the timestamps.
Convert various tabular data formats to timeseries DataFrame
Args: data (Union[pd.DataFrame, pd.Series, dict, np.ndarray, np.recarray]): The input data to be converted. timezone (str, optional): The timezone to set for the index of the DataFrame. Defaults to ‘UTC’. columnnames (Optional[List[str]]): The column names to use for the DataFrame. Defaults to None.
Returns: pd.DataFrame: The converted timeseries DataFrame with the index set to the specified timezone.
Converts a data dict into a pandas DataFrame based on the specified record format. Parameters: - data: A dictionary containing the data to convert. - timecolumns: A list of column names to be treated as time columns. - recordformat: A string specifying the format of the data records (‘records’, ‘table’, ‘split’, ‘index’, ‘tight’). Returns: - df: A pandas DataFrame with a DatetimeIndex representing the converted data.
Exported source
def timeseries_dataframe_from_datadict( data:dict, timecolumns=None, recordformat='records'):""" Converts a data dict into a pandas DataFrame based on the specified record format. Parameters: - data: A dictionary containing the data to convert. - timecolumns: A list of column names to be treated as time columns. - recordformat: A string specifying the format of the data records ('records', 'table', 'split', 'index', 'tight'). Returns: - df: A pandas DataFrame with a DatetimeIndex representing the converted data. """ orient = recordformat.lower()assert orient in ['records', 'table', 'split', 'index', 'tight']assert timecolumns, 'No time columns specified'if orient =='records':# data is a structured ndarray, sequence of tuples or dicts, or DataFrame df = pd.DataFrame.from_records(data) time_columns_in_df = [C for C in df.columns if C in timecolumns]ifnot time_columns_in_df:#syslog.error(f"No column in records {df.columns} matches specification in time columns {timecolumns}, assuming first column is time") time_column = df.columns[0]else: time_column = time_columns_in_df[0]elif orient =='table':# data is in pandas table format time_column = data['schema']['primaryKey'][0] df = pd.DataFrame.from_dict(data['data']).set_index(data['schema']['primaryKey']) df.index.name ='time'else:# data is formatted according to 'orient' parameter (pandas) df = pd.DataFrame.from_dict(data, orient=orient) # type: ignore time_column = df.index.name df.columns =list(df.columns) df[time_column] = pd.to_datetime(df[time_column],utc=True,format='ISO8601') df.set_index(time_column, inplace=True) df.index = pd.DatetimeIndex(df.index).round('ms') df.index.name ='time'return df