Exemplo n.º 1
0
 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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
    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
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
 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
Exemplo n.º 13
0
 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