Пример #1
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)

    savepoint_counter = 0

    # Groups are no longer allowed as members of a section.
    groups = findObjectsProviding(root, IGroup)
    for group in groups:
        targets = getRelatedObjects(group, URIGroup, rel_type=URIMembership)
        group_members = getRelatedObjects(group,
                                          URIMember,
                                          rel_type=URIMembership)

        for target in targets:
            target_members = getRelatedObjects(target,
                                               URIMember,
                                               rel_type=URIMembership)
            for member in group_members:
                if member not in target_members:
                    relate(URIMembership, (member, URIMember),
                           (target, URIGroup))
                savepoint_counter += 1
            unrelate(URIMembership, (group, URIMember), (target, URIGroup))
        if savepoint_counter % 2000 == 0:
            transaction.savepoint(optimistic=True)

    # Courses gained several new attributes, fill in their course_id
    courses = findObjectsProviding(root, ICourse)
    for course in courses:
        if getattr(course, 'course_id', None) is None:
            course.course_id = course.__name__
Пример #2
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)

    savepoint_counter = 0

    # Groups are no longer allowed as members of a section.
    groups = findObjectsProviding(root, IGroup)
    for group in groups:
        targets = getRelatedObjects(
            group, URIGroup, rel_type=URIMembership)
        group_members = getRelatedObjects(
            group, URIMember, rel_type=URIMembership)

        for target in targets:
            target_members = getRelatedObjects(
                target, URIMember, rel_type=URIMembership)
            for member in group_members:
                if member not in target_members:
                    relate(URIMembership,
                           (member, URIMember),
                           (target, URIGroup))
                savepoint_counter += 1
            unrelate(URIMembership,
                     (group, URIMember),
                     (target, URIGroup))
        if savepoint_counter % 2000 == 0:
            transaction.savepoint(optimistic=True)

    # Courses gained several new attributes, fill in their course_id
    courses = findObjectsProviding(root, ICourse)
    for course in courses:
        if getattr(course, 'course_id', None) is None:
            course.course_id = course.__name__
Пример #3
0
def evolve(context):
    """Setup catalog and indices for fulltext search."""
    root = getRootFolder(context)
    for site in findObjectsProviding(root, IWorldCookerySite):
        sm = site.getSiteManager()
        if u'catalog' not in sm:
            setupCatalogAndIndices(ObjectEvent(site))

            setSite(site)
            for recipe in findObjectsProviding(site, IRecipe):
                addIntIdSubscriber(recipe, ObjectEvent(recipe))
                indexDocSubscriber(ObjectEvent(recipe))
            setSite(None)
Пример #4
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)
    old_site = getSite()

    apps = findObjectsProviding(root, ISchoolToolApplication)
    for app in apps:
        setSite(app)
        timetables = findObjectsProviding(root, ITimetable)
        for tt in timetables:
            event = ObjectModifiedEvent(tt)
            update = UpdateSelectedPeriodsSchedules(event, tt)
            update()
    setSite(old_site)
Пример #5
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)

    old_site = getSite()
    apps = findObjectsProviding(root, ISchoolToolApplication)
    for app in apps:
        setSite(app)
        # vivify person contact information
        persons = findObjectsProviding(app, IPerson)
        for person in persons:
            contact = IContact(person, None)

    setSite(old_site)
Пример #6
0
def evolve(context):
    """Evolve the ZODB from a Zope 3.1 to a 3.2 compatible format.

    - Converts all internal principals to use new password managers.
    """
    root = getRootFolder(context)

    for site in findObjectsProviding(root, ISite):
        sm = site.getSiteManager()
        for principal in findObjectsProviding(sm, IInternalPrincipal):
            if not hasattr(principal, "_passwordManagerName"):
                principal._passwordManagerName = "Plain Text"
            if not hasattr(principal, "_password"):
                principal._password = principal.__dict__["password"]
                del principal.__dict__["password"]
