def addUser(self, user_id): """Add user to current aspect. :param user_id: user to add to aspect :type user_id: int :returns: JSON from request """ data = { 'authenticity_token': repr(self._connection), 'aspect_id': self.id, 'person_id': user_id } request = self._connection.post('aspect_memberships.json', data=data) if request.status_code == 400: raise errors.AspectError( 'duplicate record, user already exists in aspect: {0}'.format( request.status_code)) elif request.status_code == 404: raise errors.AspectError( 'user not found from this pod: {0}'.format( request.status_code)) elif request.status_code != 200: raise errors.AspectError('wrong status code: {0}'.format( request.status_code)) return request.json()
def addUser(self, user): """Add user to current aspect. :param user_id: user to add to aspect :type user_id: int :returns: JSON from request """ data = { 'aspect_id': self.id, 'person_id': user.id(), } request = self._connection.tokenFrom('contacts').post('aspect_memberships', data=data) if request.status_code == 400: raise errors.AspectError('duplicate record, user already exists in aspect: {0}'.format(request.status_code)) elif request.status_code == 404: raise errors.AspectError('user not found from this pod: {0}'.format(request.status_code)) elif request.status_code != 200: raise errors.AspectError('wrong status code: {0}'.format(request.status_code)) response = None try: response = request.json() except json.decoder.JSONDecodeError: # FIXME For some (?) reason removing users from aspects works, but # adding them is a no-go and Diaspora* kicks us out with CSRF errors. # Weird. pass if response is None: raise errors.CSRFProtectionKickedIn() return response
def addAspect(self, name, visible=False): """Add new aspect. :param name: aspect name to add :type name: str :param visible: sets if contacts in aspect are visible for each and other :type visible: bool :returns: JSON from request --> POST /aspects HTTP/1.1 --> {"person_id":null,"name":"test","contacts_visible":false} <-- HTTP/1.1 200 OK """ data = {'person_id': None, 'name': name, 'contacts_visible': visible} headers = { 'content-type': 'application/json', 'accept': 'application/json' } request = self._connection.tokenFrom('contacts').post( 'aspects', headers=headers, data=json.dumps(data)) if request.status_code == 400: raise errors.AspectError( 'duplicate record, aspect alreadt exists: {0}'.format( request.status_code)) elif request.status_code != 200: raise errors.AspectError('wrong status code: {0}'.format( request.status_code)) new_aspect = request.json() self._connection.userdata()['aspects'].append(new_aspect) return new_aspect
def addUser(self, user_id): """Add user to current aspect. :param user_id: user to add to aspect :type user_id: int :returns: JSON from request --> POST /aspect_memberships HTTP/1.1 --> Accept: application/json, text/javascript, */*; q=0.01 --> Content-Type: application/json; charset=UTF-8 --> {"aspect_id":123,"person_id":123} <-- HTTP/1.1 200 OK """ data = {'aspect_id': self.id, 'person_id': user_id} headers = { 'content-type': 'application/json', 'accept': 'application/json' } request = self._connection.tokenFrom('contacts').post( 'aspect_memberships', data=json.dumps(data), headers=headers) if request.status_code == 400: raise errors.AspectError( 'duplicate record, user already exists in aspect: {0}'.format( request.status_code)) elif request.status_code == 404: raise errors.AspectError( 'user not found from this pod: {0}'.format( request.status_code)) elif request.status_code != 200: raise errors.AspectError('wrong status code: {0}'.format( request.status_code)) response = None try: response = request.json() except json.decoder.JSONDecodeError: """ Should be OK now, but I'll leave this commentary here at first to see if anything comes up """ # FIXME For some (?) reason removing users from aspects works, but # adding them is a no-go and Diaspora* kicks us out with CSRF errors. # Weird. pass if response is None: raise errors.CSRFProtectionKickedIn() # Now you should fetchguid(fetch_stream=False) on User to update aspect membership_id's # Or update it locally with the response return response
def removeUser(self, user): """Remove user from current aspect. :param user: user to remove from aspect :type user: diaspy.people.User object """ membership_id = None to_remove = None for each in user.aspectMemberships(): if each.get('aspect', {}).get('id') == self.id: membership_id = each.get('id') to_remove = each break # no need to continue if membership_id is None: raise errors.UserIsNotMemberOfAspect(user, self) request = self._connection.delete( 'aspect_memberships/{0}'.format(membership_id)) if request.status_code == 404: raise errors.AspectError( 'cannot remove user from aspect, probably tried too fast after adding: {0}' .format(request.status_code)) elif request.status_code != 200: raise errors.AspectError( 'cannot remove user from aspect: {0}'.format( request.status_code)) if 'contact' in user.data: # User object if to_remove: user.data['contact']['aspect_memberships'].remove( to_remove) # remove local aspect membership_id else: # User object from Contacts() if to_remove: user.data['aspect_memberships'].remove( to_remove) # remove local aspect membership_id return request.json()
def removeAspect(self): """ --> POST /aspects/{id} HTTP/1.1 --> _method=delete&authenticity_token={token} <-- HTTP/1.1 302 Found Removes whole aspect. :returns: None """ request = self._connection.tokenFrom('contacts').delete( 'aspects/{}'.format(self.id)) if request.status_code != 302: raise errors.AspectError('wrong status code: {0}'.format( request.status_code))
def deleteAspect(self, aspect_id): """Deletes a aspect with given ID. :param aspect_id: Aspect ID to delete. :type aspect_id: int --> POST /aspects/{ASPECT_ID} HTTP/1.1 _method=delete&authenticity_token={TOKEN} Content-Type: application/x-www-form-urlencoded <-- HTTP/1.1 302 Found Content-Type: text/html; charset=utf-8 """ request = self._connection.tokenFrom('contacts').delete( 'aspects/{}'.format(aspect_id)) if request.status_code != 200: # since we don't post but delete raise errors.AspectError('wrong status code: {0}'.format( request.status_code))
def removeUser(self, user_id): """Remove user from current aspect. :param user_id: user to remove from aspect :type user: int """ data = { 'authenticity_token': repr(self._connection), 'aspect_id': self.id, 'person_id': user_id } request = self.connection.delete('aspect_memberships/{0}.json'.format( self.id), data=data) if request.status_code != 200: raise errors.AspectError( 'cannot remove user from aspect: {0}'.format( request.status_code)) return request.json()
def removeUser(self, user): """Remove user from current aspect. :param user_id: user to remove from aspect :type user: int """ membership_id = None for each in user.aspectMemberships(): print(self.id, each) if each.get('aspect', {}).get('id') == self.id: membership_id = each.get('id') if membership_id is None: raise errors.UserIsNotMemberOfAspect(user, self) request = self._connection.delete('aspect_memberships/{0}'.format(membership_id)) if request.status_code != 200: raise errors.AspectError('cannot remove user from aspect: {0}'.format(request.status_code)) return request.json()