示例#1
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
示例#2
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'},
     ]})
示例#3
0
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}
示例#4
0
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()
示例#5
0
        '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
示例#6
0
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)
})
示例#7
0
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
示例#8
0
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
示例#9
0
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)
        )
示例#10
0
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()