def test_serialize_object_with_circular_references(self):
        """Testing WebAPIResource.serialize_object with circular references and
        ?expand=
        """
        class TestObject(Model):
            def __init__(self, name, pk):
                super(TestObject, self).__init__()

                self.name = name
                self.pk = pk  # Django 1.8+ requires a pk field

        class TestResource(WebAPIResource):
            fields = {
                'dependency': {
                    'type': [TestObject],
                },
                'name': {
                    'type': six.text_type,
                }
            }

        try:
            obj1 = TestObject('obj1', 1)
            obj2 = TestObject('obj2', 2)

            obj1.dependency = obj2
            obj2.dependency = obj1

            request = RequestFactory().get('/api/test/?expand=dependency')
            resource = TestResource()
            register_resource_for_model(TestObject, resource)
            data = resource.serialize_object(obj1, request=request)

            self.maxDiff = 100000
            self.assertEqual(data, {
                'dependency': {
                    'links': {
                        'dependency': {
                            'href': None,
                            'method': 'GET',
                            'title': 'TestObject object',
                        },
                        'self': {
                            'href': 'http://testserver/api/test/?expand=dependency',
                            'method': 'GET',
                        },
                    },
                    'name': 'obj2',
                },
                'links': {
                    'self': {
                        'href': 'http://testserver/api/test/?expand=dependency',
                        'method': 'GET',
                    },
                },
                'name': 'obj1',
            })
        finally:
            unregister_resource_for_model(TestObject)
Exemple #2
0
def register_resource_for_model_temp(model, resource):
    """A context manager to temporarily register a resource for a model."""
    register_resource_for_model(model, resource)

    try:
        yield
    finally:
        unregister_resource_for_model(model)
Exemple #3
0
def register_resource_for_model_temp(model, resource):
    """A context manager to temporarily register a resource for a model."""
    register_resource_for_model(model, resource)

    try:
        yield
    finally:
        unregister_resource_for_model(model)
Exemple #4
0
    def test_get_resource_for_object_only_fields(self):
        """Testing get_resource_for_model when model is deferred"""
        class TestResource(WebAPIResource):
            pass

        resource = TestResource()
        register_resource_for_model(SiteConfiguration, resource)

        site = Site.objects.create(domain='example.com', name='example.com')
        SiteConfiguration.objects.create(site=site)

        with register_resource_for_model_temp(SiteConfiguration, resource):
            config = SiteConfiguration.objects.only('site').get()

            self.assertEqual(get_resource_for_object(config), resource)
Exemple #5
0
    def test_get_resource_for_object_only_fields(self):
        """Testing get_resource_for_model when model is deferred"""
        class TestResource(WebAPIResource):
            pass

        resource = TestResource()
        register_resource_for_model(SiteConfiguration, resource)

        site = Site.objects.create(domain='example.com', name='example.com')
        SiteConfiguration.objects.create(site=site)

        with register_resource_for_model_temp(SiteConfiguration, resource):
            config = SiteConfiguration.objects.only('site').get()

            self.assertEqual(get_resource_for_object(config),
                             resource)
Exemple #6
0
            "This is deprecated and will be removed in a "
            "future version.",
        },
    }

    uri_object_key = 'username'
    uri_object_key_regex = r'[A-Za-z0-9@\._\-\'\+]+'
    model_object_key = 'username'
    autogenerate_etags = True

    allowed_methods = ('GET', )

    def serialize_fullname_field(self, user, **kwargs):
        return user.get_full_name()

    def serialize_url_field(self, user, **kwargs):
        return user.get_absolute_url()

    def has_modify_permissions(self, request, user, *args, **kwargs):
        """Return whether or not the user can modify this object."""
        return request.user.is_authenticated() and user.pk == request.user.pk

    @augment_method_from(WebAPIResource)
    def get_list(self, *args, **kwargs):
        """Retrieve the list of users on the site."""
        pass


