Example #1
0
class ExamResource(Base):
    # Controls what data is included in the serialized output.

    school_preparer = FieldsPreparer(fields={
        'id': 'id',
        'name': 'name',
    })
    preparer = FieldsPreparer(
        fields={
            'id': 'id',
            'time': 'time',
            'total': 'total',
            'desc': 'desc',
            'office_name': 'office.office_name',
            'office_id': 'office.id',
            'status': 'status',
            'lock': 'lock'
        })

    def is_authenticated(self):

        return True

    # GET /
    def list(self):

        office = Office.objects.get(id=int(self.request.GET['office_id']))
        return Exam.objects.filter(office=office,
                                   desc__contains=self.request.GET.get(
                                       'search', ''))

    # GET /pk/
    def detail(self, pk):
        return Exam.objects.get(id=pk)

    # POST /
    def create(self):
        office = Office.objects.get(id=int(self.data['office_id']))
        return Exam.objects.create(office=office,
                                   time=self.data['time'],
                                   desc=self.data['desc'],
                                   total=self.data['total'])

    # PUT /pk/
    def update(self, pk):
        try:
            exam = Exam.objects.get(id=pk)
        except Teacher.DoesNotExist:
            exam = Exam()

        exam.time = self.data['time'] if 'time' in self.data else exam.time
        exam.desc = self.data['desc'] if 'desc' in self.data else exam.desc
        exam.total = self.data['total'] if 'total' in self.data else exam.total
        exam.lock = self.data['lock'] if 'lock' in self.data else exam.lock
        exam.save()
        return exam

    # DELETE /pk/
    def delete(self, pk):
        Exam.objects.get(id=pk).delete()
Example #2
0
class ConfigResource(Base):
    # Controls what data is included in the serialized output.


    office_preparer = FieldsPreparer(fields={
        'id': 'id',
        'name': 'name',
    })
    preparer = FieldsPreparer(fields={
        'id': 'id',
        'key':'key',
        'value': 'value',
        'desc':'desc',
    
    })

    def is_authenticated(self):

        return True


    # GET /
    def list(self):
   
        if 'rate' in self.request.GET:
       
            query = self.request.GET
            base1 = query['base']
            rate1 = query['rate']
  
            base = Config.objects.get(key='base')
            base.value =base1

            rate = Config.objects.get(key="rate")
            rate.value = rate1

            base.save()
            rate.save()
        return Config.objects.all()

    # GET /pk/
    def detail(self, pk):
        pass 

    # POST /
    def create(self):
       pass
       
         

    # PUT /pk/
    def update(self, pk):
       
        pass 



    # DELETE /pk/
    def delete(self, pk):
        Config.objects.get(id=pk).delete()
Example #3
0
 def setUp(self):
     super(LookupDataTestCase, self).setUp()
     self.preparer = FieldsPreparer(fields=None)
     self.obj_data = InstaObj(
         say='what',
         count=453,
         moof={
             'buried': {
                 'id': 7,
                 'data': InstaObj(yes='no')
             }
         },
         parent=None
     )
     self.dict_data = {
         'hello': 'world',
         'abc': 123,
         'more': {
             'things': 'here',
             'nested': InstaObj(
                 awesome=True,
                 depth=3
             ),
         },
         'parent': None,
         'who': [
             {'name': 'Ford'},
             {'name': 'Arthur'},
             {'name': 'Beeblebrox'},
         ],
         'dont': lambda: {
             'panic': 'vogon',
         },
     }
Example #4
0
    def __init__(self, *args, **kwargs):
        super(TicketResource, self).__init__(*args, **kwargs)

        self.http_methods.update({'issue': {
            'GET': 'issue',
        }})

        self.ticket_preparer = FieldsPreparer(
            fields={'record_locator': 'record_locator'})
Example #5
0
 def test_prepare_subpreparer(self):
     subpreparer = FieldsPreparer(fields={
         'id': 'id',
         'data': 'data',
     })
     preparer = FieldsPreparer(fields={
         'flying': 'say',
         'wale': SubPreparer('moof.buried', subpreparer),
     })
     preped = preparer.prepare(self.obj_data)
