コード例 #1
0
ファイル: evolve30.py プロジェクト: l1ph0x/schooltool-2
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 unrelate(self, other):
     """Delete state on filtered date or unrelate completely if
     no states left or filtered date is .all()
     """
     links = IRelationshipLinks(self.this)
     link = links.find(self.my_role, other, self.other_role, self.rel_type)
     if self.filter_date is None:
         unrelate(self.rel_type, (self.this, self.my_role),
                  (other, self.other_role))
         return
     state = link.state
     date = state.closest(self.filter_date)
     if date is None:
         raise KeyError(self.filter_date)
     del state[date]
     try:
         iter(state).next()
     except StopIteration:
         unrelate(self.rel_type, (self.this, self.my_role),
                  (other, self.other_role))
コード例 #4
0
 def unrelate(self, other):
     """Delete state on filtered date or unrelate completely if
     no states left or filtered date is .all()
     """
     links = IRelationshipLinks(self.this)
     link = links.find(self.my_role, other, self.other_role, self.rel_type)
     if self.filter_date is None:
         unrelate(self.rel_type,
                  (self.this, self.my_role),
                  (other, self.other_role))
         return
     state = link.state
     date = state.closest(self.filter_date)
     if date is None:
         raise KeyError(self.filter_date)
     del state[date]
     try:
         iter(state).next()
     except StopIteration:
         unrelate(self.rel_type,
                  (self.this, self.my_role),
                  (other, self.other_role))