Пример #7
0
def evolve(context):
    u"""
    convert object from hard coded oid1 and oid2 to list of addresses
    """

    root = getRootFolder(context) # the Zope-Root-Folders

    for iksnmpvalue in findObjectsProviding(root, ISnmpValue):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print "SNMP Value(%s): " % iksnmpvalue.ikName + evolve_msg
        if iksnmpvalue.oid1 is not None:
            if iksnmpvalue.oid2 is not None:
                if iksnmpvalue.oid1 == iksnmpvalue.oid2:
                    iksnmpvalue.inp_addrs = [iksnmpvalue.oid1]
                else:
                    iksnmpvalue.inp_addrs = [iksnmpvalue.oid1,
                                            iksnmpvalue.oid2]
            else:
                iksnmpvalue.inp_addrs = [iksnmpvalue.oid1]
        else:
            if iksnmpvalue.oid2 is not None:
                iksnmpvalue.inp_addrs = [iksnmpvalue.oid2]
            else:
                iksnmpvalue.inp_addrs = []
        if iksnmpvalue.checktype == u"oid":
            iksnmpvalue.checktype = u"address"
        del iksnmpvalue.oid1
        del iksnmpvalue.oid2
        iksnmpvalue.appendHistoryEntry(evolve_msg)
Пример #8
0
def evolve(context):
    """ Add a commentary folder and its relation catalog."""
    root = getRootFolder(context)

    site = None
    for s in findObjectsProviding(root, IQuotationtoolSite):
        site = s
        break
    if site is None: raise Exception('No quotationtool site')
    hooks.setSite(site)

    sm = site.getSiteManager()

    container = site['aboutreferences'] = CommentAboutReferenceContainer()
    sm.registerUtility(container, ICommentAboutReferenceContainer)

    IWriteZopeDublinCore(container).title = u"Comments about References"

    IWriteZopeDublinCore(
        container
    ).description = u"""Comments about references in the referatory are stored here."""

    cat = sm['default'][
        'commentaboutreference_relation_catalog'] = zc.relation.catalog.Catalog(
            dump, load)
    cat.addValueIndex(ICommentAboutReference['reference'], dump, load)

    sm.registerUtility(cat,
                       zc.relation.interfaces.ICatalog,
                       name='commentsaboutreferences')
Пример #9
0
def evolve(context):
    u"""
    event stores dynamic host group
    """
    convertDict = {
        u'dns': u'DNS-Server',
        u'file': u'File-Server',
        u'misc': u'Miscellaneous-Server',
        u'smtp': u'SMTP-Server',
        u'terminal': u'Terminal-Server',
        u'util': u'Utility-Server',
        u'workstation': u'Workstation',
    }

    root = getRootFolder(context)  # the Zope-Root-Folders
    sitemanager = root.getSiteManager()
    default = sitemanager['default']
    eventUtil = default[u'AdmUtilEventCrossbar']

    for obj in findObjectsProviding(eventUtil, IAdmUtilEvent):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        if convertDict.has_key(event.hostGroup):
            event.hostGroup = None
            event._p_changed = True
        print "Object(%s): " % obj.ikName + evolve_msg
        obj.appendHistoryEntry(evolve_msg)
def evolve(context):

    root = getRootFolder(context)

    site = None
    for s in findObjectsProviding(root, IQuotationtoolSite):
        site = s
        break
    if site is None: raise Exception('No quotationtool site')
    hooks.setSite(site)

    sm = site.getSiteManager()

    # a container for unified comments was added
    container = site['comments'] = CommentContainer()
    sm.registerUtility(container, ICommentContainer)
    IWriteZopeDublinCore(container).title = u"Comments"
    IWriteZopeDublinCore(
        container).description = u"""Comments are stored here."""

    # relation catalog has changed because of unified comments
    cat = zope.component.getUtility(zc.relation.interfaces.ICatalog,
                                    context=site)
    cat.removeValueIndex('icommentaboutfigure-figure')
    cat.removeValueIndex('icommentaboutreference-reference')
    cat.addValueIndex(IComment['about'],
                      dump=dump,
                      load=load,
                      name='icomment-about')
