Source code for nettoolkit.pyVig.general


import nettoolkit.nettoolkit_common as nt

# ----------------------------------------------------------------------------------------------------
# Some of static fixed / default values
# ----------------------------------------------------------------------------------------------------
DEFAULT_CONNECTOR_TYPE = 'straight'  ## other options = 'curved', 'angled'
DEFAULT_LINE_COLOR = 'blue'
DEFAULT_LINE_WT = 1
DEFAULT_LINE_PATTERN = 1
DEFAULT_STENCIL = None
DEFAULT_X_COLUMN = 'x-axis'
DEFAULT_Y_COLUMN = 'y-axis'
DEFAULT_DEVICES_TAB = 'Devices'
DEFAULT_CABLINGS_TAB = 'Cablings'
# ----------------------------------------------------------------------------------------------------


[docs] def get_physical_if_up(df): """filter the DataFrame rows for active/enabled physical interfaces Args: df (DataFrame): pandas DataFrame Returns: DataFrame: udpated DataFrame """ try: return df[ (df['link_status'] != 'administratively down')| (df['link_status'] != 'Enabled')].fillna("") except: return df
[docs] def get_physical_if_relevants(df, relevant_cols = ['interface', 'nbr_dev_type', 'int_filter', 'nbr_hostname', 'nbr_interface', 'vlan_members', 'media_type'] ): """filters the DataFrame columns for relevant columns Args: df (DataFrame): pandas DataFrame relevant_cols (list, optional): list of relevant columns. Defaults to ['interface', 'nbr_dev_type', 'int_filter', 'nbr_hostname', 'nbr_interface', 'vlan_members',]. Returns: DataFrame: udpated DataFrame """ try: return df[relevant_cols] except: return df
# ---------------------------------------------
[docs] def get_vlan_if_up(df): """filter the DataFrame rows for active/enabled vlan/irb interfaces Args: df (DataFrame): pandas DataFrame Returns: DataFrame: udpated DataFrame """ try: return df[ (df['link_status'] != 'administratively down')| (df['link_status'] != 'Enabled')].fillna("") except: return df
[docs] def get_vlan_if_relevants(df, relevant_cols = ['int_number', 'interface', 'intvrf', 'subnet' ]): """filters the DataFrame columns for relevant columns Args: df (DataFrame): pandas DataFrame relevant_cols (list, optional): list of relevant columns. Defaults to ['int_number', 'interface', 'intvrf', 'subnet' ]. Returns: DataFrame: udpated DataFrame """ try: return df[relevant_cols] except: return df
# ---------------------------------------------
[docs] def get_patterns(df, line_pattern_style_separation_on, line_pattern_style_shift_no): """get the line pattern numbers for the unique line styles require based on `line_pattern_style_separation_on` Args: df (DataFrame): pandas DataFrame line_pattern_style_separation_on (str): DataFrame Column name on which line patters to be separated line_pattern_style_shift_no (int): line pattern skip step number. Returns: dict: dictionary of unique line pattern identifies with its shift number. """ if not line_pattern_style_separation_on: return None uniq_medias = df[line_pattern_style_separation_on].unique() media_pattern = {} for m in uniq_medias: for n in range(1, 10000, line_pattern_style_shift_no): if n in media_pattern.values(): continue media_pattern[m] = n break return media_pattern
[docs] def update_pattern(df, patterns, line_pattern_style_separation_on): """update the line pattern column for the unique line styles require based on column `line_pattern_style_separation_on` Args: df (DataFrame): pandas DataFrame patterns (dict): dictionary of unique line pattern identifies with its shift number line_pattern_style_separation_on (str): DataFrame Column name on which line patters to be separated Returns: DataFrame: updated DataFrame """ if not line_pattern_style_separation_on: return df df['pattern'] = df[line_pattern_style_separation_on].apply(lambda x: patterns[x]) return df
# ---------------------------------------------
[docs] def series_item_0_value(s): """returns the first item value of a series Args: s (series): pandas series object Returns: str: value from series """ for x in s: return x
[docs] def get_vlans_info(vlan_members, vlan_df): """get the vlan-vrf-subnet information string for provided vlan number(s) from vlan DataFrame Args: vlan_members (str, int): a single vlan number or vlan numbers separated by comma vlan_df (DataFrame): DataFrame from `vlan` tab of -clean excel file Returns: str: concatenated string of vlan-vrf-subnet information. """ if isinstance(vlan_members, float): vlan_members = [int(vlan_members)] else: vlan_members = nt.LST.remove_empty_members(vlan_members.split(",")) s = '' # print(vlan_members) if len(vlan_members) == 0: return s for vlan in vlan_members: try: vlan = int(vlan) s += __get_a_vlan_info_string(vlan_df, vlan) except ValueError: try: vlans = vlan.split("-") for v in range(int(vlans[0]), int(vlans[1])+1): s+= __get_a_vlan_info_string(vlan_df, v) except: pass return s
## return vlan information string for matching vlan number from given dataframe db def __get_a_vlan_info_string(vlan_df, vlan): s = "" try: df = vlan_df[vlan_df['int_number'] == vlan] if df.empty: return s s += series_item_0_value(df['interface']) + " " s += series_item_0_value(df['intvrf']) + " " s += series_item_0_value(df['subnet']) + "\n" except: print(f'[-] Information:\tmissing information for vlan: {vlan}') return s
[docs] def update_vlans_info(int_df, vlan_df): """add `vlan_info` [column] to interface DataFrame using help of vlan DataFrame Args: int_df (DataFrame): interface DataFrame vlan_df (DataFrame): DataFrame from `vlan` tab of -clean excel file Returns: DataFrame: updated interface DataFrame """ int_df['vlan_info'] = int_df['vlan_members'].apply(lambda x: get_vlans_info(x, vlan_df)) return int_df
# ---------------------------------------------
[docs] def drop_empty(df, column): """remove emptry rows found for given column Args: df (DataFrame): pandas DataFrame column (str): column name Returns: DataFrame: data filtered DataFrame """ return df[df[column] != ""]
# ---------------------------------------------
[docs] def get_item_first(s): """get first index item Args: s (series): pandas series Returns: str: first item from provided Pandas Series """ for x in s: return x
[docs] def update_merged_df_series(merged_df_ser_hostname, merged_df_series_key, key, value, hostname): """update merged dataframe series Args: merged_df_ser_hostname (series): hostname series merged_df_series_key (series): key series key (str): key value value (str): value hostname (str): hostname to match with Returns: str: matched result """ if merged_df_ser_hostname == hostname: if merged_df_series_key: r = merged_df_series_key else: r = value else: r = merged_df_series_key return r
[docs] def get_dev_serial(var_df=None, update=False, merged_df_ser_hostname=None, merged_df_series_key=None, key=None, value=None, hostname=None): """either get serial number from var tab or update full series with serial numbers Args: var_df (DataFrame, optional): var DataFrame. Defaults to None. update (bool, optional): updating full series or not. Defaults to False. merged_df_ser_hostname (series, optional): hostnames series. Defaults to None. merged_df_series_key (key, optional): series key name. Defaults to None. key (str, optional): series key. Defaults to None. value (value, optional): result value. Defaults to None. hostname (str, optional): hostname to match with. Defaults to None. Returns: str, series: return serial number based on update """ if not update: return get_item_first(var_df[(var_df['var'] == 'serial')]['default']) else: return update_merged_df_series(merged_df_ser_hostname, merged_df_series_key, key, value, hostname)
[docs] def get_dev_model(var_df=None, update=False, merged_df_ser_hostname=None, merged_df_series_key=None, key=None, value=None, hostname=None): """either get device model from var tab or update full series with device model Args: var_df (DataFrame, optional): var DataFrame. Defaults to None. update (bool, optional): updating full series or not. Defaults to False. merged_df_ser_hostname (series, optional): hostnames series. Defaults to None. merged_df_series_key (key, optional): series key name. Defaults to None. key (str, optional): series key. Defaults to None. value (value, optional): result value. Defaults to None. hostname (str, optional): hostname to match with. Defaults to None. Returns: str, series: return device model based on update """ if not update: return get_item_first(var_df[(var_df['var'] == 'model')]['default']) else: return update_merged_df_series(merged_df_ser_hostname, merged_df_series_key, key, value, hostname)
[docs] def get_dev_hostname(var_df=None, update=False, merged_df_ser_hostname=None, merged_df_series_key=None, key=None, value=None, hostname=None): """either get device hostname from var tab or update full series with device hostname Args: var_df (DataFrame, optional): var DataFrame. Defaults to None. update (bool, optional): updating full series or not. Defaults to False. merged_df_ser_hostname (series, optional): hostnames series. Defaults to None. merged_df_series_key (key, optional): series key name. Defaults to None. key (str, optional): series key. Defaults to None. value (value, optional): result value. Defaults to None. hostname (str, optional): hostname to match with. Defaults to None. Returns: str, series: return device hostname based on update """ if not update: return get_item_first(var_df[(var_df['var'] == 'hostname')]['default']) else: return update_merged_df_series(merged_df_ser_hostname, merged_df_series_key, key, value, hostname)