def create(request): """Create a group from the POST payload.""" appstruct = CreateGroupAPISchema( default_authority=request.default_authority, group_authority=client_authority(request) or request.default_authority).validate(_json_payload(request)) group_service = request.find_service(name='group') group_create_service = request.find_service(name='group_create') # Check for duplicate group groupid = appstruct.get('groupid', None) if groupid is not None: duplicate_group = group_service.fetch(pubid_or_groupid=groupid) if duplicate_group: raise ConflictError( _("group with groupid '{}' already exists").format(groupid)) group = group_create_service.create_private_group( name=appstruct['name'], userid=request.user.userid, description=appstruct.get('description', None), groupid=groupid, ) return GroupJSONPresenter(GroupContext( group, request)).asdict(expand=['organization'])
def read(group, request): """Fetch a group.""" expand = request.GET.getall("expand") or [] return GroupJSONPresenter(GroupContext(group, request)).asdict(expand=expand)
def upsert(context, request): """ Create or update a group from a PUT payload. If no group model is present in the passed ``context`` (on ``context.group``), treat this as a create action and delegate to ``create``. Otherwise, replace the existing group's resource properties entirely and update the object. :arg context: :type context: h.traversal.GroupUpsertContext """ if context.group is None: return create(request) group = context.group # Because this is a PUT endpoint and not a PATCH, a full replacement of the # entire resource is expected. Thus, we're validating against the Create schema # here as we want to make sure properties required for a fresh object are present appstruct = CreateGroupAPISchema( default_authority=request.default_authority, group_authority=client_authority(request) or request.default_authority, ).validate(_json_payload(request)) group_update_service = request.find_service(name="group_update") group_service = request.find_service(name="group") # Check for duplicate group groupid = appstruct.get("groupid", None) if groupid is not None: duplicate_group = group_service.fetch(pubid_or_groupid=groupid) if duplicate_group and (duplicate_group != group): raise HTTPConflict( _("group with groupid '{}' already exists").format(groupid) ) # Need to make sure every resource-defined property is present, as this # is meant as a full-resource-replace operation. # TODO: This may be better handled in the schema at some point update_properties = { "name": appstruct["name"], "description": appstruct.get("description", ""), "groupid": appstruct.get("groupid", None), } group = group_update_service.update(group, **update_properties) # Note that this view takes a ``GroupUpsertContext`` but uses a ``GroupContext`` here return GroupJSONPresenter(GroupContext(group, request)).asdict( expand=["organization", "scopes"] )
def groups(request): """Retrieve the groups for this request's user.""" expand = request.GET.getall("expand") or [] list_svc = request.find_service(name="group_list") all_groups = list_svc.request_groups( user=request.user, authority=request.params.get("authority"), document_uri=request.params.get("document_uri"), ) all_groups = [GroupContext(group, request) for group in all_groups] all_groups = GroupsJSONPresenter(all_groups).asdicts(expand=expand) return all_groups
def profile_groups(request): """ Retrieve the groups for this request's user. Retrieve all groups for which the request's user is a member, regardless of type. Groups are sorted by (name, pubid). """ expand = request.GET.getall("expand") or [] list_svc = request.find_service(name="group_list") groups = list_svc.user_groups(user=request.user) group_contexts = [GroupContext(group, request) for group in groups] groups_formatted = GroupsJSONPresenter(group_contexts).asdicts(expand=expand) return groups_formatted
def groups(request): authority = request.params.get('authority') document_uri = request.params.get('document_uri') expand = request.GET.getall('expand') or [] list_svc = request.find_service(name='list_groups') if request.user is not None: authority = request.user.authority else: authority = authority or request.authority all_groups = list_svc.request_groups(user=request.user, authority=authority, document_uri=document_uri) all_groups = [GroupContext(group, request) for group in all_groups] all_groups = GroupsJSONPresenter(all_groups).asdicts(expand=expand) return all_groups
def groups(request): """Retrieve the groups for this request's user.""" authority = request.params.get("authority") document_uri = request.params.get("document_uri") expand = request.GET.getall("expand") or [] list_svc = request.find_service(name="list_groups") if request.user is not None: authority = request.user.authority else: authority = authority or request.default_authority all_groups = list_svc.request_groups( user=request.user, authority=authority, document_uri=document_uri ) all_groups = [GroupContext(group, request) for group in all_groups] all_groups = GroupsJSONPresenter(all_groups).asdicts(expand=expand) return all_groups
def create(request): """Create a group from the POST payload.""" schema = CreateGroupAPISchema() appstruct = schema.validate(_json_payload(request)) group_properties = { 'name': appstruct['name'], 'description': appstruct.get('description', None), } group_service = request.find_service(name='group') group = group_service.create_private_group( group_properties['name'], request.user.userid, description=group_properties['description'], ) group_context = GroupContext(group, request) return GroupJSONPresenter(group_context).asdict(expand=['organization'])
def update(group, request): """Update a group from a PATCH payload.""" appstruct = UpdateGroupAPISchema( default_authority=request.default_authority, group_authority=client_authority(request) or request.default_authority, ).validate(_json_payload(request)) group_update_service = request.find_service(name="group_update") group_service = request.find_service(name="group") # Check for duplicate group groupid = appstruct.get("groupid", None) if groupid is not None: duplicate_group = group_service.fetch(pubid_or_groupid=groupid) if duplicate_group and (duplicate_group != group): raise HTTPConflict( _("group with groupid '{}' already exists").format(groupid)) group = group_update_service.update(group, **appstruct) return GroupJSONPresenter(GroupContext( group, request)).asdict(expand=["organization", "scopes"])
def create(request): """Create a group from the POST payload.""" # @TODO Temporary: Remove this check once private groups supported at other authorities if request.authority != request.user.authority: raise HTTPBadRequest( _('Group creation currently only supported for default authority')) schema = CreateGroupAPISchema() appstruct = schema.validate(_json_payload(request)) group_properties = { 'name': appstruct['name'], 'description': appstruct.get('description', None), } group_service = request.find_service(name='group') group = group_service.create_private_group( group_properties['name'], request.user.userid, description=group_properties['description'], ) group_context = GroupContext(group, request) return GroupJSONPresenter(group_context).asdict(expand=['organization'])