def paginateColl(start=0, length=settings.REST_FRAMEWORK['PAGE_SIZE']): print('paginate coll', start, length) documents = db.list_collection_names() nrecordsTotal = len(documents) nrecords = len(documents) documents = documents[start:start + length] resp = { 'recordsTotal': nrecordsTotal, 'recordsFiltered': nrecords, 'start': start, 'length': len(documents), 'data': to_json(documents) } return resp
def retrieve(self, request, dbcollection, pk=None, format=None): try: print ('EntityViewSet Retrieve: ' , request.user, request, self.kwargs, dbcollection) if request.user.is_superuser: doc = db[dbcollection].find_one( {'_id': ObjectId(pk)} ) else: print ('use filter on access_w') doc = db[dbcollection].find_one( {'_id': ObjectId(pk), 'access_w': {'$exists': True, '$in': request.user['heritage']['w']} } ) if doc: return Response(to_json(doc), status=status.HTTP_200_OK) else: return Response(status=status.HTTP_404_NOT_FOUND) except Exception as e: print ('EntityViewSet retrieve error: ', e) return Response(status=status.HTTP_400_BAD_REQUEST)
def create(self, request, dbcollection): try: print (request.data) print ('EntityViewSet: ' , request.user, request, self.kwargs, dbcollection) collection = request.data[dbcollection] entity_id = db[dbcollection].insert_one( request.data ).inserted_id if entity_id == None: raise ('Error in insert creating entity of type ', self.kwargs['dbcollection'] ) print (entity_id) doc = db[dbcollection].find_one({'_id': entity_id}) return Response(to_json(doc), status=status.HTTP_201_CREATED) except Exception as e: print ('EntityViewSet error: ', e) return Response(status=status.HTTP_400_BAD_REQUEST)
def findOne(self, request, pk=None, format=None): try: print('CollectionViewSet findOne: ', request.user, request) doc = db[pk].find_one() if doc: return Response(to_json(doc), status=status.HTTP_200_OK) else: return Response([], status=status.HTTP_404_NOT_FOUND) except Exception as e: print('CollectionViewSet findOne error: ', e) resp = ResponseSerializer(data={ 'success': False, 'errorCode': 'Bad request' }) resp.is_valid() return Response(resp.data, status=status.HTTP_400_BAD_REQUEST)
def autocomplete(self, request, dbcollection): try: print (request.query_params) fieldFilter = request.query_params.get('field') queryString = request.query_params.get('q') search = '(.*)' + queryString.strip() + '(.*)' search = search.replace(' ', '(.*)') regex = re.compile(search, re.IGNORECASE) if request.user.is_superuser: doc = db[dbcollection].find({fieldFilter:{"$regex":regex,"$options": 'ix'} }).limit(10) else: user = db.user.find_one({'_id': request.user.username}) print ('use filter on access_w') doc = db[dbcollection].find({fieldFilter:{"$regex":regex, "$options": 'ix'}, 'access_w': {'$exists': True, '$in': user['heritage']['w']} }).limit(10) if doc: return Response(to_json(doc), status=status.HTTP_200_OK) else: return Response(status=status.HTTP_404_NOT_FOUND) except Exception as e: print ('Autocomplete error:', e) return Response(status=status.HTTP_400_BAD_REQUEST)