Exemple #1
0
    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()
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
0
    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()
Exemple #6
0
    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))
Exemple #7
0
    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))
Exemple #8
0
    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()
Exemple #9
0
    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()