Пример #11
0
def evolve(context):
    u"""
    host stores dynamic host groups
    """
    convertDict = {
        u'dns': u'DNS-Server',
        u'file': u'File-Server',
        u'misc': u'Miscellaneous-Server',
        u'smtp': u'SMTP-Server',
        u'terminal': u'Terminal-Server',
        u'util': u'Utility-Server',
        u'workstation': u'Workstation',
    }

    root = getRootFolder(context) # the Zope-Root-Folders

    for host in findObjectsProviding(root, IHost):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print "Host(%s): " % host.ikName + evolve_msg
        toDelete = []
        for oldHostGroup in host.hostGroups:
            if convertDict.has_key(oldHostGroup):
                print "delete host group ", oldHostGroup
                toDelete.append(oldHostGroup)
        for i_index in toDelete:
            host.hostGroups.remove(i_index)
        host._p_changed = True
        host.appendHistoryEntry(evolve_msg)
Пример #12
0
def evolve(context):
    """Setup client ID manager and session data container."""
    root = getRootFolder(context)
    for site in findObjectsProviding(root, IWorldCookerySite):
        sm = site.getSiteManager()
        if u'session_data' not in sm:
            setUpClientIdAndSessionDataContainer(ObjectEvent(site))
Пример #13
0
def evolve(context):
    """Evolve the ZODB.

    - Remove sessionLanguage from INegotiator utilities

    - Convert _offeredLangauges attribute to offeredLangauges property

    """
    root = getRootFolder(context)

    for site in findObjectsProviding(root, ISite):

        # check if we got the right object
        obj = zope.component.queryUtility(INegotiator, context=site)
        if interfaces.INegotiatorManager.providedBy(obj):

            # remove old unused ``sessionLanguages`` attr from all objects
            delattr(obj, '_sessionLanguages')

            # migrate ``_serverLanguage`` to ``serverLanguage``
            serverLanguage = getattr(obj, '_serverLanguage')
            if not serverLanguage:
                serverLanguage = u'en'
            setattr(obj, 'serverLanguage', serverLanguage)
            delattr(obj, '_serverLanguage')

            # migrate ``_offeredLanguages`` to ``offeredLanguages``
            offeredLanguages = getattr(obj, '_offeredLanguages')
            setattr(obj, 'offeredLanguages', offeredLanguages)
            delattr(obj, '_offeredLanguages')
def evolve(context):

    root = getRootFolder(context)

    site = None
    for s in findObjectsProviding(root, IQuotationtoolSite):
        site = s
        break
    if site is None: raise Exception('No quotationtool site')
    hooks.setSite(site)

    sm = site.getSiteManager()

    # a container for unified comments was added
    categorizable_items = site[
        'categorizableitems'] = CategorizableItemDescriptions()
    sm.registerUtility(categorizable_items, ICategorizableItemDescriptions)
    IWriteZopeDublinCore(
        categorizable_items).title = u"Categorizable Item Descriptions"
    IWriteZopeDublinCore(
        categorizable_items
    ).description = u"""Mapping of ZOPE-Interfaces to user friendly identifiers."""

    categories = site['categories'] = CategoriesContainer()
    sm.registerUtility(categories, ICategoriesContainer)
    IWriteZopeDublinCore(categorizable_items).title = u"Categories"
    IWriteZopeDublinCore(
        categorizable_items
    ).description = u"""User defined categories for classifying user content."""
Пример #15
0
def evolve(context):
    """Add tzinfo to timestamp of ratings"""
    for ratable in findObjectsProviding(getRootFolder(context), IRatable):
        manager = IRatingsManager(ratable)
        for d in manager._storage.values():
            for rating in d.values():
                if rating._timestamp.tzinfo is None:
                    rating._timestamp = rating._timestamp.replace(tzinfo=UTC)