Example #6
0
 def test_prepare_subsubpreparer(self):
     subsubpreparer = FieldsPreparer(fields={
         'really': 'yes',
     })
     subpreparer = FieldsPreparer(fields={
         'data': SubPreparer('data', subsubpreparer),
     })
     preparer = FieldsPreparer(fields={
         'wale': SubPreparer('moof.buried', subpreparer),
     })
     preped = preparer.prepare(self.obj_data)
     self.assertEqual(preped, {'wale': {'data': {'really': 'no'}}})
Example #7
0
 def test_prepare_collection_subpreparer(self):
     subpreparer = FieldsPreparer(fields={
         'name': 'name',
     })
     preparer = FieldsPreparer(fields={
         'who': CollectionSubPreparer('who', subpreparer),
     })
     preped = preparer.prepare(self.dict_data)
     self.assertEqual(preped, {'who': [
         {'name': 'Ford'},
         {'name': 'Arthur'},
         {'name': 'Beeblebrox'},
     ]})
Example #8
0
class UserResource(BaseResource):

    details_preparer = FieldsPreparer(fields={'avatar': 'avatar'})

    preparer = FieldsPreparer(
        fields={
            'id': 'id',
            'first_name': 'first_name',
            'last_name': 'last_name',
            'email': 'email',
            'details': SubPreparer('detail.first', details_preparer)
        })

    def detail(self):
        return self.request.client
Example #9
0
class UserResource(APIFilterMixin, APIOrderingMixin, DjangoResource):

    preparer = FieldsPreparer(fields={
        'username': '******',
        'about': 'about',
        'friends': 'get_all_friends'
    })

    allowed_fields_filter = [
        'username',
        'username__icontains',
        'username__startswith',
        'about__icontains',
    ]

    allowed_fields_ordering = ['username']

    def list(self):
        return self.ordering(self.filter(User.objects.all()))

    def is_authenticated(self):
        return True

    def detail(self, pk):

        return User.objects.get(id=pk)

    def create(self):

        user = User.objects.create(username=self.data['username'],
                                   about=self.data['about'])
        user.friends.set([
            User.objects.get(username=friend)
            for friend in self.data['friends']
        ])

        return user

    def update(self, pk):

        try:
            user = User.objects.get(id=pk)

        except User.DoesNotExist:

            user = User()

        user.username = self.data['username']
        user.about = self.data['about']
        user.save()
        user.friends.set([
            User.objects.get(username=friend)
            for friend in self.data['friends']
        ])

        return user

    def delete(self, pk):

        User.objects.get(id=pk).delete()
Example #10
0
class VideoLikedResource(DjangoResource):
    preparer = FieldsPreparer(fields={
        'id': 'id',
        'video_id': 'video.id',
        'username': '******',
        'create_time': 'create_time',
    })

    def is_authenticated(self):
        return self.request.user.is_authenticated()

    def create(self, video_id):
        video = Video.objects.get(pk=int(video_id))
        video_liked, created = VideoLiked.objects.get_or_create(video=video, user=self.request.user)

        if not created:
            video_liked.liked = self.data['liked']
            video_liked.save()

        return video_liked

    def update(self, video_id, pk):
        video_liked = VideoLiked.objects.get(pk=pk)
        video_liked.liked = self.data['liked']
        video_liked.save()

        return video_liked

    def delete_list(self, video_id):
        return VideoLiked.objects.filter(user=self.request.user, video__id=video_id).delete()

    def list(self, video_id):
        return VideoLiked.objects.filter(video__id=int(video_id), liked=True)
Example #11
0
class PatientResource(DjangoResource):
    preparer = FieldsPreparer(fields={
        'name': 'name',
        'email': 'email',
    })

    def list(self):
        return Patient.objects.all()

    def create(self):
        return Patient.objects.create(
            name=self.data['name'],
            email=self.data['email'],
        )

    def detail(self, pk):
        return get_object_or_404(Patient, pk=pk)

    def update(self, pk):
        patient = self.detail(pk)

        patient.name = self.data['name']
        patient.email = self.email['email']
        patient.save()

        return patient

    def delete(self, pk):
        patient = self.detail(pk)
        patient.delete()

        return "Paciente Deletado"

    def is_authenticated(self):
        return True
