예제 #1
0
    def delete(self) -> None:
        """Delete this workspace."""
        doc = self.get_metadata()

        sysdb = system_db(readonly=False)
        coll = workspace_mapping_collection(readonly=False)

        sysdb.delete_database(doc["internal"])
        coll.delete(doc["_id"])

        # Invalidate the cache for things changed by this function
        workspace_mapping.cache_clear()
예제 #2
0
    def create(name: str, owner: User) -> Workspace:
        """Create a workspace, owned by `owner`."""
        if Workspace.exists(name):
            raise AlreadyExists("Workspace", name)

        internal = util.generate_arango_workspace_name()

        try:
            system_db(readonly=False).create_database(internal)
        except DatabaseCreateError:
            # Could only happen if there's a name collision
            raise InternalServerError("Error creating workspace")

        workspace_dict = {
            "name": name,
            "internal": internal,
            "permissions": WorkspacePermissions(owner=owner.sub).dict(),
        }

        coll = workspace_mapping_collection(readonly=False)
        coll.insert(workspace_dict, sync=True)
        workspace_mapping.cache_clear()

        return Workspace(name)
예제 #3
0
    def search(query: str) -> Cursor:
        """Search for users given a partial string."""

        coll = user_collection()
        aql = system_db().aql

        bind_vars = {"@users": coll.name, "query": query}
        query = """
            FOR doc in @@users
            FILTER CONTAINS(LOWER(doc.name), LOWER(@query))
                OR CONTAINS(LOWER(doc.email), LOWER(@query))

            LIMIT 50
            RETURN doc
        """

        return _run_aql_query(aql, query, bind_vars)
예제 #4
0
    def available_workspaces(self) -> Generator[str, None, None]:
        """Return all workspaces this user has access to."""

        sysdb = system_db()
        bind_vars = {"@workspaces": "workspace_mapping", "userid": self.sub}

        query = """
        FOR w in @@workspaces
            FILTER (
                w.permissions.public == true
                || w.permissions.owner == @userid
                || @userid IN w.permissions.maintainers
                || @userid IN w.permissions.writers
                || @userid IN w.permissions.readers
            )
            RETURN w
        """

        return (x["name"] for x in _run_aql_query(sysdb.aql, query, bind_vars))