Пример #16
0
def evolve(context):
    root = context.connection.root().get(ZopePublication.root_name, None)

    old_site = getSite()
    apps = findObjectsProviding(root, ISchoolToolApplication)
    for app in apps:
        for year in ISchoolYearContainer(app).values():
            fixYear(year, app)
    setSite(old_site)
Пример #17
0
def evolve(context):
    u"""
    convert object to new standard
    """
    root = getRootFolder(context)  # the Zope-Root-Folders
    for host in findObjectsProviding(root, IHostRouterGeneral):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print "Host(%s): " % host.ikName + evolve_msg
        host.appendHistoryEntry(evolve_msg)
Пример #18
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)

    for app in findObjectsProviding(root, ISchoolToolApplication):
        persons = app['persons']
        for person in persons.values():
            del person.email
            del person.phone
            if hasattr(person, 'gradeclass'):
                del person.gradeclass
Пример #19
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)

    apps = findObjectsProviding(root, ISchoolToolApplication)
    for app in apps:
        container = IEmailContainer(app, None)
        if container is None:
            continue
        if getattr(container, 'enabled', None) is None:
            container.enabled = bool(container.hostname)
Пример #20
0
def evolve(context):
    u"""
    initial generation
    """
    root = getRootFolder(context)  # the Zope-Root-Folders
    for obj in findObjectsProviding(root, IAdmUtilCategories):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print "Object(%s): " % obj.ikName + evolve_msg
        obj.appendHistoryEntry(evolve_msg)
Пример #21
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)

    for app in findObjectsProviding(root, ISchoolToolApplication):
        persons = app['persons']
        for person in persons.values():
            del person.email
            del person.phone
            if hasattr(person, 'gradeclass'):
                del person.gradeclass
Пример #22
0
def evolve(context):
    u"""
    convert object to new standard
    """
    root = getRootFolder(context) # the Zope-Root-Folders

    for service in findObjectsProviding(root, IServiceHttp):
        evolve_msg = "gen. %d (%s)" % \
            (generation, evolve.__doc__.strip())
        print "Service(%s): " % service.ikName + evolve_msg
        service.appendHistoryEntry(evolve_msg)
Пример #23
0
def evolve(context):
    u"""
    ssh service object now supports port number
    """
    root = getRootFolder(context)  # the Zope-Root-Folders
    for service in findObjectsProviding(root, IServiceSsh):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print "Service(%s): " % service.ikName + evolve_msg
        # todo ....
        service.appendHistoryEntry(evolve_msg)
Пример #24
0
def evolve(context):
    u"""
    net object now with shortName ipnet
    """
    root = getRootFolder(context)  # the Zope-Root-Folders

    for net in findObjectsProviding(root, IIpNet):
        # convert this object
        evolve_msg = u"gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        net.shortName = "ipnet"
        net.appendHistoryEntry(evolve_msg)
Пример #25
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = getRootFolder(context)

    old_site = getSite()
    apps = findObjectsProviding(root, ISchoolToolApplication)
    for app in apps:
        setSite(app)
        for person in app['persons'].values():
            evolvePerson(person)

    setSite(old_site)
Пример #26
0
def evolve(context):
    u"""
    convert object to new standard
    """

    root = getRootFolder(context)  # the Zope-Root-Folders

    for ikobj in findObjectsProviding(root, IDevice):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        ikobj.appendHistoryEntry(evolve_msg)
Пример #27
0
def evolve(context):
    u"""
    convert object to new standard
    """

    root = getRootFolder(context)  # the Zope-Root-Folders

    for iklatency in findObjectsProviding(root, ILatency):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print "Latency Check(%s): " % iklatency.ikName + evolve_msg
        iklatency.appendHistoryEntry(evolve_msg)
