コード例 #1
0
ファイル: test_generic.py プロジェクト: xtrm-co-in/xtrm-drest
    def test_unknown_resource(self):
        """Test case where polymorhpic relation pulls in an object for
        which there is no known canonical serializer.
        """

        zork = Zebra.objects.create(
            name='Zork',
            origin='San Francisco Zoo'
        )

        user = self.fixture.users[0]
        user.favorite_pet = zork
        user.save()

        self.assertIsNone(DynamicRouter.get_canonical_serializer(Zebra))

        url = '/users/%s/?include[]=favorite_pet' % user.pk
        response = self.client.get(url)
        self.assertEqual(200, response.status_code)
        content = json.loads(response.content.decode('utf-8'))
        self.assertTrue('user' in content)
        self.assertFalse('zebras' in content)  # Not sideloaded
        user_obj = content['user']
        self.assertTrue('favorite_pet' in user_obj)
        self.assertEqual('Zebra', user_obj['favorite_pet']['type'])
        self.assertEqual(zork.pk, user_obj['favorite_pet']['id'])
コード例 #2
0
ファイル: test_router.py プロジェクト: xtrm-co-in/xtrm-drest
 def test_get_canonical_path_with_prefix(self):
     set_script_prefix('/v2/')
     rsrc_key = DogSerializer().get_resource_key()
     self.assertEqual(
         '/v2/dogs',
         DynamicRouter.get_canonical_path(rsrc_key)
     )
     clear_script_prefix()
コード例 #3
0
ファイル: test_router.py プロジェクト: xtrm-co-in/xtrm-drest
 def test_get_canonical_serializer_by_instance(self):
     dog = Dog.objects.create(
         name='Snoopy',
         fur_color='black and white',
         origin=''
     )
     self.assertEqual(
         DogSerializer,
         DynamicRouter.get_canonical_serializer(None, instance=dog)
     )
コード例 #4
0
ファイル: generic.py プロジェクト: xtrm-co-in/xtrm-drest
    def to_internal_value(self, data):
        model_name = data.get('type', None)
        model_id = data.get('id', None)
        if model_name and model_id:
            serializer_class = DynamicRouter.get_canonical_serializer(
                resource_key=None, resource_name=model_name)
            if serializer_class:
                model = serializer_class.get_model()
                return model.objects.get(id=model_id) if model else None

        return None
コード例 #5
0
def merge_link_object(serializer, data, instance):
    """Add a 'links' attribute to the data that maps field names to URLs.

    NOTE: This is the format that Ember Data supports, but alternative
          implementations are possible to support other formats.
    """

    link_object = {}

    if not getattr(instance, 'pk', None):
        # If instance doesn't have a `pk` field, we'll assume it doesn't
        # have a canonical resource URL to hang a link off of.
        # This generally only affectes Ephemeral Objects.
        return data

    link_fields = serializer.get_link_fields()
    for name, field in six.iteritems(link_fields):
        # For included fields, omit link if there's no data.
        if name in data and not data[name]:
            continue

        link = getattr(field, 'link', None)
        if link is None:
            base_url = ''
            if settings.ENABLE_HOST_RELATIVE_LINKS:
                # if the resource isn't registered, this will default back to
                # using resource-relative urls for links.
                base_url = DynamicRouter.get_canonical_path(
                    serializer.get_resource_key(), instance.pk) or ''
            link = '%s%s/' % (base_url, name)
        # Default to DREST-generated relation endpoints.
        elif callable(link):
            link = link(name, field, data, instance)

        link_object[name] = link

    if link_object:
        data['links'] = link_object
    return data
コード例 #6
0
ファイル: generic.py プロジェクト: xtrm-co-in/xtrm-drest
 def get_serializer_class_for_instance(self, instance):
     return DynamicRouter.get_canonical_serializer(resource_key=None,
                                                   instance=instance)
コード例 #7
0
ファイル: test_router.py プロジェクト: xtrm-co-in/xtrm-drest
 def test_get_canonical_serializer_by_model(self):
     self.assertEqual(
         DogSerializer,
         DynamicRouter.get_canonical_serializer(None, model=Dog)
     )
コード例 #8
0
ファイル: test_router.py プロジェクト: xtrm-co-in/xtrm-drest
 def test_get_canonical_serializer(self):
     rsrc_key = get_model_table(Dog)
     self.assertEqual(
         DogSerializer,
         DynamicRouter.get_canonical_serializer(rsrc_key)
     )
コード例 #9
0
ファイル: test_router.py プロジェクト: xtrm-co-in/xtrm-drest
 def test_get_canonical_path_with_keyspace(self):
     rsrc_key = CatSerializer().get_resource_key()
     self.assertEqual(
         '/v2/cats',
         DynamicRouter.get_canonical_path(rsrc_key)
     )
コード例 #10
0
ファイル: test_router.py プロジェクト: xtrm-co-in/xtrm-drest
 def test_get_canonical_path_with_pk(self):
     rsrc_key = DogSerializer().get_resource_key()
     self.assertEqual(
         '/dogs/1/',
         DynamicRouter.get_canonical_path(rsrc_key, pk='1')
     )
コード例 #11
0
ファイル: test_router.py プロジェクト: xtrm-co-in/xtrm-drest
 def test_get_canonical_path(self):
     rsrc_key = DogSerializer().get_resource_key()
     self.assertEqual(
         '/dogs',
         DynamicRouter.get_canonical_path(rsrc_key)
     )
コード例 #12
0
from django.conf.urls import include, url

from xtrm_drest.routers import DynamicRouter
from tests import viewsets

router = DynamicRouter()
router.register_resource(viewsets.UserViewSet)
router.register_resource(viewsets.GroupViewSet)
router.register_resource(viewsets.ProfileViewSet)
router.register_resource(viewsets.LocationViewSet)

router.register(r'cars', viewsets.CarViewSet)
router.register(r'cats', viewsets.CatViewSet)
router.register_resource(viewsets.DogViewSet)
router.register_resource(viewsets.HorseViewSet)
router.register_resource(viewsets.PermissionViewSet)
router.register(r'zebras', viewsets.ZebraViewSet)  # not canonical
router.register(r'user_locations', viewsets.UserLocationViewSet)
router.register(r'alternate_locations', viewsets.AlternateLocationViewSet)
router.register(r'carsv2', viewsets.CarWritableViewSet)

# the above routes are duplicated to test versioned prefixes
router.register_resource(viewsets.CatViewSet, namespace='v2')  # canonical
router.register(r'v1/user_locations', viewsets.UserLocationViewSet)

urlpatterns = [url(r'^', include(router.urls))]