Example #12
0
class UserResourse(DjangoResource):
	preparer = FieldsPreparer(fields={
		'id': 'id',
		'username': '******',
		'about': 'about',})

	def is_authenticated(self):
		return True

	def list(self):
		return Users.objects.all()

	def create(self):
		return Users.objects.create(
			username=self.data['username'],
			about=self.data['about'])

	def delete(self, pk):
		Users.objects.get(id=pk).delete()

	def update(self, pk):
		user = Users.objects.get(id=pk)
		user.username = self.data['username']
		user.save()
		user.about= self.data['about']
		user.save()
		return user
Example #13
0
        def wrapper(cls):
            # Save the original init
            clsinit = getattr(cls, '__init__', lambda self: None)

            # Dirty trick, make the class belong to the type restful.Resource
            cls = type(cls.__name__, (Resource, ), dict(cls.__dict__))

            aliases = getattr(cls, 'aliases', None)
            if isinstance(aliases, dict) and len(aliases) > 0:
                cls.preparer = FieldsPreparer(fields=aliases)

            # Rename self for using inside __init__
            api = self

            def __init__(self, *args, **kwargs):
                # Call Resource constructor
                super(cls, self).__init__(api)

                # Initialize the instance
                clsinit(self, *args, **kwargs)

            cls.__init__ = __init__

            # Add the resource to the API
            cls.add_url_rules(self.app, prefix)

            return cls
Example #14
0
class PostResourse(DjangoResource):
	preparer = FieldsPreparer(fields={
		'id': 'id',
		'text': 'text',
		'author': 'user.username',
		'posted_at': 'posted_at',
		'likes':'likes'	})
	def is_authenticated(self):
		return True

	def list(self):
		posts=Post.objects.all()
		return posts

	def create(self):
		return Post.objects.create(
    		text=self.data['text'],
    		user=Users.objects.get(username=self.data['author']))

	def delete(self, pk):
		Post.objects.get(id=pk).delete()

	def update(self, pk):
		post = Post.objects.get(id=pk)
		post.text = self.data['about']
		post.save()
		return post
Example #15
0
class UserResource(Base):
    # Controls what data is included in the serialized output.

    preparer = FieldsPreparer(fields={
        'id': 'id',
        'role': 'role',
    })

    def is_authenticated(self):

        return True

    # GET /
    def list(self):
        return User.objects.all()

    # GET /pk/
    def detail(self, pk):
        return User.objects.get(id=pk)

    # POST /
    def create(self):
        pass

    # PUT /pk/
    def update(self, pk):
        pass

    # DELETE /pk/
    def delete(self, pk):
        pass
Example #16
0
class SliceResource(DjangoResource):
    preparer = FieldsPreparer(fields={
        'id': 'id',
        'origin': 'origin.name',
        'destination': 'destination.name',
        'price': 'price',
        'currency': 'currency.code',
        'quote_time': 'quote_time',
        'outbound_flight_number':'outbound_flight.flight_no',
        'outbound_flight_code':'outbound_flight.carrier_code',
        'inbound_flight_number':'inbound_flight.flight_no',
        'inbound_flight_code':'inbound_flight.carrier_code',
    })

    def list(self, *args, **kwargs):
        return Slice.objects.all().order_by('price')

    def detail(self, pk):
        return Slice.objects.get(id=pk)


    @classmethod
    def urls(cls, name_prefix=None):
        return patterns('',
            url(r'^$', cls.as_view('list'), name='list_slices'),
            url(r'^(?P<pk>\d+)/$', cls.as_detail('detail'), name='detail_slice'),
        )
