Пример #1
0
        def to_python(self, value, state):
            perms_update = OrderedSet()
            perms_new = OrderedSet()
            # build a list of permission to update and new permission to create

            # CLEAN OUT ORG VALUE FROM NEW MEMBERS, and group them using
            new_perms_group = defaultdict(dict)
            for k, v in value.copy().iteritems():
                if k.startswith("perm_new_member"):
                    del value[k]
                    _type, part = k.split("perm_new_member_")
                    args = part.split("_")
                    if len(args) == 1:
                        new_perms_group[args[0]]["perm"] = v
                    elif len(args) == 2:
                        _key, pos = args
                        new_perms_group[pos][_key] = v

            # fill new permissions in order of how they were added
            for k in sorted(map(int, new_perms_group.keys())):
                perm_dict = new_perms_group[str(k)]
                new_member = perm_dict.get("name")
                new_perm = perm_dict.get("perm")
                new_type = perm_dict.get("type")
                if new_member and new_perm and new_type:
                    perms_new.add((new_member, new_perm, new_type))

            for k, v in value.iteritems():
                if k.startswith("u_perm_") or k.startswith("g_perm_"):
                    member = k[7:]
                    t = {"u": "user", "g": "users_group"}[k[0]]
                    if member == "default":
                        if value.get("private"):
                            # set none for default when updating to
                            # private repo
                            v = EMPTY_PERM
                    perms_update.add((member, v, t))

            value["perms_updates"] = list(perms_update)
            value["perms_new"] = list(perms_new)

            # update permissions
            for k, v, t in perms_new:
                try:
                    if t is "user":
                        self.user_db = User.query().filter(User.active == True).filter(User.username == k).one()
                    if t is "users_group":
                        self.user_db = (
                            UsersGroup.query()
                            .filter(UsersGroup.users_group_active == True)
                            .filter(UsersGroup.users_group_name == k)
                            .one()
                        )

                except Exception:
                    log.exception("Updated permission failed")
                    msg = M(self, "perm_new_member_type", state)
                    raise formencode.Invalid(msg, value, state, error_dict=dict(perm_new_member_name=msg))
            return value
Пример #2
0
        def to_python(self, value, state):
            perms_update = []
            perms_new = []
            # build a list of permission to update and new permission to create
            for k, v in value.items():
                # means new added member to permissions
                if k.startswith('perm_new_member'):
                    new_perm = value.get('perm_new_member', False)
                    new_member = value.get('perm_new_member_name', False)
                    new_type = value.get('perm_new_member_type')

                    if new_member and new_perm:
                        if (new_member, new_perm, new_type) not in perms_new:
                            perms_new.append((new_member, new_perm, new_type))
                elif k.startswith('u_perm_') or k.startswith('g_perm_'):
                    member = k[7:]
                    t = {'u': 'user',
                         'g': 'users_group'
                    }[k[0]]
                    if member == 'default':
                        if value.get('private'):
                            # set none for default when updating to private repo
                            v = EMPTY_PERM
                    perms_update.append((member, v, t))

            value['perms_updates'] = perms_update
            value['perms_new'] = perms_new

            # update permissions
            for k, v, t in perms_new:
                try:
                    if t is 'user':
                        self.user_db = User.query()\
                            .filter(User.active == True)\
                            .filter(User.username == k).one()
                    if t is 'users_group':
                        self.user_db = UsersGroup.query()\
                            .filter(UsersGroup.users_group_active == True)\
                            .filter(UsersGroup.users_group_name == k).one()

                except Exception:
                    msg = self.message('perm_new_member_name',
                                         state=State_obj)
                    raise formencode.Invalid(
                        msg, value, state, error_dict={'perm_new_member_name': msg}
                    )
            return value