Пример #28
0
def evolve(context):
    u"""
    convert object to new standard
    """

    root = getRootFolder(context)  # the Zope-Root-Folders

    for ikobj in findObjectsProviding(root, IOrganisationalUnit):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print "OrganisationalUnit(%s): " % ikobj.ikName + evolve_msg
        ikobj.appendHistoryEntry(evolve_msg)
Пример #29
0
def evolve(context):
    u"""
    new ikdate1
    """
    
    root = getRootFolder(context)

    for ikslave in findObjectsProviding(root, ISlave):
        ikslave.ikdate1 = None
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print "Slave(%s): " % ikslave.ikName + evolve_msg
        ikslave.appendHistoryEntry(evolve_msg)
Пример #30
0
def evolve(context):
    u"""
    site update with some bootstraps
    """
    root = getRootFolder(context)  # the Zope-Root-Folders

    for site in findObjectsProviding(root, ISite):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print u"Site(%s): " % site.ikName + evolve_msg
        createSupervisorUtils(site)
        site.appendHistoryEntry(evolve_msg)
Пример #31
0
def evolve(context):
    u"""
    net with inward relaying shutdown events
    """
    root = getRootFolder(context)  # the Zope-Root-Folders

    for net in findObjectsProviding(root, IIpNet):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print "IpNet(%s): " % net.ikName + evolve_msg
        net.eventInpObjs_inward_relaying_shutdown = set([])
        net.appendHistoryEntry(evolve_msg)
Пример #32
0
def evolve(context):
    u"""
    convert object to new standard
    """

    root = getRootFolder(context)  # the Zope-Root-Folders

    for iksnmpvalue in findObjectsProviding(root, ISnmpValue):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        print "SNMP Value(%s): " % iksnmpvalue.ikName + evolve_msg
        iksnmpvalue.appendHistoryEntry(evolve_msg)
Пример #33
0
def evolveToSimpleScoreSystem(context):
    """This is a help to migrate existing rating definitions.

    It only works if you use a score system which is compatible with
    SimpleScoreSystem.
    It is meant to be used from your application evolve script.
    """
    for definition in findObjectsProviding(
            getRootFolder(context), IRatingDefinition):
        old = definition.scoreSystem
        new = SimpleScoreSystem(
                old.__name__, old.title, old.description, old.scores)
        definition.scoreSystem = new
Пример #34
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)
    old_site = getSite()

    apps = findObjectsProviding(root, ISchoolToolApplication)
    for app in apps:
        setSite(app)
        levels = guessMostRecentLevels(app)
        if levels is not None:
            del app[LEVELS_APP_KEY]
            app[LEVELS_APP_KEY] = levels

    setSite(old_site)
Пример #35
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)
    old_site = getSite()

    apps = findObjectsProviding(root, ISchoolToolApplication)
    for app in apps:
        setSite(app)
        levels = guessMostRecentLevels(app)
        if levels is not None:
            del app[LEVELS_APP_KEY]
            app[LEVELS_APP_KEY] = levels

    setSite(old_site)
Пример #36
0
def evolve(context):
    u"""
    service object now supports ip-protocol and product value
    """
    root = getRootFolder(context)  # the Zope-Root-Folders

    for service in findObjectsProviding(root, IService):
        # convert this object
        evolve_msg = "gen. %d (%s)" % \
                   (generation, evolve.__doc__.strip())
        service.product = u""
        service.ipprotocol = None
        print "Service(%s): " % service.ikName + evolve_msg
        service.appendHistoryEntry(evolve_msg)
Пример #37
0
def evolve(context):
    u"""
    site with OOBTree for items data
    """
    root = getRootFolder(context)  # the Zope-Root-Folders

    for site in findObjectsProviding(root, ISite):
        # convert this object
        if not hasattr(site, 'data'):
            evolve_msg = "gen. %d (%s)" % \
                       (generation, evolve.__doc__.strip())
            print u"Site(%s): " % site.ikName + evolve_msg
            site.data = site._SampleContainer__data
            site.appendHistoryEntry(evolve_msg)