Example #17
0
class Order(Base):
    preparer = FieldsPreparer(
        fields={
            'id': 'id',
            'student_name': 'student_id_fk.name',
            'order_style': 'order_style',
            'create_time': 'create_time',
            'update_time': 'update_time'
        })

    def list(self):
        return OiOrder.objects.all()

    # 在order->sutdent 外建 这里id 逻辑上是学生id
    def detail(self, pk):
        student = UiStudent.objects.get(id=pk)
        return OiOrder.objects.get(student=student)

    def create(self):
        pass

    def update(self, pk):
        pass

    def delete(self, pk):
        pass
Example #18
0
class ProvisioningResource(BaseResource):
    # This stuff isn't, strictly speaking, REST
    # But it's close enough
    preparer = FieldsPreparer(fields={
        'uuid': 'uuid',
        'name': 'name',
        'token': 'token',
        'deviceMAC': 'deviceMAC'
    })

    def is_authenticated(self):
        # We use the provisioning password
        return True

    def create(self):
        provisioning_password = self.data[
            "provisioning_password"] if "provisioning_password" in self.data else ""
        if DEVICE_PROVISIONING_PASSWORD != provisioning_password:
            raise Unauthorized()

        form = DeviceForm(self.data)
        if form.is_valid():
            try:
                form = DeviceForm(
                    self.data,
                    instance=Device.objects.get(
                        deviceMAC=form.cleaned_data["deviceMAC"]))
            except Device.DoesNotExist:
                pass
            return form.save()
        else:
            raise ValidationError(form.errors)
Example #19
0
class ObjectResource(CustomFlaskResource):
    preparer = AutoPreparer({
        'type':
        'type',
        'attributes':
        CollectionSubPreparer(
            'attributes',
            AutoPreparer({
                'type': 'type',
                'text': 'text',
                'score': 'score',
            })),
        'links':
        CollectionSubPreparer(
            'links',
            FieldsPreparer(
                fields={
                    'external_id':
                    'external_id',
                    'platform':
                    SubPreparer('platform',
                                AutoPreparer({
                                    'name': 'name',
                                    'slug': 'slug'
                                }))
                }))
    })

    def is_authenticated(self):
        return True

    def list(self):
        return ExternalObject.query.all()

    def detail(self, pk):
        return ExternalObject.query.filter(ExternalObject.id == pk).one()

    def create(self):
        scrap_id = request.headers.get('x-scrap-id', None)
        if scrap_id is None:
            raise restless.exceptions.\
                BadRequest('Missing `x-scrap-id` header')

        try:
            scrap = Scrap.query.filter(Scrap.id == scrap_id).one()
        except NoResultFound:
            raise restless.exceptions.NotFound('Scrap not found')

        data = ExternalObject.normalize_dict(self.data)

        if data['type'] is None:
            raise restless.exceptions.BadRequest('Field "type" is required')

        if data['relation'] is not None:
            raise restless.exceptions.BadRequest(
                'Field "relation" is not allowed on the root object')

        obj = ExternalObject.insert_dict(data, scrap)

        return obj
Example #20
0
class QuestionResource(DjangoResource):
    # Controls what data is included in the serialized output.
    preparer = FieldsPreparer(fields={'id': 'id', 'question': 'question_text'})

    # GET /
    def list(self):
        return Question.objects.all()

    # GET /pk/
    def detail(self, pk):
        return Question.objects.get(id=pk)

    # POST /
    def create(self):
        return Question.objects.create(question_text=self.data['question'], )

    # PUT /pk/
    def update(self, pk):
        try:
            question = Question.objects.get(id=pk)
        except Question.DoesNotExist:
            question = Question()

        question.question_text = self.data['question']
        question.save()
        return question

    # DELETE /pk/
    def delete(self, pk):
        Question.objects.get(id=pk).delete()
Example #21
0
 def preparer(self):
     if not hasattr(self, '_preparer_cache'):
         self._preparer_cache = FieldsPreparer(fields={
             f.name: f.name
             for f in self.model._meta.fields
         })
     return self._preparer_cache
Example #22
0
class RoleResource(TownSquareResource):
    model = Role

    preparer = FieldsPreparer({
        'id': 'id',
        'name': 'name'
    })
