Source code for nettoolkit.pyVig.pyVig


from copy import deepcopy
from .stencils import get_list_of_stencils
from .database import DeviceData, CableMatrixData
from .entities import ItemObjects, Connectors
from .visio import VisioObject

# ------------------------------------------------------------------------- 
# ## pyvig boiler plate code.
# ------------------------------------------------------------------------- 
[docs] def cabling_data_operations(**dic): """create and return cabling data object Args: dic (kwargs): keyword arguments Returns: CableMatrixData: Cablings data object """ cable_matrix_data = CableMatrixData(**dic) return cable_matrix_data
[docs] def device_data_operations(**dic): """creates and returns devices data object after merging columns of the list provided for `cols_to_merge` key Args: dic (kwargs): keyword arguments. Returns: DeviceData: Devices data object """ devices_data = DeviceData(**dic) if 'cols_to_merge' in dic: devices_data.add_description(dic['cols_to_merge']) else: devices_data.add_description([]) return devices_data
[docs] def visio_operations(devices_data, cable_matrix_data, stencils, **dic): """create a VisioObject Args: devices_data (DeviceData): Devices data object cable_matrix_data (CableMatrixData): Cablings data object stencils (list): list of visio stencils dic (kwargs): keyword arguments Returns: None: None """ outputFile = dic['op_file'] if 'op_file' in dic else None with VisioObject(stencils, outputFile) as v: print(f"[+] Information:\tVisio Drawing Inprogress, Do not close Visio Drawing while its running...") if ( ( 'sheet_filters' in dic and dic['sheet_filters']) # and not ('is_sheet_filter' in dic and dic['is_sheet_filter'] != True) ) : for kv in dic['sheet_filters'].items(): if isinstance(kv[1], str): devices_data.x = f'{kv[0]}-x-axis' devices_data.y = f'{kv[0]}-y-axis' repeat_for_filter(v, devices_data, cable_matrix_data, kv[0], kv[1], kv[0], **dic) elif isinstance(kv[1], (list, tuple, set)): for _kv in kv[1]: devices_data.x = f'{kv[0]}-x-axis' devices_data.y = f'{kv[0]}-y-axis' repeat_for_filter(v, devices_data, cable_matrix_data, kv[0], _kv, kv[0] + '_' + _kv, **dic) else: visio_page_operation(v, devices_data, cable_matrix_data, {}, **dic) return None
[docs] def repeat_for_filter(v, devices_data, cable_matrix_data, filt_key, filt_value, page_key=None, **dic ): """starts visio page operation for the given filter Args: v (VisioObject): Visio Object devices_data (DeviceData): Devices data object cable_matrix_data (CableMatrixData): Cablings data object filt_key (str): filter key filt_value (str, tuple, list, set): filter value(s) page_key (str): page key (suffix for filter values in case if multiple filt_values) dic (kwargs): keyword arguments """ flt ={filt_key:filt_value} cmd = deepcopy(cable_matrix_data) visio_page_operation(v, devices_data, cmd, flt, page_key=page_key, **dic)
[docs] def visio_page_operation(v, devices_data, cable_matrix_data, flt, page_key=None, **dic): """operate on visio page Args: v (VisioObject): Visio Object devices_data (DeviceData): Devices data object cable_matrix_data (CableMatrixData): Cablings data object flt (dict): filters {key: value} pairs page_key (str, optional): page key (suffix for filter values in case if multiple filt_values). Defaults to None. dic (kwargs): keyword arguments """ if 'filter_on_include_col' in dic: cable_matrix_data.filter_eligible_cables_only() # [Optional] if 'is_sheet_filter' in dic and dic['is_sheet_filter'] == True: ## condition unnecessary, remove condition in future since taken care by parent function cable_matrix_data.filter(**flt) # [Optional] column=records cable_matrix_data.calc_slop(devices_data) # [Mandatory] calculate cable slop/angle if flt: v.insert_new_page(page_key) else: v.insert_new_page("PhysicalDrawing") filterOnCables = dic['filter_on_cable'] if 'filter_on_cable' in dic else True # item_objects = ItemObjects(v, devices_data, cable_matrix_data, filterOnCables=filterOnCables) Connectors(cable_matrix_data, item_objects) v.fit_to_draw(item_objects.page_height, item_objects.page_width)
[docs] def pyVig(**dic): """main function starting the python based cli - visio generation Args: dic (kwargs): inputs dictionary ( valid and mandatory keys = stencil_folder, data_file ) (valid but optional keys = default_stencil, cols_to_merge, is_sheet_filter, sheet_filters ... and many more from DEFAULT_DIC ) Returns: None: None """ if 'stencil_folder' not in dic: raise Exception(f'[-] Mandatory input "stencil_folder" missing kindly provide.') if 'data_file' not in dic: raise Exception(f'[-] Mandatory input "data_file" missing kindly provide.') # devices_data = device_data_operations(**dic) cable_matrix_data = cabling_data_operations(**dic) # stencils = get_list_of_stencils( folder=dic['stencil_folder'], devices_data=devices_data, ) # visio_operations(devices_data, cable_matrix_data, stencils, **dic) return None
# -------------------------------------------------------------------------