(cls, obj)
Create PRODID, VERSION, and VTIMEZONEs if needed.

        VTIMEZONEs will need to exist whenever TZID parameters exist or when
        datetimes with tzinfo exist.
Create PRODID, VERSION, and VTIMEZONEs if needed.
Create PRODID VERSION and VTIMEZONEs if needed .
def generateImplicitParameters(cls, obj):
        """
        Create PRODID, VERSION, and VTIMEZONEs if needed.

        VTIMEZONEs will need to exist whenever TZID parameters exist or when
        datetimes with tzinfo exist.
        """
        for comp in obj.components():
            if comp.behavior is not None:
                comp.behavior.generateImplicitParameters(comp)
        if not hasattr(obj, 'prodid'):
            obj.add(ContentLine('PRODID', [], PRODID))
        if not hasattr(obj, 'version'):
            obj.add(ContentLine('VERSION', [], cls.versionString))
        tzidsUsed = {}

        def findTzids(obj, table):
            if isinstance(obj, ContentLine) and (obj.behavior is None or
                                                 not obj.behavior.forceUTC):
                if getattr(obj, 'tzid_param', None):
                    table[obj.tzid_param] = 1
                else:
                    if type(obj.value) == list:
                        for item in obj.value:
                            tzinfo = getattr(obj.value, 'tzinfo', None)
                            tzid = TimezoneComponent.registerTzinfo(tzinfo)
                            if tzid:
                                table[tzid] = 1
                    else:
                        tzinfo = getattr(obj.value, 'tzinfo', None)
                        tzid = TimezoneComponent.registerTzinfo(tzinfo)
                        if tzid:
                            table[tzid] = 1
            for child in obj.getChildren():
                if obj.name != 'VTIMEZONE':
                    findTzids(child, table)

        findTzids(obj, tzidsUsed)
        oldtzids = [toUnicode(x.tzid.value) for x in getattr(obj, 'vtimezone_list', [])]
        for tzid in tzidsUsed.keys():
            tzid = toUnicode(tzid)
            if tzid != u'UTC' and tzid not in oldtzids:
                obj.add(TimezoneComponent(tzinfo=getTzid(tzid)))
def generateImplicitParameters ( cls , obj ) : for comp in obj . components ( ) : if comp . behavior is not None : comp . behavior . generateImplicitParameters ( comp ) if not hasattr ( obj , 'prodid' ) : obj . add ( ContentLine ( 'PRODID' , [ ] , PRODID ) ) if not hasattr ( obj , 'version' ) : obj . add ( ContentLine ( 'VERSION' , [ ] , cls . versionString ) ) tzidsUsed = { } def findTzids ( obj , table ) : if isinstance ( obj , ContentLine ) and ( obj . behavior is None or not obj . behavior . forceUTC ) : if getattr ( obj , 'tzid_param' , None ) : table [ obj . tzid_param ] = 1 else : if type ( obj . value ) == list : for item in obj . value : tzinfo = getattr ( obj . value , 'tzinfo' , None ) tzid = TimezoneComponent . registerTzinfo ( tzinfo ) if tzid : table [ tzid ] = 1 else : tzinfo = getattr ( obj . value , 'tzinfo' , None ) tzid = TimezoneComponent . registerTzinfo ( tzinfo ) if tzid : table [ tzid ] = 1 for child in obj . getChildren ( ) : if obj . name != 'VTIMEZONE' : findTzids ( child , table ) findTzids ( obj , tzidsUsed ) oldtzids = [ toUnicode ( x . tzid . value ) for x in getattr ( obj , 'vtimezone_list' , [ ] ) ] for tzid in tzidsUsed . keys ( ) : tzid = toUnicode ( tzid ) if tzid != u'UTC' and tzid not in oldtzids : obj . add ( TimezoneComponent ( tzinfo = getTzid ( tzid ) ) )