Example #23
0
 def setUp(self):
     super(LookupDataTestCase, self).setUp()
     self.preparer = FieldsPreparer(fields=None)
     self.obj_data = InstaObj(
         say='what',
         count=453,
         moof={
             'buried': {
                 'id': 7,
                 'data': InstaObj(yes='no')
             }
         },
         parent=None
     )
     self.dict_data = {
         'hello': 'world',
         'abc': 123,
         'more': {
             'things': 'here',
             'nested': InstaObj(
                 awesome=True,
                 depth=3
             ),
         },
         'parent': None,
     }
Example #24
0
    def test_prepare(self):
        # Without fields.
        data = {
            'title': 'Cosmos',
            'author': 'Carl Sagan',
            'short_desc':
            'A journey through the stars by an emminent astrophysist.',
            'pub_date': '1980'
        }

        # Should be unmodified.
        self.assertTrue(isinstance(self.res.preparer, Preparer))
        self.assertEqual(self.res.prepare(data), data)

        self.res.preparer = FieldsPreparer(fields={
            'title': 'title',
            'author': 'author',
            'synopsis': 'short_desc',
        })
        self.assertEqual(
            self.res.prepare(data), {
                'author': 'Carl Sagan',
                'synopsis':
                'A journey through the stars by an emminent astrophysist.',
                'title': 'Cosmos'
            })
Example #25
0
class ProcedureResource(DjangoResource):
    preparer = FieldsPreparer(fields={
        'name': 'name',
        'description': 'description',
    })

    def list(self):
        return Procedure.objects.all()

    def create(self):
        return Procedure.objects.create(
            name=self.data['name'],
            description=self.data['description'],
        )

    def detail(self, pk):
        return get_object_or_404(Procedure, pk=pk)

    def update(self, pk):
        procedure = self.detail(pk)

        procedure.name = self.data['name']
        procedure.description = self.data['description']
        procedure.save()

        return procedure

    def delete(self, pk):
        procedure = self.detail(pk)
        procedure.delete()

        return "Procedimento Deletado"

    def is_authenticated(self):
        return True
Example #26
0
class ProductResource(DjangoResource):
    preparer = FieldsPreparer(
        fields={
            'id': 'entity_id',
            'title': 'view.title',
            'description': 'view.description',
            'price': 'view.price',
            'categories': 'view.categories'
        })

    def list(self):
        return ProductProjection.objects.all()

    def detail(self, pk):
        return ProductProjection.objects.get(entity_id=pk)

    def create(self):
        event = ProductEvent.events_manager.create_event.save(self.data)
        return ProductProjection.objects.get(entity_id=event.entity_id)

    def update(self, pk):
        self.data['entity_id'] = pk
        event = ProductEvent.events_manager.update_event.save(self.data)
        return ProductProjection.objects.get(entity_id=event.entity_id)

    def delete(self, pk):
        self.data['entity_id'] = pk
        ProductEvent.events_manager.delete_event.save(self.data)
Example #27
0
def office_preparer():
    preparer = FieldsPreparer(fields={
        'id': 'id',
        'name': 'name',
        'slug': 'slug',
    })
    return preparer
Example #28
0
    def test_serialize_detail(self):
        # This isn't very unit-y, but we're also testing that we're using the
        # right JSON encoder & that it can handle other data types.
        data = {
            'title':
            'Cosmos',
            'author':
            'Carl Sagan',
            'short_desc':
            'A journey through the stars by an emminent astrophysist.',
        }

        self.res.preparer = FieldsPreparer(fields={
            'title': 'title',
            'author': 'author',
            'synopsis': 'short_desc',
        })
        res = self.res.serialize_detail(data)
        self.assertEqual(
            json.loads(res), {
                'author': 'Carl Sagan',
                'synopsis':
                'A journey through the stars by an emminent astrophysist.',
                'title': 'Cosmos'
            })

        # Make sure we don't try to serialize a ``None``, which would fail.
        self.assertEqual(self.res.serialize_detail(None), '')
