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
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