def addDirectory(directory_id): for parent_directory_id in [0] + dbutils.explode_path( db, directory_id=directory_id)[:-1]: self.paths.setdefault(parent_directory_id, (set(), set()))[0].add(directory_id) data = self.directories[directory_id] = {} return data
def addFile(file_id): for parent_directory_id in [0] + dbutils.explode_path( db, file_id=file_id): self.paths.setdefault(parent_directory_id, (set(), set()))[1].add(file_id) data = self.files[file_id] = {} return data
def addFilters(self, db, filters, sort): if sort: sortedFilters = [] for item in filters: specificity = len(dbutils.explode_path(db, directory_id=item[0])) if item[1]: specificity += 1 sortedFilters.append((specificity, item)) sortedFilters.sort(key=lambda item: item[0]) filters = [item for specificity, item in sortedFilters] for item in filters: self.add(db, *item)
def listUsers(self, db, file_id): users = {} for directory_id in [0] + dbutils.explode_path(db, file_id=file_id): data = self.directories.get(directory_id) if data: users.update(data) data = self.files.get(file_id) if data: users.update(data) return users
def addFilters(self, db, filters, sort): if sort: sortedFilters = [] for item in filters: specificity = len( dbutils.explode_path(db, directory_id=item[0])) if item[1]: specificity += 1 sortedFilters.append((specificity, item)) sortedFilters.sort(key=lambda item: item[0]) filters = [item for specificity, item in sortedFilters] for item in filters: self.add(db, *item)
def isReviewer(self, db, user_id, file_id): user_id = int(user_id) file_id = int(file_id) data = self.files.get(file_id) if data: data = data.get(user_id) if data: return data[0] == 'reviewer' for directory_id in reversed([0] + dbutils.explode_path(db, file_id=file_id)): data = self.directories.get(directory_id) if data: data = data.get(user_id) if data: return data[0] == 'reviewer' return False
def __getUserFileAssociation(self, db, user_id, file_id): user_id = int(user_id) file_id = int(file_id) data = self.files.get(file_id) if data: data = data.get(user_id) if data: return data[0] for directory_id in reversed([0] + dbutils.explode_path(db, file_id=file_id)): data = self.directories.get(directory_id) if data: data = data.get(user_id) if data: return data[0] return None
def isReviewer(self, db, user_id, file_id): user_id = int(user_id) file_id = int(file_id) data = self.files.get(file_id) if data: data = data.get(user_id) if data: return data[0] == 'reviewer' for directory_id in reversed( [0] + dbutils.explode_path(db, file_id=file_id)): data = self.directories.get(directory_id) if data: data = data.get(user_id) if data: return data[0] == 'reviewer' return False
def __getUserFileAssociation(self, db, user_id, file_id): user_id = int(user_id) file_id = int(file_id) data = self.files.get(file_id) if data: data = data.get(user_id) if data: return data[0] for directory_id in reversed( [0] + dbutils.explode_path(db, file_id=file_id)): data = self.directories.get(directory_id) if data: data = data.get(user_id) if data: return data[0] return None
def addfilter(req, db, user): if user.isAnonymous(): return OperationFailureMustLogin() cursor = db.cursor() repository_id = req.getParameter("repository", filter=int) filter_type = req.getParameter("type") filter_path = req.getParameter("path") filter_delegate = req.getParameter("delegate", "") force = req.getParameter("force", "no") == "yes" repository = gitutils.Repository.fromId(db, repository_id) if filter_delegate: invalid_users = [] for delegate_name in map(str.strip, filter_delegate.split(',')): if dbutils.User.fromName(db, delegate_name) is None: invalid_users.append(delegate_name) if invalid_users: return "error:invalid-users:%s" % ','.join(invalid_users) if filter_path == '/': directory_id, file_id = 0, 0 elif filter_path[-1] == '/': directory_id, file_id = dbutils.find_directory(db, path=filter_path[:-1]), 0 else: if not force and dbutils.is_directory(db, filter_path): return "error:directory" else: directory_id, file_id = dbutils.find_directory_file(db, filter_path) if directory_id: specificity = len(dbutils.explode_path(db, directory_id=directory_id)) if file_id: specificity += 1 else: specificity = 0 cursor.execute("INSERT INTO filters (uid, repository, directory, file, specificity, type, delegate) VALUES (%s, %s, %s, %s, %s, %s, %s)", [user.id, repository.id, directory_id, file_id, specificity, filter_type, ','.join(map(str.strip, filter_delegate.split(',')))]) user.setPreference(db, "email.activated", True) db.commit() return "ok:directory=%d,file=%d" % (directory_id, file_id)
def addDirectory(directory_id): for parent_directory_id in [0] + dbutils.explode_path(db, directory_id=directory_id)[:-1]: self.paths.setdefault(parent_directory_id, (set(), set()))[0].add(directory_id) data = self.directories[directory_id] = {} return data
def addFile(file_id): for parent_directory_id in [0] + dbutils.explode_path(db, file_id=file_id): self.paths.setdefault(parent_directory_id, (set(), set()))[1].add(file_id) data = self.files[file_id] = {} return data