Пример #38
0
def evolveZopeAppFile(root):
    """Evolves all files in the containment hierarchy."""
    for file in findObjectsProviding(root, IFile):
        if isinstance(file, zope.app.file.Image):
            replace(file, z3c.blobfile.image.Image)
        elif isinstance(file, zope.app.file.File):
            replace(file, z3c.blobfile.file.File)
            
        else:
            logging.getLogger('z3c.blobfile.generations').warn(
            'Unknown zope.app.file.interfaces.IFile implementation %s.%s' % (
                file.__class__.__module__,
                file.__class__.__name__))
        file._p_changed = 1 # trigger persistence  
        transaction.savepoint(optimistic=True)
Пример #39
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)

    apps = findObjectsProviding(root, ISchoolToolApplication)
    for app in apps:
        if DEMOGRAPHICS_FIELDS_KEY not in app:
            continue
        fields = app[DEMOGRAPHICS_FIELDS_KEY]
        for field in fields.values():
            if not IEnumFieldDescription.providedBy(field):
                continue
            for n, item in enumerate(field.items):
                if item == u'Native Hawaiian or Other Pasific Islander':
                    field.items[n] = u'Native Hawaiian or Other Pacific Islander'
 def read(self, app, context):
     self.builders = []
     candidates = findObjectsProviding(app, IAnnotatable)
     for candidate in candidates:
         assert_not_broken(candidate)
         annotations = IAnnotations(candidate, None)
         if annotations is None:
             continue
         calendar = annotations.get(ST_CALENDAR_KEY)
         if calendar is None:
             continue
         assert_not_broken(calendar)
         builder = CalendarBuilder()
         builder.read(calendar, context(app=app))
         self.builders.append(builder)
 def read(self, app, context):
     self.builders = []
     # Find objects that may have provided IOwnTimetables
     candidates = findObjectsProviding(app, IAnnotatable)
     for candidate in candidates:
         assert_not_broken(candidate)
         annotations = IAnnotations(candidate, None)
         if annotations is None:
             continue
         timetable_dict = annotations.get(TIMETABLE_DICT_KEY)
         if timetable_dict is None:
             continue
         assert_not_broken(timetable_dict)
         builder = SchedulesBuilder()
         builder.read(timetable_dict, context(app=app))
         self.builders.append(builder)
Пример #42
0
def evolve(context):
    root = getRootFolder(context)
    for obj in findObjectsProviding(root, IAnnotatable):
        dc = IWriteZopeDublinCore(obj)
        if isinstance(dc, ZDCAnnotatableAdapter):
            # simply mark the ZDCAnnotationData object as dirty so
            # that it gets repickled
            dc._mapping._p_activate()
            dc._mapping._p_changed = True

            # also mark the object holding a reference to it (the
            # annotations mapping) as dirty.  It contains a reference
            # to the old class path for ghosts
            annotations = IAnnotations(obj)
            if DCkey in annotations:
                annotations[DCkey] = annotations[DCkey]
Пример #43
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)

    # Invalidate connection cache
    # Earlier evolutions (like evolve34) may have cached broken
    # persistent objects and we'll want to reload them.
    cache = context.connection._cache
    cache.invalidate(cache.cache_data.keys())

    old_site = getSite()

    apps = findObjectsProviding(root, ISchoolToolApplication)
    for app in apps:
        setSite(app)
        evolveTimetables(app)

    setSite(old_site)