Example #29
0
class BetResource(BaseResource):

    preparer = FieldsPreparer(
        fields={
            'id': 'id',
            'bet': 'bet',
            'rating': 'rating',
            'participant_id': 'participant_id',
            'race_date': 'participant.race.date.timestamp',
            'horse_name': 'participant.horse.name',
            'result': 'result',
            'success': 'win',
        })

    def list(self):
        return self.get_page(
            Bet.objects.filter(client_id=self.request.client.id).all())

    def wrap_list_response(self, data):
        return {'bets': data}

    @skip_prepare
    def create(self, *args, **kwargs):
        body = json.loads(self.request.body.decode("utf-8"))
        print(body)
        bet = Bet(bet=body['bet'], rating=body['rating'])
        participant = Participation.objects.get(id=body['participant_id'])
        bet.participant = participant
        user = self.request.client
        bet.client = user
        bet.save()

        return {'result': True}
Example #30
0
class LivrosResource(DjangoResource):

    preparer = FieldsPreparer(
        fields={
            'livro_id': 'id',
            'livro_titulo': 'titulo',
            'livro_autor': 'autor.nome',
            'livro_paginas': 'num_paginas',
        })

    def is_authenticated(self):
        return True

    def list(self):
        return Livro.objects.all()

    def detail(self, pk):
        return Livro.objects.get(id=pk)

    def create(self):
        autor = Autor.objects.get(id=self.data.get('autor', ''))
        return Livro.objects.create(
            autor=autor,
            titulo=self.data.get('titulo', ''),
            paginas=self.data.get('paginas', 0),
        )

    def update(self, pk):
        livro = Livro.objects.get(id=pk)
        livro.titulo = self.data.get('titulo', '')
        livro.paginas = self.data.get('paginas', 0)
        livro.save()
        return livro
Example #31
0
class ITSystemEventResource(DjangoResource):
    def __init__(self, *args, **kwargs):
        super(ITSystemEventResource, self).__init__(*args, **kwargs)
        self.http_methods.update({
            'current': {'GET': 'current'}
        })

    preparer = FieldsPreparer(fields={
        'id': 'id',
        'description': 'description',
        'planned': 'planned',
        'current': 'current',
    })

    def prepare(self, data):
        prepped = super(ITSystemEventResource, self).prepare(data)
        prepped['event_type'] = data.get_event_type_display()
        # Output times as the local timezone.
        tz = pytz.timezone(settings.TIME_ZONE)
        prepped['start'] = data.start.astimezone(tz)
        if data.end:
            prepped['end'] = data.end.astimezone(tz)
        else:
            prepped['end'] = None
        if data.duration:
            prepped['duration_sec'] = data.duration.seconds
        else:
            prepped['duration_sec'] = None
        if data.it_systems:
            prepped['it_systems'] = [i.name for i in data.it_systems.all()]
        else:
            prepped['it_systems'] = None
        if data.locations:
            prepped['locations'] = [i.name for i in data.locations.all()]
        else:
            prepped['locations'] = None
        return prepped

    @skip_prepare
    def current(self):
        # Slightly-expensive query: iterate over each 'current' event and call save().
        # This should automatically expire any events that need to be non-current.
        for i in ITSystemEvent.objects.filter(current=True):
            i.save()
        # Return prepared data.
        return {'objects': [self.prepare(data) for data in ITSystemEvent.objects.filter(current=True)]}

    def list(self):
        return ITSystemEvent.objects.all()

    def detail(self, pk):
        return ITSystemEvent.objects.get(pk=pk)

    @classmethod
    def urls(self, name_prefix=None):
        urlpatterns = super(ITSystemEventResource, self).urls(name_prefix=name_prefix)
        return [
            url(r'^current/$', self.as_view('current'), name=self.build_url_name('current', name_prefix)),
        ] + urlpatterns
Example #32
0
    def __init__(self, *args, **kwargs):
        super(TicketResource, self).__init__(*args, **kwargs)

        self.http_methods.update({
            'issue': {
                'GET': 'issue',
            }
        })

        self.ticket_preparer = FieldsPreparer(fields={
            'record_locator': 'record_locator'
        })
