def find_dashboard(user): dashboard_folder = Node.find_for_user(user, subquery=Q('is_dashboard', 'eq', True)) if dashboard_folder.count() == 0: new_dashboard(user) dashboard_folder = Node.find_for_user(user, Q('is_dashboard', 'eq', True)) return dashboard_folder[0]
def find_dashboard(user): dashboard_folder = Node.find_for_user(user, subquery=Q("is_dashboard", "eq", True)) if dashboard_folder.count() == 0: new_dashboard(user) dashboard_folder = Node.find_for_user(user, Q("is_dashboard", "eq", True)) return dashboard_folder[0]
def get_dashboard_nodes(auth): """Get summary information about the current user's dashboard nodes. :param-query no_components: Exclude components from response. NOTE: By default, components will only be shown if the current user is contributor on a comonent but not its parent project. This query parameter forces ALL components to be excluded from the request. :param-query permissions: Filter upon projects for which the current user has the specified permissions. Examples: 'write', 'admin' """ user = auth.user nodes = Node.find_for_user( user, subquery=( Q("category", "eq", "project") & Q("is_deleted", "eq", False) & Q("is_registration", "eq", False) & Q("is_folder", "eq", False) ), ) if request.args.get("no_components") not in [True, "true", "True", "1", 1]: comps = Node.find_for_user( # NOTE - this used to be a find on nodes above. Does this mess it up? user, ( # components only Q("category", "ne", "project") & # exclude deleted nodes Q("is_deleted", "eq", False) & # exclude registrations Q("is_registration", "eq", False) ), ) else: comps = [] nodes = list(nodes) + list(comps) if request.args.get("permissions"): perm = request.args["permissions"].strip().lower() if perm not in permissions.PERMISSIONS: raise HTTPError( http.BAD_REQUEST, dict( message_short="Invalid query parameter", message_long="{0} is not in {1}".format(perm, permissions.PERMISSIONS), ), ) response_nodes = [node for node in nodes if node.has_permission(user, permission=perm)] else: response_nodes = nodes return _render_nodes(response_nodes, auth)
def get_dashboard_nodes(auth): """Get summary information about the current user's dashboard nodes. :param-query no_components: Exclude components from response. NOTE: By default, components will only be shown if the current user is contributor on a comonent but not its parent project. This query parameter forces ALL components to be excluded from the request. :param-query permissions: Filter upon projects for which the current user has the specified permissions. Examples: 'write', 'admin' """ user = auth.user nodes = Node.find_for_user( user, subquery=( Q('category', 'eq', 'project') & Q('is_deleted', 'eq', False) & Q('is_registration', 'eq', False) & Q('is_folder', 'eq', False) ) ) if request.args.get('no_components') not in [True, 'true', 'True', '1', 1]: comps = Node.find_for_user( # NOTE - this used to be a find on nodes above. Does this mess it up? user, ( # components only Q('category', 'ne', 'project') & # exclude deleted nodes Q('is_deleted', 'eq', False) & # exclude registrations Q('is_registration', 'eq', False) ) ) else: comps = [] nodes = list(nodes) + list(comps) if request.args.get('permissions'): perm = request.args['permissions'].strip().lower() if perm not in permissions.PERMISSIONS: raise HTTPError(http.BAD_REQUEST, dict( message_short='Invalid query parameter', message_long='{0} is not in {1}'.format(perm, permissions.PERMISSIONS) )) response_nodes = [node for node in nodes if node.has_permission(user, permission=perm)] else: response_nodes = nodes return _render_nodes(response_nodes, auth)
def count_user_nodes(users=None): users = users or get_active_users() return [ len( Node.find_for_user(user, (Q('is_deleted', 'eq', False) & Q('is_collection', 'ne', True)))) for user in users ]
def count_user_nodes(users=None): users = users or get_active_users() return [ Node.find_for_user( user, subquery=CONTENT_NODE_QUERY ).count() for user in users ]
def get_all_projects_smart_folder(auth, **kwargs): # TODO: Unit tests user = auth.user contributed = Node.find_for_user( user, subquery=(Q("is_deleted", "eq", False) & Q("is_registration", "eq", False) & Q("is_folder", "eq", False)) ) nodes = contributed.sort("title") keys = nodes.get_keys() return [rubeus.to_project_root(node, auth, **kwargs) for node in nodes if node.parent_id not in keys]
def get_all_registrations_smart_folder(auth, **kwargs): # TODO: Unit tests user = auth.user contributed = Node.find_for_user( user, subquery=(Q("is_deleted", "eq", False) & Q("is_registration", "eq", True) & Q("is_folder", "eq", False)) ) nodes = contributed.sort("-title") # Note(hrybacki): is_retracted and is_pending_embargo are property methods # and cannot be directly queried nodes = filter(lambda node: not node.is_retracted and not node.is_pending_embargo, nodes) keys = [node._id for node in nodes] return [rubeus.to_project_root(node, auth, **kwargs) for node in nodes if node.ids_above.isdisjoint(keys)]
def count_user_nodes(users=None): users = users or get_active_users() return [ len( Node.find_for_user( user, ( Q('is_deleted', 'eq', False) & Q('is_collection', 'ne', True) ) ) ) for user in users ]
def get_all_projects_smart_folder(auth, **kwargs): # TODO: Unit tests user = auth.user contributed = Node.find_for_user( user, subquery=( Q('is_deleted', 'eq', False) & Q('is_registration', 'eq', False) & Q('is_folder', 'eq', False) ) ) nodes = contributed.sort('title') keys = nodes.get_keys() return [rubeus.to_project_root(node, auth, **kwargs) for node in nodes if node.parent_id not in keys]
def get_all_registrations_smart_folder(auth, **kwargs): # TODO: Unit tests user = auth.user contributed = Node.find_for_user( user, subquery=( Q('is_deleted', 'eq', False) & Q('is_registration', 'eq', True) & Q('is_folder', 'eq', False) ) ) nodes = contributed.sort('-title') # Note(hrybacki): is_retracted and is_pending_embargo are property methods # and cannot be directly queried nodes = filter(lambda node: not node.is_retracted and not node.is_pending_embargo, nodes) keys = [node._id for node in nodes] return [rubeus.to_project_root(node, auth, **kwargs) for node in nodes if node.ids_above.isdisjoint(keys)]
def count_user_nodes(users=None): users = users or get_active_users() return [ Node.find_for_user(user, subquery=CONTENT_NODE_QUERY).count() for user in users ]