Пример #44
0
def evolve(context):
    linkcatalogs.ensureEvolved(context)
    root = context.connection.root().get(ZopePublication.root_name, None)

    # Mock the renaming of zope.app.catalog and zope.app.intid to
    # zope.catalog and zope.intid.
    # This is for Critical Links deployments only - this part of Zope's evolution
    # was missed somehow.
    modules = ModulesSnapshot()
    modules.mock_module('zope.app.catalog')
    modules.mock_module('zope.app.catalog.interfaces')
    modules.mock_module('zope.app.catalog.catalog')
    modules.mock_module('zope.app.intid')
    modules.mock_module('zope.app.intid.interfaces')

    modules.mock_attr('zope.app.catalog.catalog', 'Catalog', zope.catalog.catalog.Catalog)
    modules.mock_attr('zope.app.catalog.interfaces', 'ICatalog', zope.catalog.interfaces.ICatalog)

    modules.mock_attr('zope.app.intid', 'IntIds', zope.intid.IntIds)
    modules.mock_attr('zope.app.intid.interfaces', 'IIntIds', zope.intid.interfaces.IIntIds)

    # Proceed with normal evolution now.

    old_site = getSite()
    apps = findObjectsProviding(root, ISchoolToolApplication)
    for app in apps:
        setSite(app)
        sm = app.getSiteManager()
        default = traverse(app, '++etc++site/default')

        intids = getUtility(zope.intid.interfaces.IIntIds)
        intids._p_changed = True

        for key in CATALOG_KEYS:
            util = queryUtility(ICatalog, name=key, default=None)
            if util is None:
                continue
            name = util.__name__
            sm.unregisterUtility(util, ICatalog, key)
            del default[name]

    setSite(old_site)

    modules.restore()
Пример #45
0
def evolve(context):
    root = getRootFolder(context)

    for site in findObjectsProviding(root, ISite):
        sm = site.getSiteManager()

        pau = component.queryUtility(IAuthentication, context = sm)
        if pau is not None and IPluggableAuthentication.providedBy(pau):
            if OLD_CRED_NAME in pau:
                plugins = list(pau.credentialsPlugins)
                if OLD_CRED_NAME in plugins:
                    plugins.remove(OLD_CRED_NAME)
                    pau.credentialsPlugins = tuple(plugins)

                del pau[OLD_CRED_NAME]

            setSite(site)
            factory = component.getUtility(ICredentialsPluginFactory, 'default.credentials')
            factory.install()
            factory.activate()
            setSite(None)
Пример #46
0
def evolve(context):
    """Evolve the ZODB from a Zope X3.0 to a X3.1 compatible format.

    - The Principal Annotation Service was replaced by the Principal
      Annotation Utility. Thus all service registrations have to be changed to
      utility registrations. 

    - The Error Reporting Service was replaced by the Error Reporting
      Utility. Thus, all service registrations have to be changed to utility
      registrations. 

    - Component-based registrations used to keep track of their components via
      the component's path. Now it stores the component directly. All
      registrations are updated to this new format.

    - Converts all service registrations to utility registrations providing
      IService, which is the method used to simulate the old service API.

    - Remove 'RegistrationManager' object from all site management folders.

    - Remove all local adapter and utility service instances. 
    """
    root = getRootFolder(context)

    for site in findObjectsProviding(root, ISite):
        sm = site.getSiteManager()

        # Remove old registration manager instances
        for rm in findObjectsProviding(sm, IRegistrationManager):
            # Make sure that we called the new registration manager
            # which will retrieve the old one, if necessary
            zapi.getParent(rm).registrationManager = rm

            # Do a hard core delete, because I want no whining and complaining
            container = zapi.getParent(rm)
            del container._SampleContainer__data[zapi.getName(rm)]

            # Make sure the new registration manager has the correct name:
            rm.__name__ = '++registrations++'
            rm.__parent__ = container

        for reg_container in findObjectsProviding(sm, IRegisterableContainer):
            manager = reg_container.registrationManager

            # Iterate through each registration and fix it up.
            for reg in tuple(manager.values()):

                # Regardless of registration type, we want to convert the
                # component path to component  
                if ('_BBB_componentPath' in reg.__dict__ and
                    reg._BBB_componentPath is not None):

                    reg.component = reg.getComponent()
                    del reg.__dict__['_BBB_componentPath']

                # Fixup and convert service registrations
                if IServiceRegistration.providedBy(reg):
                    if reg.name == 'ErrorLogging':
                        fixupErrorLogging(reg_container, reg)

                    elif reg.name == 'PrincipalAnnotation':
                        fixupPrincipalAnnotation(reg_container, reg)

                    elif reg.name in ('Utilities', 'Adapters'):
                        # Delete the registration
                        reg.status = InactiveStatus
                        del manager[zapi.name(reg)]
                        # Delete the component
                        c = reg.component
                        del zapi.getParent(c)[zapi.name(c)]

                    else:
                        # Handle all outstanding service registrations
                        # Create a new utility registration
                        new_reg = UtilityRegistration(reg.name, IService,
                                                      reg.component)
                        manager.addRegistration(new_reg)
                        new_reg.status = ActiveStatus
                        # Delete the old registration
                        reg.status = InactiveStatus
                        del manager[zapi.getName(reg)]

                # Fixup utility registrations
                else:
                    # Getting the provided interface converts the utility
                    # registration automatically from 'interface' -> 'provided'
                    reg.provided
                    # Now let's reactivate the utility, so it will be
                    # available within the new framework
                    orig = reg.status
                    reg.status = InactiveStatus
                    reg.status = orig
