Django Rest Framework Utils
Project description
Django Rest Framework - Utils
A set of util functions used in EBS Projects
Install:
pip install drf_util
Functions
Get value from an object by path
Definition:
gt(obj, path, default=None)
Usage:
>>> data = {"a":{"b": 1}}
>>> print(gt(data, 'a.b'))
1
Get recursive values from a dict by keys
Definition:
get_object_labels(obj, path, default=None)
Usage:
>>> data = {"a":{"b": 'title'}, "c": 'test'}
>>> print(get_object_labels(data))
['title', 'test']
>>> data = {"a":{"b": 'title'}, "c": 'test'}
>>> print(get_object_labels(data, ['c']))
['test']
map() alternative with chunk select
Definition:
fetch_objects(instance, function, select=50)
Usage:
>>> def print_name(obj):
print obj.name
>>>
>>> fetch_objects(UserBigList.objects.order_by('id'), print_name, 500)
Select a first true value
Definition:
any_value(items: list)
Usage:
>>> print(any_value('', None, 0, "Some text", 50000))
Some text
Recursive merge two dict
Definition:
dict_merge(a, b, path=None)
Usage:
>>> a = {'a': {'c': 1, 'd': {'x': 1}}}
>>> b = {'a': {'e': 1, 'd': {'y': 1}}}
>>> print(dict_merge(a, b))
{'a': {'c': 1, 'e': 1, 'd': {'x': 1, 'y': 1}}}
Decorators
serialize_decorator
Definition:
serialize_decorator(serializer_method, preview_function=None, read_params=False)
Usage:
class RestoreUserPassword(GenericAPIView):
@serialize_decorator(RestoreUserSerializer)
def post(self, request, *args, **kwargs):
return Response({"valid": True})
Managers
- NoDeleteManager
Models
- CommonModel - with date_created and date_updated
- NoDeleteModel - with date_deleted
- AbstractJsonModel - with languages
Validators
- ObjectExistValidator - check if object exists
- ObjectUniqueValidator - check if object not exists
- PhoneValidator - check phone
Serializers
ElasticFilterSerializer - make easy conversion between serializer data and elastic filters
class TenderFilterSerializer(PaginatorSerializer, ElasticFilterSerializer):
sort_criteria = [{"date_updated": {"order": "desc"}}, "_score"]
status = StringListField(required=False)
date_start = serializers.DateField(required=False)
date_end = serializers.DateField(required=False)
def filter_status(self, value):
return {'terms': {
'search_status.keyword': value
}}
def filter_date_start(self, value):
return {
"range": {
"tenderPeriod.startDate": {'gte': value}
}
}
def filter_date_end(self, value):
return {
"range": {
"tenderPeriod.startDate": {'lte': value}
}
}
class TenderListView(GenericAPIView):
@serialize_decorator(TenderFilterSerializer)
def get(self, request, *args, **kwargs):
return Response(es_app.search_response(request.serializer, 'tenders_index'))
ChangebleSerializer - metamorphic serializer
class ContractNoticeCancelView(GenericAPIView):
def put(self, request):
serializer_meta = {
'id': PrimaryKeyRelatedField(queryset=Tender.objects.all(), required=True),
'info': {
'rationale': CharField(required=True),
'description': CharField(required=True),
},
'documents': DocumentFileSerializer(required=True, many=True)
}
serializer = ChangebleSerializer(data=request.data)
serializer.update_properties(serializer_meta)
serializer.is_valid(raise_exception=True)
return Response({"valid": True})
PaginatorSerializer - serializer for paginating
class ListUserNotification(GenericAPIView):
@serialize_decorator(PaginatorSerializer)
def get(self, request):
notifications = NotificationEvent.objects.filter(user=request.user)
return request.serializer.response(notifications, serializer=ListNotificationSerializer)
Another serializers
- StringListField - simple string list of chars
- EmptySerializer - simple empty serializer
- IdSerializer - simple id serializer
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
drf_util-0.0.7.tar.gz
(8.0 kB
view hashes)