Exemple #1
0
 def content_lines(self):
     "Converts the Component and subcomponents into content lines"
     contentlines = Contentlines()
     for name, values in self.property_items():
         params = getattr(values, 'params', Parameters())
         contentlines.append(Contentline.from_parts((name, params, values)))
     contentlines.append('') # remember the empty string in the end
     return contentlines
Exemple #2
0
 def from_string(st, multiple=False):
     """
     Populates the component recursively from a string
     """
     stack = [] # a stack of components
     comps = []
     for line in Contentlines.from_string(st): # raw parsing
         if not line:
             continue
         name, params, vals = line.parts()
         uname = name.upper()
         # check for start of component
         if uname == 'BEGIN':
             # try and create one of the components defined in the spec,
             # otherwise get a general Components for robustness.
             component_name = vals.upper()
             component_class = component_factory.get(component_name, Component)
             component = component_class()
             if not getattr(component, 'name', ''): # for undefined components
                 component.name = component_name
             stack.append(component)
         # check for end of event
         elif uname == 'END':
             # we are done adding properties to this component
             # so pop it from the stack and add it to the new top.
             component = stack.pop()
             if not stack: # we are at the end
                 comps.append(component)
             else:
                 stack[-1].add_component(component)
         # we are adding properties to the current top of the stack
         else:
             factory = types_factory.for_property(name)
             vals = factory(factory.from_ical(vals))
             vals.params = params
             stack[-1].add(name, vals, encode=0)
     if multiple:
         return comps
     if not len(comps) == 1:
         raise ValueError('Found multiple components where '
                          'only one is allowed')
     return comps[0]