Example #1
0
def main():
    global options
    options, neighborhoods = optparser.parse_args()
    if neighborhoods:
        log.info('Updating neighborhoods: %s', neighborhoods)
        q_neighborhoods = list(
            c_neighborhood.find(dict(name={'$in': neighborhoods})))
        neighborhood_ids = [n['_id'] for n in q_neighborhoods]
        q_projects = list(
            c_project.find(dict(neighborhood_id={'$in': neighborhood_ids})))
        project_ids = list(p['_id'] for p in q_projects)
        q_app_config = list(
            c_app_config.find(dict(project_id={'$in': project_ids})))
        log.info('... %d neighborhoods', len(q_neighborhoods))
        log.info('... %d projects', len(q_projects))
        log.info('... %d app configs', len(q_app_config))
    else:
        q_neighborhoods = c_neighborhood.find()
        q_projects = c_project.find()
        q_app_config = c_app_config.find()
        log.info('Updating all neighborhoods')
    # Update project acls
    log.info('====================================')
    log.info('Update project ACLs')
    for p in q_projects:
        update_project_acl(p)
        if not options.test:
            c_project.save(p)
    # Update neighborhood acls
    log.info('====================================')
    log.info('Update neighborhood ACLs')
    for n in q_neighborhoods:
        p = c_project.find(dict(
            neighborhood_id=n['_id'], shortname='--init--')).next()
        update_neighborhood_acl(n, p)
        if not options.test:
            c_neighborhood.save(n)
            c_project.save(p)
    graph = build_model_inheritance_graph()
    # Update app config acls
    log.info('====================================')
    log.info('Update appconfig ACLs')
    for ac in q_app_config:
        simple_acl_update(ac, 'app_config')
        if not options.test:
            c_app_config.save(ac)
        # Update artifact acls
        log.info('====================================')
        log.info('Update artifact ACLs for %s', ac['_id'])
        for _, a_cls in dfs(M.Artifact, graph):
            c_artifact = project_db[a_cls.__mongometa__.name]
            for a in c_artifact.find(dict(app_config_id=ac['_id'])):
                empty_acl = a['acl'] == []
                simple_acl_update(a, a_cls.__mongometa__.name)
                if not options.test and not empty_acl:
                    c_artifact.save(a)
Example #2
0
def main():
    global options
    options, neighborhoods = optparser.parse_args()
    if neighborhoods:
        log.info('Updating neighborhoods: %s', neighborhoods)
        q_neighborhoods = list(
            c_neighborhood.find(dict(name={'$in': neighborhoods})))
        neighborhood_ids = [n['_id'] for n in q_neighborhoods]
        q_projects = list(
            c_project.find(dict(neighborhood_id={'$in': neighborhood_ids})))
        project_ids = list(p['_id'] for p in q_projects)
        q_app_config = list(
            c_app_config.find(dict(project_id={'$in': project_ids})))
        log.info('... %d neighborhoods', len(q_neighborhoods))
        log.info('... %d projects', len(q_projects))
        log.info('... %d app configs', len(q_app_config))
    else:
        q_neighborhoods = c_neighborhood.find()
        q_projects = c_project.find()
        q_app_config = c_app_config.find()
        log.info('Updating all neighborhoods')
    # Update project acls
    log.info('====================================')
    log.info('Update project ACLs')
    for p in q_projects:
        update_project_acl(p)
        if not options.test:
            c_project.save(p)
    # Update neighborhood acls
    log.info('====================================')
    log.info('Update neighborhood ACLs')
    for n in q_neighborhoods:
        p = c_project.find(dict(
            neighborhood_id=n['_id'], shortname='--init--')).next()
        update_neighborhood_acl(n, p)
        if not options.test:
            c_neighborhood.save(n)
            c_project.save(p)
    graph = build_model_inheritance_graph()
    # Update app config acls
    log.info('====================================')
    log.info('Update appconfig ACLs')
    for ac in q_app_config:
        simple_acl_update(ac, 'app_config')
        if not options.test:
            c_app_config.save(ac)
        # Update artifact acls
        log.info('====================================')
        log.info('Update artifact ACLs for %s', ac['_id'])
        for _, a_cls in dfs(M.Artifact, graph):
            c_artifact = project_db[a_cls.__mongometa__.name]
            for a in c_artifact.find(dict(app_config_id=ac['_id'])):
                empty_acl = a['acl'] == []
                simple_acl_update(a, a_cls.__mongometa__.name)
                if not options.test and not empty_acl:
                    c_artifact.save(a)
Example #3
0
    def subscribe_artifact(self, url, user):
        artifact_url = urlparse(url).path[1:-1].split("/")
        neighborhood = M.Neighborhood.query.find({
            "url_prefix":
            "/" + artifact_url[0] + "/"
        }).first()

        if artifact_url[0] == "u":
            project = M.Project.query.find({
                "shortname":
                artifact_url[0] + "/" + artifact_url[1],
                "neighborhood_id":
                neighborhood._id
            }).first()
        else:
            project = M.Project.query.find({
                "shortname": artifact_url[1],
                "neighborhood_id": neighborhood._id
            }).first()

        appconf = M.AppConfig.query.find({
            "options.mount_point": artifact_url[2],
            "project_id": project._id
        }).first()

        if appconf.url() == urlparse(url).path:
            M.Mailbox.subscribe(user_id=user._id,
                                app_config_id=appconf._id,
                                project_id=project._id)
            return True

        tool_packages = h.get_tool_packages(appconf.tool_name)
        classes = set()
        for depth, cls in dfs(M.Artifact, build_model_inheritance_graph()):
            for pkg in tool_packages:
                if cls.__module__.startswith(pkg + '.'):
                    classes.add(cls)
        for cls in classes:
            for artifact in cls.query.find({"app_config_id": appconf._id}):
                if artifact.url() == urlparse(url).path:
                    M.Mailbox.subscribe(user_id=user._id,
                                        app_config_id=appconf._id,
                                        project_id=project._id,
                                        artifact=artifact)
                    return True
        return False
Example #4
0
    def subscribe_artifact(self, url, user):
        artifact_url = urlparse(url).path[1:-1].split("/")
        neighborhood = M.Neighborhood.query.find({
            "url_prefix": "/" + artifact_url[0] + "/"}).first()

        if artifact_url[0] == "u":
            project = M.Project.query.find({
                "shortname": artifact_url[0] + "/" + artifact_url[1],
                "neighborhood_id": neighborhood._id}).first()
        else:
            project = M.Project.query.find({
                "shortname": artifact_url[1],
                "neighborhood_id": neighborhood._id}).first()

        appconf = M.AppConfig.query.find({
            "options.mount_point": artifact_url[2],
            "project_id": project._id}).first()

        if appconf.url() == urlparse(url).path:
            M.Mailbox.subscribe(
                user_id=user._id,
                app_config_id=appconf._id,
                project_id=project._id)
            return True

        tool_packages = h.get_tool_packages(appconf.tool_name)
        classes = set()
        for depth, cls in dfs(M.Artifact, build_model_inheritance_graph()):
            for pkg in tool_packages:
                if cls.__module__.startswith(pkg + '.'):
                    classes.add(cls)
        for cls in classes:
            for artifact in cls.query.find({"app_config_id": appconf._id}):
                if artifact.url() == urlparse(url).path:
                    M.Mailbox.subscribe(
                        user_id=user._id,
                        app_config_id=appconf._id,
                        project_id=project._id,
                        artifact=artifact)
                    return True
        return False