Source code for RCAIDE.Framework.Core.Container


# RCAIDE/Core/Container.py
# 
# 
# Created:  Jul 2023, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------        
import RCAIDE
from .               import Data
from warnings        import warn
import random

import string
chars = string.punctuation + string.whitespace
t_table = str.maketrans( chars          + string.ascii_uppercase , 
                            '_'*len(chars) + string.ascii_lowercase )

# ----------------------------------------------------------------------------------------------------------------------
#  Container
# ----------------------------------------------------------------------------------------------------------------------   

[docs] class Container(Data): """ A dict-type container with attribute, item and index style access intended to hold a attribute-accessible list of Data(). This is unordered. Assumptions: N/A Source: N/A """ def __defaults__(self): """ Defaults function Assumptions: None Source: N/A Inputs: N/A Outputs: N/A Properties Used: N/A """ pass
[docs] def __init__(self,*args,**kwarg): """ Initialization that builds the container Assumptions: None Source: N/A Inputs: self Outputs: N/A Properties Used: N/A """ super(Container,self).__init__(*args,**kwarg) self.__defaults__()
[docs] def append(self,val): """ Appends the value to the containers This overrides the Data class append by allowing for duplicate named components The following components will get new names. Assumptions: None Source: N/A Inputs: self Outputs: N/A Properties Used: N/A """ old_tags = [] old_tags = get_tags(self,old_tags) check_tags(val,old_tags) Data.append(self,val) return
[docs] def extend(self,vals): # """ Append things regressively depending on what is inside. # Assumptions: # None # Source: # N/A # Inputs: # self # Outputs: # N/A # Properties Used: # N/A # """ if isinstance(vals,(list,tuple)): for v in val: self.append(v) elif isinstance(vals,dict): self.update(vals) else: raise Exception('unrecognized data type')
[docs] def get_tags(item,tag_list): if isinstance(item, RCAIDE.Library.Components.Component) or isinstance(item, dict): for s_tag, s_item in item.items(): if 'tag' == s_tag: item.tag = str.lower(s_item.translate(t_table)) tag_list.append(item.tag) if isinstance(s_item, RCAIDE.Library.Components.Component): for ss_tag, ss_item in s_item.items(): if 'tag' == ss_tag: s_item.tag = str.lower(ss_item.translate(t_table)) tag_list.append(s_item.tag) if isinstance(ss_item, RCAIDE.Library.Components.Component): for sss_tag, sss_item in ss_item.items(): if 'tag' == sss_tag: ss_item.tag = str.lower(sss_item.translate(t_table)) tag_list.append(ss_item.tag) if isinstance(sss_item, RCAIDE.Library.Components.Component): for ssss_tag, ssss_item in sss_item.items(): if 'tag' == ssss_tag: sss_item.tag = str.lower(ssss_item.translate(t_table)) tag_list.append(sss_item.tag) return tag_list
[docs] def check_tags(item,tag_list): if isinstance(item, RCAIDE.Library.Components.Component) or isinstance(item, dict): for s_tag, s_item in item.items(): if 'tag' == s_tag: if s_item in tag_list: unmodified_tag = str.lower(s_item.translate(t_table)) string_of_keys = "".join(tag_list) n_comps = string_of_keys.count(unmodified_tag) item.tag = unmodified_tag + str(n_comps+1) else: item.tag = str.lower(s_item.translate(t_table)) tag_list.append(item.tag) if isinstance(s_item, RCAIDE.Library.Components.Component): for ss_tag, ss_item in s_item.items(): if 'tag' == ss_tag: if ss_item in tag_list: unmodified_tag = str.lower(ss_item.translate(t_table)) string_of_keys = "".join(tag_list) n_comps = string_of_keys.count(unmodified_tag) s_item.tag = unmodified_tag + str(n_comps+1) else: s_item.tag = str.lower(ss_item.translate(t_table)) tag_list.append(s_item.tag) if isinstance(ss_item, RCAIDE.Library.Components.Component): for sss_tag, sss_item in ss_item.items(): if 'tag' == sss_tag: if sss_item in tag_list: unmodified_tag = str.lower(sss_item.translate(t_table)) string_of_keys = "".join(tag_list) n_comps = string_of_keys.count(unmodified_tag) ss_item.tag = unmodified_tag + str(n_comps+1) else: ss_item.tag = str.lower(sss_item.translate(t_table)) tag_list.append(ss_item.tag) if isinstance(sss_item, RCAIDE.Library.Components.Component): for ssss_tag, ssss_item in sss_item.items(): if 'tag' == ssss_tag: if ssss_item in tag_list: unmodified_tag = str.lower(ssss_item.translate(t_table)) string_of_keys = "".join(tag_list) n_comps = string_of_keys.count(unmodified_tag) sss_item.tag = unmodified_tag + str(n_comps+1) else: sss_item.tag = str.lower(ssss_item.translate(t_table)) tag_list.append(sss_item.tag) return