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
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'}, ]})
class RaceResource(BaseResource): horse_preparer = FieldsPreparer(fields={'id': 'id', 'name': 'name'}) organizer_preparer = FieldsPreparer(fields={'id': 'id', 'name': 'name'}) bet_preparer = FieldsPreparer(fields={'bet': 'bet', 'rating': 'rating'}) participant_preparer = FieldsPreparer( fields={ 'id': 'id', 'horse': SubPreparer('horse', horse_preparer), 'rating': 'rate', 'bets': CollectionSubPreparer('bets.all', bet_preparer) }) preparer = FieldsPreparer( fields={ 'id': 'id', 'title': 'track', 'dateTime': 'date.timestamp', 'organizer': SubPreparer('organizer', organizer_preparer), 'participants': CollectionSubPreparer('participants.all', participant_preparer) }) def list(self, *args, **kwargs): return self.get_page(Race.objects.all()) def detail(self, pk): return Race.objects.get(id=pk) def wrap_list_response(self, data): return {"races": data}
class ValueResource(CustomFlaskResource): preparer = AutoPreparer({ 'type': 'type', 'external_object': SubPreparer('external_object', AutoPreparer({ 'type': 'type', })), 'text': 'text', 'score': 'score', 'sources': CollectionSubPreparer( 'value_sources', FieldsPreparer( fields={ 'platform': SubPreparer('platform', AutoPreparer({ 'name': 'name', })), 'score': 'score', 'score_factor': 'score_factor', })), }) def is_authenticated(self): return True def list(self): return Value.query.all() def detail(self, pk): return Value.query.filter(Value.id == pk).one()
'fiat_price': 'fiat_price', 'fiat_price_str': 'fiat_price_str', 'profit_p': 'profit_p', 'profit_p_str': 'profit_p_str', 'profit': 'profit', 'profit_str': 'profit_str', 'last_update': 'last_update', 'coins_accounts': CollectionSubPreparer('coins_accounts', coin_account_preparer) }) class WalletResource(FlaskResource): preparer = wallet_preparer def detail(self, pk): wallet = WalletStorage.get(pk) wallet.update() return wallet.get_all() def is_authenticated(self): if self.request.method == 'POST': return True
from restless.preparers import FieldsPreparer, CollectionSubPreparer client_preparer = FieldsPreparer(fields={ 'id': 'id', 'full_name': 'full_name', }) # Then, in the main preparer, pull them in using `SubPreparer`. room_preparer = FieldsPreparer(fields={ 'clients': CollectionSubPreparer('clients', client_preparer), 'number': 'number', }) hotel_preparer = FieldsPreparer(fields={ 'title': 'title', 'rooms': CollectionSubPreparer('rooms', room_preparer) })
class GroupResource(DjangoResource): member_preparer = FieldsPreparer(fields={ 'id': 'id', 'username': '******', }) preparer = FieldsPreparer(fields={ 'id': 'id', 'name': 'name', 'groupname': 'groupname', 'description': 'description', 'type': 'grouptype', 'address': 'address.id', 'creator': 'creator.username', 'members': CollectionSubPreparer('members.all', member_preparer), }) def is_authenticated(self): try: session = Session.objects.get(token=self.request.META.get('HTTP_TOKEN')) return True except: return False # GET /api/groups/ def list(self): return Group.objects.filter(grouptype='0') # Adicionar grupos que o usuário logado participa # GET /api/groups/<pk>/ def detail(self, pk): group = Group.objects.get(id=pk) if group.grouptype == '0': return group else: raise Warning('The group you are trying to access is private') # POST /api/groups/ def create(self): session = Session.objects.get(token=self.request.META.get('HTTP_TOKEN')) group = Group.objects.create( name = self.data['name'], groupname = self.data['groupname'], description = self.data['description'], grouptype = self.data['type'], address = Chat.objects.create(), creator = session.user ) Membership.objects.create( group = group, person = session.user, admin = True ) return group # PUT /api/groups/<pk>/ def update(self, pk): session = Session.objects.get(token=self.request.META.get('HTTP_TOKEN')) try: group = Group.objects.get(id=pk) except: raise Warning('The group you are trying to update does not exist') if session.user == group.creator: group.name = self.data['name'] group.groupname = self.data['groupname'] group.description = self.data['description'] group.grouptype = self.data['type'] group.save() return group else: raise Warning('You have no permission to update this group') # DELETE /api/groups/<pk>/ def delete(self, pk): session = Session.objects.get(token=self.request.META.get('HTTP_TOKEN')) try: group = Group.objects.get(id=pk) except: raise Warning('The group you are trying to delete does not exist') if session.user == group.creator: group.address.delete() return group else: raise Warning('You have no permission to delete this group') def is_debug(self): return False
class PlatformGroupResource(CustomFlaskResource): preparer = AutoPreparer({ 'name': 'name', 'platforms': CollectionSubPreparer( 'platforms', AutoPreparer({ 'name': 'name', 'slug': 'slug', 'country': 'country', })), }) def is_authenticated(self): return True def list(self): return PlatformGroup.query.all() def detail(self, pk): try: return PlatformGroup.query.filter(PlatformGroup.id == pk).one() except sqlalchemy.orm.exc.NoResultFound: raise restless.exceptions.NotFound() def create(self): id = db.session.query(PlatformGroup.id)\ .filter(PlatformGroup.name == self.data['name'])\ .first() group = db.session.merge(PlatformGroup(id=id, name=self.data['name'])) if 'platforms' in self.data: for platform in self.data['platforms']: pid = platform['id'] if isinstance(platform, dict) \ else platform try: group.platforms.append( Platform.query.filter(Platform.id == pid).one()) except sqlalchemy.orm.exc.NoResultFound: raise restless.exceptions.BadRequest() db.session.add(group) db.session.commit() return group def delete(self, pk): try: group = PlatformGroup.query.filter(PlatformGroup.id == pk).one() except sqlalchemy.orm.exc.NoResultFound: raise restless.exceptions.NotFound() db.session.delete(group) db.session.commit() def update(self, pk): try: group = PlatformGroup.query.filter(PlatformGroup.id == pk).one() except sqlalchemy.orm.exc.NoResultFound: raise restless.exceptions.NotFound() if 'name' in self.data: group.name = self.data['name'] db.session.commit() return group
class CandidateDetailResource(DjangoResource): bill_preparer = FieldsPreparer( fields={"name": "name", "keywords": "keywords", "url": "url"} ) preparer = FieldsPreparer( fields={ "id": "id", "name": "name", "image": "image", "ballot_name": "ballot_name", "ballot_number": "number", "city": "politician.current_affiliation.city.name", "state": "state", "party": "party.name", "party_abbreviation": "party.abbreviation", "affiliation_history": "affiliation_history", "asset_history": "asset_history", "elections": "elections", "elections_won": "elections_won", "election_history": "election_history", "date_of_birth": "date_of_birth", "city_of_birth": "place_of_birth.name", "state_of_birth": "place_of_birth.state", "gender": "gender", "email": "email", "age": "get_age", "ethnicity": "ethnicity", "marital_status": "marital_status", "education": "education", "nationality": "nationality", "occupation": "occupation", "post": "post", "post_code": "post_code", "number": "number", "coalition_name": "coalition_name", "coalition_description": "coalition_description", "coalition_short_name": "coalition_short_name", "bills": CollectionSubPreparer("bills", bill_preparer), "bill_keywords": "bill_keywords", "rosies_suspicions": "rosies_suspicions", } ) @cached_property def api_fields(self): """Define fields to select in the QuerySet based on preparer fields""" fields = ["year", "sequential"] methods = { "elections", "elections_won", "image", "get_age", "rosies_suspicions", } for field in self.preparer.fields.values(): if field in methods or not isinstance(field, str): continue if field == "election_history": field = "politician__election_history" if field == "affiliation_history": field = "politician__affiliation_history" if field == "asset_history": field = "politician__asset_history" if field == "bill_keywords": field = "politician__bill_keywords" fields.append(field.replace(".", "__")) return tuple(fields) def detail(self, pk): return ( Candidate.objects.select_related("party", "politician", "place_of_birth") .only(*self.api_fields) .get(pk=pk) )
class TeacherAPI(Base): stu_preparer = FieldsPreparer(fields={"id": 'id', "name": "name"}) preparer = FieldsPreparer( fields={ 'id': 'id', 'name': 'name', 'sex': 'sex', 'mobile': 'mobile', 'qq': 'qq', 'student': CollectionSubPreparer("student", stu_preparer), 'remark': 'remark', 'is_xiaoqugroup': 'is_xiaoqugroup', 'train_records': 'train_records', 'is_xieyi_back': 'is_xieyi_back', 'is_xieyi_send': 'is_xieyi_send', "is_weixunqun": 'is_weixunqun', 'birth': 'birth', 'is_stay': 'is_stay', 'final_rank': 'final_rank', 'second_rank': 'second_rank', 'second_score': 'second_score', "first_rank": 'first_rank', 'politic_class_score': 'politic_class_score', 'english_class_score': 'english_class_score', 'pro_class_score': 'pro_class_score', 'first_total': 'first_total', 'study_type': 'study_type', 'study_year': 'study_year', 'join_year': 'join_year', 'passed_type': 'passed_type', 'is_passed': 'is_passed', 'is_wokring': 'is_wokring', 'is_cross_major': 'is_cross_major', 'is_war_more': 'is_war_more', 'school_312': 'school_312', 'fudao_school': 'fudao_school', 'bachelor_major': 'bachelor_major', 'bachelor_school': 'bachelor_school', 'job': 'job', 'bank_name': 'bank_name', 'bank_number': 'bank_number', 'idcard': 'idcard', 'is_zhinanqun': 'is_zhinanqun', 'is_fudaogongzuoqun': 'is_fudaogongzuoqun' }) def list(self): return Teacher.objects.filter( name__icontains=self.request.GET.get('name', ''), job__icontains=self.request.GET.get('job', ''), is_stay__icontains=self.request.GET.get('is_stay', ''), fudao_school__icontains=self.request.GET.get('fudao_school', ''), is_cross_major__icontains=self.request.GET.get( 'is_cross_major', ''), is_war_more__icontains=self.request.GET.get('is_war_more', ''), is_wokring__icontains=self.request.GET.get('is_working', ''), study_type__icontains=self.request.GET.get('study_type', '')).order_by('id') def detail(self, pk): return Teacher.objects.get(id=pk) def create(self): data = self.data t = Teacher() t.name = data['name'] if 'name' in data else '' t.sex = data['sex'] if 'sex' in data else '' t.qq = data['qq'] if 'qq' in data else '' t.mobile = data['mobile'] if 'mobile' in data else '' t.idcard = data['idcard'] if 'idcard' in data else '' t.bank_number = data['bank_number'] if 'bank_number' in data else '' t.job = data['job'] if 'job' in data else '' t.bachelor_school = data[ 'bachelor_school'] if 'bachelor_school' in data else '' t.bachelor_major = data[ 'bachelor_major'] if 'bachelor_major' in data else '' t.fudao_school = data['fudao_school'] if 'fudao_school' in data else '' t.school_312 = data['school_312'] if 'school_312' in data else '' t.is_war_more = data['is_war_more'] if 'is_war_more' in data else '' t.is_cross_major = data[ 'is_cross_major'] if 'is_cross_major' in data else '' t.is_wokring = data['is_wokring'] if 'is_wokring' in data else '' t.is_passed = data['is_passed'] if 'is_passed' in data else '' t.passed_type = data['passed_type'] if 'passed_type' in data else '' t.join_year = data['join_year'] if 'join_year' in data else '' t.study_year = data['study_year'] if 'study_year' in data else '' t.study_type = data['study_type'] if 'study_type' in data else '' t.first_total = data['first_total'] if 'first_total' in data else '' t.pro_class_score = data[ 'pro_class_score'] if 'pro_class_score' in data else '' t.english_class_score = data[ 'english_class_score'] if 'english_class_score' in data else '' t.politic_class_score = data[ 'politic_class_score'] if 'politic_class_score' in data else '' t.first_rank = data['first_rank'] if 'first_rank' in data else '' t.second_score = data['second_score'] if 'second_score' in data else '' t.second_rank = data['second_rank'] if 'second_rank' in data else '' t.final_rank = data['final_rank'] if 'final_rank' in data else '' t.is_stay = data['is_stay'] if 'is_stay' in data else '' t.birth = data['birth'] if 'birth' in data else '' t.is_zhinanqun = data['is_zhinanqun'] if 'is_zhinanqun' in data else '' t.is_fudaogongzuoqun = data[ 'is_fudaogongzuoqun'] if 'is_fudaogongzuoqun' in data else '' t.is_weixunqun = data['is_weixunqun'] if 'is_weixunqun' in data else '' t.is_xieyi_send = data[ 'is_xieyi_send'] if 'is_xieyi_send' in data else '' t.is_xieyi_back = data[ 'is_xieyi_back'] if 'is_xieyi_back' in data else '' t.is_xiaoqugroup = data[ 'is_xiaoqugroup'] if 'is_xiaoqugroup' in data else '' t.train_records = data[ 'train_records'] if 'train_records' in data else '' t.remark = data['remark'] if 'remark' in data else '' t.save() return t def update(self, pk): t = Teacher.objects.get(id=int(pk)) data = self.data t.name = data['name'] if 'name' in data else '' t.sex = data['sex'] if 'sex' in data else '' t.qq = data['qq'] if 'qq' in data else '' t.mobile = data['mobile'] if 'mobile' in data else '' t.idcard = data['idcard'] if 'idcard' in data else '' t.bank_number = data['bank_number'] if 'bank_number' in data else '' t.job = data['job'] if 'job' in data else '' t.bachelor_school = data[ 'bachelor_school'] if 'bachelor_school' in data else '' t.bachelor_major = data[ 'bachelor_major'] if 'bachelor_major' in data else '' t.fudao_school = data['fudao_school'] if 'fudao_school' in data else '' t.school_312 = data['school_312'] if 'school_312' in data else '' t.is_war_more = data['is_war_more'] if 'is_war_more' in data else '' t.is_cross_major = data[ 'is_cross_major'] if 'is_cross_major' in data else '' t.is_wokring = data['is_wokring'] if 'is_wokring' in data else '' t.is_passed = data['is_passed'] if 'is_passed' in data else '' t.passed_type = data['passed_type'] if 'passed_type' in data else '' t.join_year = data['join_year'] if 'join_year' in data else '' t.study_year = data['study_year'] if 'study_year' in data else '' t.study_type = data['study_type'] if 'study_type' in data else '' t.first_total = data['first_total'] if 'first_total' in data else '' t.pro_class_score = data[ 'pro_class_score'] if 'pro_class_score' in data else '' t.english_class_score = data[ 'english_class_score'] if 'english_class_score' in data else '' t.politic_class_score = data[ 'politic_class_score'] if 'politic_class_score' in data else '' t.first_rank = data['first_rank'] if 'first_rank' in data else '' t.second_score = data['second_score'] if 'second_score' in data else '' t.second_rank = data['second_rank'] if 'second_rank' in data else '' t.final_rank = data['final_rank'] if 'final_rank' in data else '' t.is_stay = data['is_stay'] if 'is_stay' in data else '' t.birth = data['birth'] if 'birth' in data else '' t.is_zhinanqun = data['is_zhinanqun'] if 'is_zhinanqun' in data else '' t.is_fudaogongzuoqun = data[ 'is_fudaogongzuoqun'] if 'is_fudaogongzuoqun' in data else '' t.is_weixunqun = data['is_weixunqun'] if 'is_weixunqun' in data else '' t.is_xieyi_send = data[ 'is_xieyi_send'] if 'is_xieyi_send' in data else '' t.is_xieyi_back = data[ 'is_xieyi_back'] if 'is_xieyi_back' in data else '' t.is_xiaoqugroup = data[ 'is_xiaoqugroup'] if 'is_xiaoqugroup' in data else '' t.train_records = data[ 'train_records'] if 'train_records' in data else '' t.remark = data['remark'] if 'remark' in data else '' t.save() return t def delete(self, pk): Teacher.objects.get(id=pk).delete()