Example #33
0
class TicketResource(DjangoResource):

    def __init__(self, *args, **kwargs):
        super(TicketResource, self).__init__(*args, **kwargs)

        self.http_methods.update({
            'issue': {
                'GET': 'issue',
            }
        })

        self.ticket_preparer = FieldsPreparer(fields={
            'record_locator': 'record_locator'
        })

    def prepare_tickets(self, tickets):
        locators = []
        for t in tickets:
            locators.append(self.ticket_preparer.prepare(t))

        data = {
            'locators': locators
        }
        return data


    @skip_prepare
    def issue(self, num_locators=1, zip_code=None):
        if self.request and 'num_locators' in self.request.GET:
            num_locators = self.request.GET.get('num_locators', 1)
            num_locators = int(num_locators)

        if self.request and 'zip' in self.request.GET:
            zip_code = self.request.GET.get('zip', '00000')

        tickets, _ = create_tickets(zip_code, num_locators)
        response = self.prepare_tickets(tickets)
        return response

    # Finally, extend the URLs
    @classmethod
    def urls(cls, name_prefix=None):
        urlpatterns = super(TicketResource, cls).urls(name_prefix=name_prefix)
        new = [
            url(
                r'^issue/', cls.as_view('issue'),
                name=cls.build_url_name('issue', name_prefix)),
        ] + urlpatterns
        return new
Example #34
0
class LookupDataTestCase(unittest.TestCase):
    def setUp(self):
        super(LookupDataTestCase, self).setUp()
        self.preparer = FieldsPreparer(fields=None)
        self.obj_data = InstaObj(
            say='what',
            count=453,
            moof={
                'buried': {
                    'id': 7,
                    'data': InstaObj(yes='no')
                }
            },
            parent=None
        )
        self.dict_data = {
            'hello': 'world',
            'abc': 123,
            'more': {
                'things': 'here',
                'nested': InstaObj(
                    awesome=True,
                    depth=3
                ),
            },
            'parent': None,
        }

    def test_dict_simple(self):
        self.assertEqual(self.preparer.lookup_data('hello', self.dict_data), 'world')
        self.assertEqual(self.preparer.lookup_data('abc', self.dict_data), 123)

    def test_obj_simple(self):
        self.assertEqual(self.preparer.lookup_data('say', self.obj_data), 'what')
        self.assertEqual(self.preparer.lookup_data('count', self.obj_data), 453)

    def test_dict_nested(self):
        self.assertEqual(self.preparer.lookup_data('more.things', self.dict_data), 'here')
        self.assertEqual(self.preparer.lookup_data('more.nested.depth', self.dict_data), 3)

    def test_obj_nested(self):
        self.assertEqual(self.preparer.lookup_data('moof.buried.id', self.obj_data), 7)
        self.assertEqual(self.preparer.lookup_data('moof.buried.data.yes', self.obj_data), 'no')

    def test_dict_miss(self):
        with self.assertRaises(KeyError):
            self.preparer.lookup_data('another', self.dict_data)

    def test_obj_miss(self):
        with self.assertRaises(AttributeError):
            self.preparer.lookup_data('whee', self.obj_data)

    def test_dict_nullable_fk(self):
        self.assertEqual(self.preparer.lookup_data('parent.id', self.dict_data), None)

    def test_obj_nullable_fk(self):
        self.assertEqual(self.preparer.lookup_data('parent.id', self.obj_data), None)

    def test_empty_lookup(self):
        # We could possibly get here in the recursion.
        self.assertEqual(self.preparer.lookup_data('', 'Last value'), 'Last value')

    def test_complex_miss(self):
        with self.assertRaises(AttributeError):
            self.preparer.lookup_data('more.nested.nope', self.dict_data)