user_resource = UserResource()
register_resource_for_model(User, user_resource)
Exemple #7
0
 def register_resources(self):
     """Register all the resource model associations."""
     register_resource_for_model(ChangeDescription, self.change)
     register_resource_for_model(
         Comment,
         lambda obj: (obj.review.get().is_reply() and
                      self.review_reply_diff_comment or
                      self.review_diff_comment))
     register_resource_for_model(DefaultReviewer, self.default_reviewer)
     register_resource_for_model(
         DiffSet,
         lambda obj: obj.history_id and self.diff or self.draft_diff)
     register_resource_for_model(
         FileDiff,
         lambda obj: (obj.diffset.history_id and
                      self.filediff or
                      self.draft_filediff))
     register_resource_for_model(Group, self.review_group)
     register_resource_for_model(RegisteredExtension, self.extension)
     register_resource_for_model(HostingServiceAccount,
                                 self.hosting_service_account)
     register_resource_for_model(Repository, self.repository)
     register_resource_for_model(
         Review,
         lambda obj: obj.is_reply() and self.review_reply or self.review)
     register_resource_for_model(ReviewRequest, self.review_request)
     register_resource_for_model(ReviewRequestDraft,
                                 self.review_request_draft)
     register_resource_for_model(Screenshot, self.screenshot)
     register_resource_for_model(FileAttachment, self.file_attachment)
     register_resource_for_model(
         FileAttachment,
         lambda obj: (obj.is_from_diff and
                      self.diff_file_attachment or
                      self.file_attachment))
     register_resource_for_model(
         ScreenshotComment,
         lambda obj: (obj.review.get().is_reply() and
                      self.review_reply_screenshot_comment or
                      self.review_screenshot_comment))
     register_resource_for_model(
         FileAttachmentComment,
         lambda obj: (obj.review.get().is_reply() and
                      self.review_reply_file_attachment_comment or
                      self.review_file_attachment_comment))
     register_resource_for_model(
         GeneralComment,
         lambda obj: (obj.review.get().is_reply() and
                      self.review_reply_general_comment or
                      self.review_general_comment))
     register_resource_for_model(StatusUpdate, self.status_update)
     register_resource_for_model(User, self.user)
     register_resource_for_model(WebAPIToken, self.api_token)
     register_resource_for_model(WebHookTarget, self.webhook)
Exemple #8
0
                           "This is deprecated and will be removed in a "
                           "future version.",
        },
    }

    uri_object_key = 'username'
    uri_object_key_regex = r'[A-Za-z0-9@\._\-\'\+]+'
    model_object_key = 'username'
    autogenerate_etags = True

    allowed_methods = ('GET',)

    def serialize_fullname_field(self, user, **kwargs):
        return user.get_full_name()

    def serialize_url_field(self, user, **kwargs):
        return user.get_absolute_url()

    def has_modify_permissions(self, request, user, *args, **kwargs):
        """Return whether or not the user can modify this object."""
        return request.user.is_authenticated() and user.pk == request.user.pk

    @augment_method_from(WebAPIResource)
    def get_list(self, *args, **kwargs):
        """Retrieve the list of users on the site."""
        pass


user_resource = UserResource()
register_resource_for_model(User, user_resource)
Exemple #9
0
    def test_serialize_object_with_circular_references(self):
        """Testing WebAPIResource.serialize_object with circular references and
        ?expand=
        """
        class TestObject(Model):
            def __init__(self, name, pk):
                super(TestObject, self).__init__()

                self.name = name
                self.pk = pk  # Django 1.8+ requires a pk field

        class TestResource(WebAPIResource):
            fields = {
                'dependency': {
                    'type': [TestObject],
                },
                'name': {
                    'type': StringFieldType,
                }
            }

        try:
            obj1 = TestObject('obj1', 1)
            obj2 = TestObject('obj2', 2)

            obj1.dependency = obj2
            obj2.dependency = obj1

            request = RequestFactory().get('/api/test/?expand=dependency')
            resource = TestResource()
            register_resource_for_model(TestObject, resource)
            data = resource.serialize_object(obj1, request=request)

            self.maxDiff = 100000
            self.assertEqual(
                data, {
                    'dependency': {
                        'links': {
                            'dependency': {
                                'href': None,
                                'method': 'GET',
                                'title': 'TestObject object',
                            },
                            'self': {
                                'href':
                                'http://testserver/api/test/?expand=dependency',
                                'method': 'GET',
                            },
                        },
                        'name': 'obj2',
                    },
                    'links': {
                        'self': {
                            'href':
                            'http://testserver/api/test/?expand=dependency',
                            'method': 'GET',
                        },
                    },
                    'name': 'obj1',
                })
        finally:
            unregister_resource_for_model(TestObject)
Exemple #10
0
"""Built-in resource representing the Group model."""

from __future__ import unicode_literals

from django.contrib.auth.models import Group

from djblets.webapi.resources.base import WebAPIResource
from djblets.webapi.resources.registry import register_resource_for_model


class GroupResource(WebAPIResource):
    """A default resource for representing a Django Group model."""

    model = Group
    fields = ('id', 'name')

    uri_object_key = 'group_name'
    uri_object_key_regex = r'[A-Za-z0-9_\-]+'
    model_object_key = 'name'
    autogenerate_etags = True

    allowed_methods = ('GET',)


group_resource = GroupResource()
register_resource_for_model(Group, group_resource)