Пример #47
0
def evolve(context):
    """Evolve existing PAUs and group folders.

    - Group folders should no longer be registered.

    - PAUs that use group folders should use their contents name, not their
      (formerly) registered name.

    Group folders used by multiple PAUs were not supported, and are not
    supported with this evolution.
    """
    root = getRootFolder(context)

    for site in findObjectsProviding(root, ISite):
        sm = site.getSiteManager()
        for pau in findObjectsProviding(
            sm, zope.app.authentication.interfaces.IPluggableAuthentication):
            for nm, util in component.getUtilitiesFor(
                zope.app.authentication.interfaces.IAuthenticatorPlugin,
                context=pau):
                if groupfolder.IGroupFolder.providedBy(util):
                    if util.__parent__ is not pau:
                        raise RuntimeError(
                            "I don't know how to migrate your database: "
                            "each group folder should only be within the "
                            "Pluggable Authentication utility that uses it")
                    # we need to remove this registration
                    regs = registration.Registered(util).registrations()
                    if len(regs) != 1:
                        raise RuntimeError(
                            "I don't know how to migrate your database: "
                            "you should only have registered your group "
                            "folder as an IAuthenticatorPlugin, but it looks "
                            "like it's registered for something additional "
                            "that I don't expect")
                    r = regs[0]
                    r.registry.unregisterUtility(
                       util,
                       zope.app.authentication.interfaces.IAuthenticatorPlugin,
                       nm)
                    if r.name in pau.authenticatorPlugins:
                        if util.__name__ != r.name: # else no-op
                            plugins = list(pau.authenticatorPlugins)
                            if util.__name__ in pau.authenticatorPlugins:
                                # argh! another active plugin's name is
                                # the same as this group folder's
                                # __name__.  That means we need to choose
                                # a new name that is also not in
                                # authenticatorPlugins and not in
                                # pau.keys()...
                                ct = 0
                                nm = '%s_%d' % (util.__name__, ct)
                                while (nm in pau.authenticatorPlugins or
                                       nm in pau):
                                    ct += 1
                                    nm = '%s_%d' % (util.__name__, ct)
                                IObjectMover(util).moveTo(pau, nm)
                            plugins[plugins.index(r.name)] = util.__name__
                            pau.authenticatorPlugins = tuple(plugins)
            for k, r in pau.registrationManager.items():
                if groupfolder.IGroupFolder.providedBy(r.component):
                    del pau.registrationManager[k]