Example #35
0
class LookupDataTestCase(unittest.TestCase):
    def setUp(self):
        super(LookupDataTestCase, self).setUp()
        self.preparer = FieldsPreparer(fields=None)
        self.obj_data = InstaObj(
            say='what',
            count=453,
            moof={
                'buried': {
                    'id': 7,
                    'data': InstaObj(yes='no')
                }
            },
            parent=None
        )
        self.dict_data = {
            'hello': 'world',
            'abc': 123,
            'more': {
                'things': 'here',
                'nested': InstaObj(
                    awesome=True,
                    depth=3
                ),
            },
            'parent': None,
            'who': [
                {'name': 'Ford'},
                {'name': 'Arthur'},
                {'name': 'Beeblebrox'},
            ],
            'dont': lambda: {
                'panic': 'vogon',
            },
        }

    def test_dict_simple(self):
        self.assertEqual(self.preparer.lookup_data('hello', self.dict_data), 'world')
        self.assertEqual(self.preparer.lookup_data('abc', self.dict_data), 123)

    def test_obj_simple(self):
        self.assertEqual(self.preparer.lookup_data('say', self.obj_data), 'what')
        self.assertEqual(self.preparer.lookup_data('count', self.obj_data), 453)

    def test_dict_nested(self):
        self.assertEqual(self.preparer.lookup_data('more.things', self.dict_data), 'here')
        self.assertEqual(self.preparer.lookup_data('more.nested.depth', self.dict_data), 3)

    def test_obj_nested(self):
        self.assertEqual(self.preparer.lookup_data('moof.buried.id', self.obj_data), 7)
        self.assertEqual(self.preparer.lookup_data('moof.buried.data.yes', self.obj_data), 'no')

    def test_dict_miss(self):
        with self.assertRaises(KeyError):
            self.preparer.lookup_data('another', self.dict_data)

    def test_obj_miss(self):
        with self.assertRaises(AttributeError):
            self.preparer.lookup_data('whee', self.obj_data)

    def test_dict_nullable_fk(self):
        self.assertIsNone(self.preparer.lookup_data('parent.id', self.dict_data))

    def test_obj_nullable_fk(self):
        self.assertIsNone(self.preparer.lookup_data('parent.id', self.obj_data))

    def test_empty_lookup(self):
        # We could possibly get here in the recursion.
        self.assertEqual(self.preparer.lookup_data('', 'Last value'), 'Last value')

    def test_complex_miss(self):
        with self.assertRaises(AttributeError):
            self.preparer.lookup_data('more.nested.nope', self.dict_data)

    def test_obj_callable(self):
        self.assertEqual(
            self.preparer.lookup_data('dont.panic', self.obj_data),
            'vogon',
        )

    def test_dict_callable(self):
        self.assertEqual(
            self.preparer.lookup_data('dont.panic', self.dict_data),
            'vogon',
        )

    def test_prepare_simple(self):
        preparer = FieldsPreparer(fields={
            'flying': 'say',
        })
        preped = preparer.prepare(self.obj_data)
        self.assertEqual(preped, {'flying': 'what'})

    def test_prepare_subpreparer(self):
        subpreparer = FieldsPreparer(fields={
            'id': 'id',
            'data': 'data',
        })
        preparer = FieldsPreparer(fields={
            'flying': 'say',
            'wale': SubPreparer('moof.buried', subpreparer),
        })
        preped = preparer.prepare(self.obj_data)

    def test_prepare_subsubpreparer(self):
        subsubpreparer = FieldsPreparer(fields={
            'really': 'yes',
        })
        subpreparer = FieldsPreparer(fields={
            'data': SubPreparer('data', subsubpreparer),
        })
        preparer = FieldsPreparer(fields={
            'wale': SubPreparer('moof.buried', subpreparer),
        })
        preped = preparer.prepare(self.obj_data)
        self.assertEqual(preped, {'wale': {'data': {'really': 'no'}}})

    def test_prepare_collection_subpreparer(self):
        subpreparer = FieldsPreparer(fields={
            'name': 'name',
        })
        preparer = FieldsPreparer(fields={
            'who': CollectionSubPreparer('who', subpreparer),
        })
        preped = preparer.prepare(self.dict_data)
        self.assertEqual(preped, {'who': [
            {'name': 'Ford'},
            {'name': 'Arthur'},
            {'name': 'Beeblebrox'},
        ]})
Example #36
0
 def test_prepare_simple(self):
     preparer = FieldsPreparer(fields={
         'flying': 'say',
     })
     preped = preparer.prepare(self.obj_data)
     self.assertEqual(preped, {'flying': 'what'})