def test_parse_eq_other(self): parser = RequestParser() parser.add_argument("foo"), args = parser.parse_args( Request.from_values("/bubble?foo=bar&foo=bat")) self.assertEquals(args['foo'], "bar")
def __init__(self): self.parser = RequestParser() self.parser.add_argument('order_id', type=str)
def post(self): """ 新增用户 """ json_parser = RequestParser() json_parser.add_argument('account', type=parser.mis_account, required=True, location='json') json_parser.add_argument('password', type=parser.mis_password, required=True, location='json') json_parser.add_argument('name', type=inputs.regex(r'^.{1,7}$'), required=True, location='json') json_parser.add_argument('profile_photo', type=parser.image_base64, required=False, location='json') json_parser.add_argument('introduction', required=False, location='json') json_parser.add_argument('email', type=parser.email, required=False, location='json') json_parser.add_argument('mobile', type=parser.mobile, required=True, location='json') json_parser.add_argument('gender', type=inputs.int_range(0, 1), required=True, location='json') json_parser.add_argument('area', required=False, location='json') json_parser.add_argument('company', required=False, location='json') json_parser.add_argument('career', required=False, location='json') args = json_parser.parse_args() if User.query.filter_by(account=args.account).first(): return {'message': '{} already exists'.format(args.account)}, 403 if User.query.filter_by(mobile=args.mobile).first(): return {'message': '{} already exists'.format(args.mobile)}, 403 user = User(account=args.account, password=generate_password_hash(args.password), name=args.name, introduction=args.introduction, email=args.email, mobile=args.mobile, status=User.STATUS.ENABLE, last_login=datetime.now()) if args.profile_photo: try: photo_url = upload_image(args.profile_photo) user.profile_photo = photo_url except Exception as e: current_app.logger.error('upload failed {}'.format(e)) return { 'message': 'Uploading profile photo image failed.' }, 507 db.session.add(user) db.session.commit() user_profile = UserProfile(id=user.id, gender=args.gender, area=args.area, company=args.company, career=args.career) db.session.add(user_profile) db.session.commit() return marshal(user, UserListResource.user_fields), 201
''' @app.errorhandler(404) def page_not_found(error): return render_template('error.html'), 404 @app.errorhandler(403) def page_forbidden(error): return render_template('error.html'), 403 ''' Restful API handler ''' # Request data configuration data_parser = RequestParser() data_parser.add_argument('user_msg', type=str, required=True, location='json') # POST /api/v1/test class Test(Resource): def post(self): try: args = data_parser.parse_args() user_msg = args['user_msg'].strip() return { 'state': True, 'answer': user_msg }, 200 except Exception as e: return {'state': False, 'msg': e}, 204 api.add_resource(Test, '/test') # Azure Run (Uncomment one of them)
from flask_restful import Resource, marshal_with, fields, marshal from flask_restful.reqparse import RequestParser from flask import request from apiapp.models import TUserPost rp1 = RequestParser() view_output_instance = { "user_id": fields.Integer(attribute="id"), "sex": fields.String(attribute="sex"), "phone": fields.String(attribute="phone"), "Avatar_path": fields.String(attribute="Avatar_path"), "u_name": fields.String(attribute="u_name"), } view_output1 = { "post_id": fields.Integer(attribute="post_id"), "title": fields.String(attribute="title"), "content": fields.String(attribute="content"), "date": fields.DateTime(attribute="date"), "tie_pic": fields.String(attribute="tie_pic"), "user": fields.Nested(view_output_instance) } view_output = { "code": fields.String, "msg": fields.String, "data": fields.Nested(view_output1) # ties为一个列表 } class ViewDetailResource(Resource): def get(self): print("请求成功*******************")
""" import string import random import sqlalchemy from sqlalchemy import and_, func from cryptography import x509 from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric import rsa from flask_restful.reqparse import RequestParser from lemur.exceptions import InvalidConfiguration paginated_parser = RequestParser() paginated_parser.add_argument('count', type=int, default=10, location='args') paginated_parser.add_argument('page', type=int, default=1, location='args') paginated_parser.add_argument('sortDir', type=str, dest='sort_dir', location='args') paginated_parser.add_argument('sortBy', type=str, dest='sort_by', location='args') paginated_parser.add_argument('filter', type=str, location='args') def get_psuedo_random_string():
owner = fields.Email() user = fields.Nested(UserNestedOutputSchema) validity_end = ArrowDateTime(attribute="not_after") replaced_by = fields.Nested(CertificateNestedOutputSchema, many=True, attribute="replaced") endpoints = fields.Nested(EndpointNestedOutputSchema, many=True, missing=[]) class CertificateRevokeSchema(LemurInputSchema): comments = fields.String() certificates_list_request_parser = RequestParser() certificates_list_request_parser.add_argument("short", type=inputs.boolean, default=False, location="args") def certificates_list_output_schema_factory(): args = certificates_list_request_parser.parse_args() if args["short"]: return certificates_short_output_schema else: return certificates_output_schema certificate_input_schema = CertificateInputSchema()
from flask_restful.reqparse import RequestParser dfbankparser = RequestParser(trim=True) dfbankparser.add_argument('bankId', type=str) dfbankpostparser = RequestParser(trim=True) dfbankpostparser.add_argument('bankId', type=int) dfbankpostparser.add_argument('name', type=str) dfbankpostparser.add_argument('bankNumber', type=str) dfbankpostparser.add_argument('d_bank', type=int)
def get(self, article_id): """ 获取文章详情 :param article_id: int 文章id """ # 写入埋点日志 qs_parser = RequestParser() qs_parser.add_argument('Trace', type=inputs.regex(r'^.+$'), required=False, location='headers') args = qs_parser.parse_args() user_id = g.user_id # 查询文章数据 exist = cache_article.ArticleInfoCache(article_id).exists() if not exist: abort(404, message='The article does not exist.') article = cache_article.ArticleDetailCache(article_id).get() # 推荐系统所需埋点 if args.Trace: write_trace_log(args.Trace, channel_id=article['ch_id']) article['is_followed'] = False article['attitude'] = None # 增加用户是否收藏了文章 article['is_collected'] = False if user_id: # 非匿名用户添加用户的阅读历史 try: cache_user.UserReadingHistoryStorage(user_id).save(article_id) except ConnectionError as e: current_app.logger.error(e) # 查询关注 # article['is_followed'] = cache_user.UserFollowingCache(user_id).determine_follows_target(article['aut_id']) article['is_followed'] = cache_user.UserRelationshipCache(user_id).determine_follows_target(article['aut_id']) # 查询登录用户对文章的态度(点赞or不喜欢) try: # article['attitude'] = cache_article.ArticleUserAttitudeCache(user_id, article_id).get() article['attitude'] = cache_user.UserArticleAttitudeCache(user_id).get_article_attitude(article_id) except SQLAlchemyError as e: current_app.logger.error(e) article['attitude'] = -1 # 增加用户是否收藏了文章 article['is_collected'] = cache_user.UserArticleCollectionsCache(g.user_id).determine_collect_target(article_id) # 获取相关文章推荐 article['recomments'] = [] try: similar_articles = self._feed_similar_articles(article_id) for _article_id in similar_articles: _article = cache_article.ArticleInfoCache(_article_id).get() article['recomments'].append({ 'art_id': _article['art_id'], 'title': _article['title'] }) except Exception as e: current_app.logger.error(e) # 更新阅读数 cache_statistic.ArticleReadingCountStorage.incr(article_id) cache_statistic.UserArticlesReadingCountStorage.incr(article['aut_id']) return article
from flask_login import login_required, current_user from flask_restful import Resource, marshal from flask_restful.reqparse import RequestParser from sqlalchemy import and_, or_ from . import dataformat from compair.core import db, event, abort from compair.authorization import require from compair.models import User, Answer, Assignment, Course, AnswerComment, \ CourseRole, SystemRole, AnswerCommentType from .util import new_restful_api, get_model_changes, pagination_parser answer_comment_api = Blueprint('answer_comment_api', __name__) api = new_restful_api(answer_comment_api) new_answer_comment_parser = RequestParser() new_answer_comment_parser.add_argument('user_id', default=None) new_answer_comment_parser.add_argument('content') new_answer_comment_parser.add_argument('comment_type', required=True, nullable=False) new_answer_comment_parser.add_argument('draft', type=bool, default=False) new_answer_comment_parser.add_argument('evaluation_number', type=int, default=None) new_answer_comment_parser.add_argument('attempt_uuid', default=None) new_answer_comment_parser.add_argument('attempt_started', default=None) new_answer_comment_parser.add_argument('attempt_ended', default=None) existing_answer_comment_parser = new_answer_comment_parser.copy() existing_answer_comment_parser.add_argument('id',
def get_args_and_verify_arguments(arguments): request_parser = RequestParser() for argument in arguments: argument.location = 'args' request_parser.args.append(argument) return request_parser.parse_args()
def test_namespace_configurability(self): self.assertTrue(isinstance(RequestParser().parse_args(), Namespace)) self.assertTrue( type(RequestParser(namespace_class=dict).parse_args()) is dict)
def test_chaining(self): parser = RequestParser() self.assertTrue(parser is parser.add_argument("foo"))
def test_parse_eq(self): req = Request.from_values("/bubble?foo=bar") parser = RequestParser() parser.add_argument("foo"), args = parser.parse_args(req) self.assertEquals(args['foo'], "bar")
def non_blank_text(value): if value is None: return None else: return None if text_type(value).strip() == "" else text_type(value) def string_to_bool(value): if value is None: return None else: return strtobool(value) new_user_parser = RequestParser() new_user_parser.add_argument('username', type=non_blank_text, required=False) new_user_parser.add_argument('student_number', type=non_blank_text) new_user_parser.add_argument('system_role', default=None) new_user_parser.add_argument('firstname', type=non_blank_text) new_user_parser.add_argument('lastname', type=non_blank_text) new_user_parser.add_argument('displayname', required=True, nullable=False) new_user_parser.add_argument('email') new_user_parser.add_argument('email_notification_method') new_user_parser.add_argument('password', required=False) existing_user_parser = RequestParser() existing_user_parser.add_argument('id', required=True, nullable=False) existing_user_parser.add_argument('username', type=non_blank_text, required=False)
from functools import wraps from flask import redirect, render_template, jsonify, current_app from flask_login import login_required, current_user from flask import make_response from flask import send_file, url_for, redirect, request from flask_restful.reqparse import RequestParser from bouncer.constants import READ from compair.authorization import require from compair.kaltura import KalturaAPI from compair.models import File from compair.core import event on_get_file = event.signal('GET_FILE') attachment_download_parser = RequestParser() attachment_download_parser.add_argument('name', default=None) def register_api_blueprints(app): # Initialize rest of the api modules from .course import course_api app.register_blueprint( course_api, url_prefix='/api/courses') from .classlist import classlist_api app.register_blueprint( classlist_api, url_prefix='/api/courses/<course_uuid>/users') from .group import group_api
from werkzeug.security import check_password_hash, generate_password_hash from flask_restful.reqparse import RequestParser import re from resources import * from models.users import User from models.blacklists import Blacklist #Validating the arguments user_validation = RequestParser(bundle_errors=True) user_validation.add_argument("user_password", type=str, required=True, help="Password is missing") user_validation.add_argument("user_email", type=str, required=True, help="Email is missing") user_validation.add_argument("user_name", type=str, required=False, help="Username is missing") class UserRegister(Resource): """Class to handle user registration""" @swag_from("../APIdocs/CreateUser.yml") def post(self): """"User registration with email and password""" user_email = user_validation.parse_args().user_email.strip() user_name = user_validation.parse_args().user_name
def get(self): """ 获取搜索结果 """ if g.use_token and not g.user_id: return {'message': 'Token has some errors.'}, 401 qs_parser = RequestParser() qs_parser.add_argument('q', type=inputs.regex(r'^.{1,50}$'), required=True, location='args') qs_parser.add_argument('page', type=inputs.positive, required=False, location='args') qs_parser.add_argument('per_page', type=inputs.int_range( constants.DEFAULT_SEARCH_PER_PAGE_MIN, constants.DEFAULT_SEARCH_PER_PAGE_MAX, 'per_page'), required=False, location='args') args = qs_parser.parse_args() q = args.q page = 1 if args.page is None else args.page per_page = args.per_page if args.per_page else constants.DEFAULT_SEARCH_PER_PAGE_MIN # Search from Elasticsearch query = { 'from': (page - 1) * per_page, 'size': per_page, '_source': False, 'query': { 'bool': { 'must': [{ 'match': { '_all': q } }], 'filter': [{ 'term': { 'status': { 'value': 2 } } }] } } } ret = current_app.es.search(index='articles', doc_type='article', body=query) total_count = ret['hits']['total'] results = [] hits = ret['hits']['hits'] for result in hits: article_id = int(result['_id']) article = cache_article.ArticleInfoCache(article_id).get() if article: results.append(article) # Record user search history if g.user_id and page == 1: try: cache_user.UserSearchingHistoryStorage(g.user_id).save(q) except RedisError as e: current_app.logger.error(e) # Add new es index doc if total_count and page == 1: query = {'_source': False, 'query': {'match': {'suggest': q}}} ret = current_app.es.search(index='completions', doc_type='words', body=query) if ret['hits']['total'] == 0: doc = { 'suggest': { 'input': q, 'weight': constants.USER_KEYWORD_ES_SUGGEST_WEIGHT } } try: current_app.es.index(index='completions', doc_type='words', body=doc) except Exception: pass return { 'total_count': total_count, 'page': page, 'per_page': per_page, 'results': results }
def put(self): parser = RequestParser() parser.add_argument('location', location='json', required=True) params = parser.parse_args() return params['location']
def get(self): parser = RequestParser(trim=True) parser.add_argument('page', type=int, default=DEFAULT_PAGE) parser.add_argument('pageSize', type=int, default=DEFAULT_PAGE_SIZE) parser.add_argument('id', type=str) parser.add_argument('accountChangeType', type=str) parser.add_argument('isAcdemen', type=int) parser.add_argument('timeLower', type=int) parser.add_argument('timeUpper', type=int) parser.add_argument('amountLower', type=float) parser.add_argument('amountUpper', type=float) parser.add_argument('rechargeid', type=str) parser.add_argument('orderId', type=str) parser.add_argument('memberUsername', type=str) parser.add_argument('memberLevelConfig', type=str) parser.add_argument('memberParentUsername', type=str) args = parser.parse_args(strict=True) args['accountChangeType'] = args['accountChangeType'].split(',') criterion = set() criterion.add(Member.isTsetPLay != 1) if args['id']: criterion.add( MemberAccountChangeRecord.id.in_(args['id'].split(','))) if args['isAcdemen'] is not None: if args['isAcdemen'] == 1: criterion.add( MemberAccountChangeRecord.isAcdemen == args['isAcdemen']) if '6' in args['accountChangeType']: args['accountChangeType'].remove('6') else: criterion.add( or_(MemberAccountChangeRecord.isAcdemen.is_(None), MemberAccountChangeRecord.isAcdemen == 0)) if args['rechargeid']: criterion.add( MemberAccountChangeRecord.rechargeid == args['rechargeid']) if args['accountChangeType']: criterion.add( MemberAccountChangeRecord.accountChangeType.in_( args['accountChangeType'])) if args['timeLower']: criterion.add(MemberAccountChangeRecord.time >= args['timeLower']) if args['timeUpper']: criterion.add(MemberAccountChangeRecord.time <= args['timeUpper'] + SECONDS_PER_DAY) # if args['amountUpper']: # criterion.add(MemberAccountChangeRecord.amount <= args['amountUpper']) # if args['amountLower']: # criterion.add(MemberAccountChangeRecord.amount <= args['amountLower']) if args['amountUpper'] is not None and args['amountLower'] is not None: if args['amountUpper'] >= args['amountLower']: criterion.add( MemberAccountChangeRecord.amount <= args['amountUpper']) criterion.add( MemberAccountChangeRecord.amount >= args['amountLower']) else: criterion.add( MemberAccountChangeRecord.amount >= args['amountUpper']) criterion.add( MemberAccountChangeRecord.amount <= args['amountLower']) elif args['amountUpper'] is not None: if args['amountUpper'] >= 0: criterion.add( MemberAccountChangeRecord.amount <= args['amountUpper']) else: criterion.add( MemberAccountChangeRecord.amount >= args['amountUpper']) elif args['amountLower'] is not None: if args['amountLower'] >= 0: criterion.add( MemberAccountChangeRecord.amount >= args['amountLower']) else: criterion.add( MemberAccountChangeRecord.amount <= args['amountLower']) if args['orderId']: criterion.add(MemberAccountChangeRecord.orderId == args['orderId']) if args['memberUsername']: criterion.add( Member.username.in_(args['memberUsername'].split(','))) if args['memberLevelConfig']: criterion.add( Member.levelConfig.in_(args['memberLevelConfig'].split(','))) # if args['memberLevelConfig'] is None: # criterion.add(Member.levelConfig == '') if args['memberParentUsername']: parent = Member.query.filter( Member.username == args['memberParentUsername']).first() if parent: criterion.add(Member.parent == parent.id) query = db.session.query( MemberAccountChangeRecord.orderId.label('orderId'), Member.username.label('username'), MemberLevel.levelName.label('levelName'), MemberAccountChangeRecord.time.label('time'), MemberAccountChangeRecord.info.label('accountChangeTypesName'), MemberAccountChangeRecord.amount.label('amount'), MemberAccountChangeRecord.memberBalance.label('memberBalance'), User.username.label('OperatorName'), User.username.label('dealName'), ).order_by(MemberAccountChangeRecord.time.desc()) query = query.outerjoin( Member, MemberAccountChangeRecord.memberId == Member.id) query = query.outerjoin(MemberLevel, Member.levelConfig == MemberLevel.id) query = query.outerjoin(User, User.id == MemberAccountChangeRecord.actionUID) result_query = [] if args['accountChangeType']: if '6' in args['accountChangeType']: query_yule = db.session.query( EntertainmentCityBetsDetail.BillNo.label('orderId'), Member.username.label('username'), MemberLevel.levelName.label('levelName'), EntertainmentCityBetsDetail.BetTime.label('time'), func.concat(EntertainmentCityBetsDetail.ECCode, '-派彩').label('accountChangeTypesName'), EntertainmentCityBetsDetail.Profit.label('amount'), EntertainmentCityBetsDetail.Balance.label('memberBalance'), literal('').label('OperatorName'), literal('').label('dealName'), ).order_by(EntertainmentCityBetsDetail.BetTime.desc()) query_yule = query_yule.outerjoin( Member, EntertainmentCityBetsDetail.PlayerName == Member.username) query_yule = query_yule.outerjoin( MemberLevel, Member.levelConfig == MemberLevel.id) criterion_query = set() if args['id']: criterion_query.add( EntertainmentCityBetsDetail.id.in_( args['id'].split(','))) if args['rechargeid']: criterion_query.add(EntertainmentCityBetsDetail.BillNo == args['rechargeid']) if args['timeLower']: criterion_query.add(EntertainmentCityBetsDetail.BetTime >= args['timeLower']) if args['timeUpper']: criterion_query.add(EntertainmentCityBetsDetail.BetTime <= args['timeUpper'] + SECONDS_PER_DAY) # if args['amountLower']: # criterion_query.add(EntertainmentCityBetsDetail.ValidBetAmount >= args['amountLower']) # if args['amountUpper']: # criterion_query.add(EntertainmentCityBetsDetail.ValidBetAmount <= args['amountUpper']) if args['amountUpper'] is not None and args[ 'amountLower'] is not None: if args['amountUpper'] >= args['amountLower']: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountUpper']) criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountLower']) else: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountUpper']) criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountLower']) elif args['amountUpper'] is not None: if args['amountUpper'] >= 0: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountUpper']) else: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountUpper']) elif args['amountLower'] is not None: if args['amountLower'] >= 0: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountLower']) else: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountLower']) if args['orderId']: criterion_query.add( EntertainmentCityBetsDetail.BillNo == args['orderId']) if args['memberUsername']: criterion_query.add( Member.username.in_(args['memberUsername'].split(','))) if args['memberLevelConfig']: criterion_query.add( Member.levelConfig.in_( args['memberLevelConfig'].split(','))) # if args['memberLevelConfig'] is None: # criterion_query.add(Member.levelConfig == '') if args['memberParentUsername']: parent = Member.query.filter( Member.username == args['memberParentUsername']).first() if parent: criterion_query.add(Member.parent == parent.id) query = query.filter(*criterion) query_yule = query_yule.filter(*criterion_query) # union_all 拼接数据 result = union_all(query, query_yule) # 将拼接好的数据重新命名,变成一个新的查询表 user_alias = aliased(result, name='user_alias') user_alias = db.session.query(user_alias).order_by( user_alias.c.time.desc()).all() results = [] for item in user_alias: results.append( (item[0], item[1], item[2], changeData_str(item[3]), item[4], item[5], item[6], item[7], item[8])) title = [ '单号', '帐号', '会员等级', '操作时间', '信息', '金额', '小计', '操作人员', '处理人员', '其他' ] workbook = Workbook() worksheet = workbook.active worksheet.append(title) worksheet.column_dimensions['A'].width = 20 worksheet.column_dimensions['B'].width = 10 worksheet.column_dimensions['C'].width = 18 worksheet.column_dimensions['D'].width = 20 worksheet.column_dimensions['E'].width = 15 worksheet.column_dimensions['F'].width = 8 worksheet.column_dimensions['G'].width = 8 worksheet.column_dimensions['H'].width = 8 worksheet.column_dimensions['I'].width = 8 worksheet.column_dimensions['J'].width = 8 for result in results: worksheet.append(result) filename = '交易记录-' + str(int(time.time())) + '.xlsx' workbook.save(os.path.join(current_app.static_folder, filename)) return make_response([{ 'success': True, 'resultFilename': filename, }]) query = query.filter(*criterion).all() results = [] for item in query: results.append((item[0], item[1], item[2], changeData_str(item[3]), item[4], item[5], item[6], item[7], item[8])) title = [ '单号', '帐号', '会员等级', '操作时间', '信息', '金额', '小计', '操作人员', '处理人员', '其他' ] workbook = Workbook() worksheet = workbook.active worksheet.append(title) worksheet.column_dimensions['A'].width = 20 worksheet.column_dimensions['B'].width = 10 worksheet.column_dimensions['C'].width = 18 worksheet.column_dimensions['D'].width = 20 worksheet.column_dimensions['E'].width = 15 worksheet.column_dimensions['F'].width = 8 worksheet.column_dimensions['G'].width = 8 worksheet.column_dimensions['H'].width = 8 worksheet.column_dimensions['I'].width = 8 worksheet.column_dimensions['J'].width = 8 for result in results: worksheet.append(result) filename = '交易记录-' + str(int(time.time())) + '.xlsx' workbook.save(os.path.join(current_app.static_folder, filename)) return make_response([{ 'success': True, 'resultFilename': filename, }])
from flask import Blueprint, make_response, jsonify, request, redirect, url_for, flash from flask_jwt_extended import jwt_required, get_jwt_identity, jwt_optional from flask_restful import Api, Resource from flask_restful.reqparse import RequestParser from flask_login import current_user, login_required from app.db import db from app.models import Article, Publisher, User, ReadArticleLink from datetime import date, timedelta from app.constants import * import requests import time pay_req_parser = RequestParser(bundle_errors=True) pay_req_parser.add_argument('url', required=True) pay_req_parser.add_argument('domain', required=True) pay_req_parser.add_argument('article_price') pay_req_parser.add_argument('article_name') pay_req_parser.add_argument('article_desc') pay_req_parser.add_argument('article_date') pay_req_parser.add_argument('article_category') access_req_parser = RequestParser(bundle_errors=True) access_req_parser.add_argument('url') access_req_parser.add_argument('domain') access_req_parser.add_argument('article_name') access_req_parser.add_argument('article_desc') access_req_parser.add_argument('article_date') access_req_parser.add_argument('article_category') api_bp = Blueprint('api', __name__) api = Api(api_bp)
def get(self): parser = RequestParser(trim=True) parser.add_argument('page', type=int, default=DEFAULT_PAGE) parser.add_argument('pageSize', type=int, default=DEFAULT_PAGE_SIZE) parser.add_argument('id', type=str) parser.add_argument('accountChangeType', type=str) parser.add_argument('isAcdemen', type=int) parser.add_argument('timeLower', type=int) parser.add_argument('timeUpper', type=int) parser.add_argument('amountLower', type=float) parser.add_argument('amountUpper', type=float) parser.add_argument('rechargeid', type=str) parser.add_argument('orderId', type=str) parser.add_argument('memberUsername', type=str) parser.add_argument('memberLevelConfig', type=str) parser.add_argument('memberParentUsername', type=str) args = parser.parse_args(strict=True) args['accountChangeType'] = args['accountChangeType'].split(',') criterion = set() criterion.add(Member.isTsetPLay != 1) if args['id']: criterion.add( MemberAccountChangeRecord.id.in_(args['id'].split(','))) if args['isAcdemen'] is not None: if args['isAcdemen'] == 1: criterion.add( MemberAccountChangeRecord.isAcdemen == args['isAcdemen']) if '6' in args['accountChangeType']: args['accountChangeType'].remove('6') else: criterion.add( or_(MemberAccountChangeRecord.isAcdemen.is_(None), MemberAccountChangeRecord.isAcdemen == 0)) if args['rechargeid']: criterion.add( MemberAccountChangeRecord.rechargeid == args['rechargeid']) if args['accountChangeType']: criterion.add( MemberAccountChangeRecord.accountChangeType.in_( args['accountChangeType'])) if args['timeLower']: criterion.add(MemberAccountChangeRecord.time >= args['timeLower']) if args['timeUpper']: criterion.add(MemberAccountChangeRecord.time <= args['timeUpper'] + SECONDS_PER_DAY) # if args['amountUpper']: # criterion.add(MemberAccountChangeRecord.amount <= args['amountUpper']) # if args['amountLower']: # criterion.add(MemberAccountChangeRecord.amount <= args['amountLower']) if args['amountUpper'] is not None and args['amountLower'] is not None: if args['amountUpper'] >= args['amountLower']: criterion.add( MemberAccountChangeRecord.amount <= args['amountUpper']) criterion.add( MemberAccountChangeRecord.amount >= args['amountLower']) else: criterion.add( MemberAccountChangeRecord.amount >= args['amountUpper']) criterion.add( MemberAccountChangeRecord.amount <= args['amountLower']) elif args['amountUpper'] is not None: if args['amountUpper'] >= 0: criterion.add( MemberAccountChangeRecord.amount <= args['amountUpper']) else: criterion.add( MemberAccountChangeRecord.amount >= args['amountUpper']) elif args['amountLower'] is not None: if args['amountLower'] >= 0: criterion.add( MemberAccountChangeRecord.amount >= args['amountLower']) else: criterion.add( MemberAccountChangeRecord.amount <= args['amountLower']) if args['orderId']: criterion.add(MemberAccountChangeRecord.orderId == args['orderId']) if args['memberUsername']: criterion.add( Member.username.in_(args['memberUsername'].split(','))) if args['memberLevelConfig']: criterion.add( Member.levelConfig.in_(args['memberLevelConfig'].split(','))) # if args['memberLevelConfig'] is None: # criterion.add(Member.levelConfig == '') if args['memberParentUsername']: parent = Member.query.filter( Member.username == args['memberParentUsername']).first() if parent: criterion.add(Member.parent == parent.id) query = db.session.query( MemberAccountChangeRecord.id.label('id'), MemberAccountChangeRecord.orderId.label('orderId'), MemberAccountChangeRecord.time.label('time'), MemberAccountChangeRecord.accountChangeType.label( 'accountChangeType'), MemberAccountChangeRecord.info.label('accountChangeTypesName'), MemberAccountChangeRecord.amount.label('amount'), MemberAccountChangeRecord.rechargeid.label('rechargeid'), MemberAccountChangeRecord.memberBalance.label('balanceAfter'), literal(0).label('balanceBefore'), MemberAccountChangeRecord.memberFrozenBalance.label( 'frozenBalanceBefore'), literal('KK').label('eccode'), Member.id.label('memberId'), Member.username.label('username'), Member.type.label('memberType'), MemberLevel.levelName.label('levelName'), MemberLevel.id.label('levelId'), User.username.label('OperatorName')).order_by( MemberAccountChangeRecord.time.desc()) query = query.outerjoin( Member, MemberAccountChangeRecord.memberId == Member.id) query = query.outerjoin(MemberLevel, Member.levelConfig == MemberLevel.id) query = query.outerjoin(User, User.id == MemberAccountChangeRecord.actionUID) result_query = [] if args['accountChangeType']: if '6' in args['accountChangeType']: query_yule = db.session.query( EntertainmentCityBetsDetail.id.label('id'), EntertainmentCityBetsDetail.BillNo.label('orderId'), EntertainmentCityBetsDetail.BetTime.label('time'), literal(6).label('accountChangeType'), EntertainmentCityBetsDetail.Remark.label( 'accountChangeTypesName'), EntertainmentCityBetsDetail.Profit.label('amount'), EntertainmentCityBetsDetail.BillNo.label('rechargeid'), EntertainmentCityBetsDetail.Balance.label('balanceAfter'), literal(0).label('balanceBefore'), EntertainmentCityBetsDetail.CusAccount.label( 'frozenBalanceBefore'), EntertainmentCityBetsDetail.ECCode.label('eccode'), Member.id.label('memberId'), Member.username.label('username'), Member.type.label('memberType'), MemberLevel.levelName.label('levelName'), MemberLevel.id.label('levelId'), literal('').label('OperatorName')).order_by( EntertainmentCityBetsDetail.BetTime.desc()) query_yule = query_yule.outerjoin( Member, EntertainmentCityBetsDetail.PlayerName == Member.username) query_yule = query_yule.outerjoin( MemberLevel, Member.levelConfig == MemberLevel.id) criterion_query = set() if args['id']: criterion_query.add( EntertainmentCityBetsDetail.id.in_( args['id'].split(','))) if args['rechargeid']: criterion_query.add(EntertainmentCityBetsDetail.BillNo == args['rechargeid']) if args['timeLower']: criterion_query.add(EntertainmentCityBetsDetail.BetTime >= args['timeLower']) if args['timeUpper']: criterion_query.add(EntertainmentCityBetsDetail.BetTime <= args['timeUpper'] + SECONDS_PER_DAY) # if args['amountLower']: # criterion_query.add(EntertainmentCityBetsDetail.ValidBetAmount >= args['amountLower']) # if args['amountUpper']: # criterion_query.add(EntertainmentCityBetsDetail.ValidBetAmount <= args['amountUpper']) if args['amountUpper'] is not None and args[ 'amountLower'] is not None: if args['amountUpper'] >= args['amountLower']: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountUpper']) criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountLower']) else: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountUpper']) criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountLower']) elif args['amountUpper'] is not None: if args['amountUpper'] >= 0: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountUpper']) else: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountUpper']) elif args['amountLower'] is not None: if args['amountLower'] >= 0: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountLower']) else: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountLower']) if args['orderId']: criterion_query.add( EntertainmentCityBetsDetail.BillNo == args['orderId']) if args['memberUsername']: criterion_query.add( Member.username.in_(args['memberUsername'].split(','))) if args['memberLevelConfig']: criterion_query.add( Member.levelConfig.in_( args['memberLevelConfig'].split(','))) # if args['memberLevelConfig'] is None: # criterion_query.add(Member.levelConfig == '') if args['memberParentUsername']: parent = Member.query.filter( Member.username == args['memberParentUsername']).first() if parent: criterion_query.add(Member.parent == parent.id) query = query.filter(*criterion) query_yule = query_yule.filter(*criterion_query) # union_all 拼接数据 result = union_all(query, query_yule) # 将拼接好的数据重新命名,变成一个新的查询表 user_alias = aliased(result, name='user_alias') user_alias = db.session.query(user_alias).order_by( user_alias.c.time.desc()) pagination = paginate_one(user_alias, args['page'], args['pageSize']) pagination = convert_pagination(pagination) total_amount = 0 for item in pagination.items: total_amount += item['amount'] item[ 'accountChangeTypeName'] = MemberAccountChangeTypes.d.get( item['accountChangeType']) # if item['accountChangeType'] in [100001, 100002]: # item['balanceAfter'] = item['balanceBefore'] + item['amount'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] # # if item['accountChangeType'] in [200001]: # item['balanceAfter'] = item['balanceBefore'] - item['amount'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] + item['amount'] # # if item['accountChangeType'] in [200002]: # item['balanceAfter'] = item['balanceBefore'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] - item['amount'] # # if item['accountChangeType'] in [200003]: # item['balanceAfter'] = item['balanceBefore'] + item['amount'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] - item['amount'] # # if item['accountChangeType'] in [900001]: # item['balanceAfter'] = item['balanceBefore'] + item['amount'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] # # if item['accountChangeType'] in [900002]: # item['balanceAfter'] = item['balanceBefore'] - item['amount'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] return make_response_from_pagination(pagination, totalAmount=total_amount) pagination = paginate(query, criterion, args['page'], args['pageSize']) pagination = convert_pagination(pagination) total_amount = 0 for item in pagination.items: total_amount += item['amount'] # item['accountChangeTypeName'] = MemberAccountChangeTypes.d.get(item['accountChangeType']) # # if item['accountChangeType'] in [100001, 100002]: # item['balanceAfter'] = item['balanceBefore'] + item['amount'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] # # if item['accountChangeType'] in [200001]: # item['balanceAfter'] = item['balanceBefore'] - item['amount'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] + item['amount'] # # if item['accountChangeType'] in [200002]: # item['balanceAfter'] = item['balanceBefore'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] - item['amount'] # # if item['accountChangeType'] in [200003]: # item['balanceAfter'] = item['balanceBefore'] + item['amount'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] - item['amount'] # # if item['accountChangeType'] in [900001]: # item['balanceAfter'] = item['balanceBefore'] + item['amount'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] # # if item['accountChangeType'] in [900002]: # item['balanceAfter'] = item['balanceBefore'] - item['amount'] # item['frozenBalanceAfter'] = item['frozenBalanceBefore'] return make_response_from_pagination(pagination, totalAmount=total_amount)
from flask_restful.reqparse import RequestParser dfcashwithdrawalparser = RequestParser(trim=True) dfcashwithdrawalparser.add_argument('mer_code', type=str) dfcashwithdrawalparser.add_argument('sign', type=str) dfcashwithdrawalparser.add_argument('org_order_no', type=str) dfcashwithdrawalparser.add_argument('name', type=str) dfcashwithdrawalparser.add_argument('account_number', type=str) dfcashwithdrawalparser.add_argument('amount', type=str) dfcashwithdrawalparser.add_argument('bankcard', type=int) dfcashwithdrawalparser.add_argument('action_time', type=int) dfgetwithdrawalparser = RequestParser(trim=True) dfgetwithdrawalparser.add_argument('mer_code', type=str) dfgetwithdrawalparser.add_argument('org_order_no', type=str) dfgetwithdrawalparser.add_argument('sign', type=str)
def get(self): parser = RequestParser(trim=True) parser.add_argument('page', type=int, default=DEFAULT_PAGE) parser.add_argument('pageSize', type=int, default=DEFAULT_PAGE_SIZE) parser.add_argument('id', type=str) parser.add_argument('accountChangeType', type=str) parser.add_argument('timeLower', type=int) parser.add_argument('timeUpper', type=int) parser.add_argument('amountLower', type=float) parser.add_argument('amountUpper', type=float) parser.add_argument('rechargeid', type=int) parser.add_argument('orderId', type=int) parser.add_argument('memberUsername', type=str) parser.add_argument('memberLevelConfig', type=str) parser.add_argument('memberParentUsername', type=str) args = parser.parse_args(strict=True) criterion = set() if args['id']: criterion.add( MemberAccountChangeRecord.id.in_(args['id'].split(','))) if args['rechargeid']: criterion.add( MemberAccountChangeRecord.rechargeid == args['rechargeid']) if args['accountChangeType']: criterion.add( MemberAccountChangeRecord.accountChangeType.in_( args['accountChangeType'].split(','))) if args['timeLower']: criterion.add(MemberAccountChangeRecord.time >= args['timeLower']) if args['timeUpper']: criterion.add(MemberAccountChangeRecord.time <= args['timeUpper'] + SECONDS_PER_DAY) if args['amountLower']: criterion.add( MemberAccountChangeRecord.amount >= args['amountLower']) if args['amountUpper']: criterion.add( MemberAccountChangeRecord.amount <= args['amountUpper']) if args['orderId']: criterion.add(MemberAccountChangeRecord.orderId == args['orderId']) # member_criterion = set() if args['memberUsername']: criterion.add( Member.username.in_(args['memberUsername'].split(','))) if args['memberLevelConfig']: criterion.add( Member.levelConfig.in_(args['memberLevelConfig'].split(','))) if args['memberParentUsername']: parent = Member.query.filter( Member.username == args['memberParentUsername']).first() if parent: criterion.add(Member.parent == parent.id) # subquery = db.session.query( # # ).join(MemberLevel, Member.levelConfig == MemberLevel.id).filter(*member_criterion).subquery() query = db.session.query( MemberAccountChangeRecord.id, MemberAccountChangeRecord.memberId, MemberAccountChangeRecord.orderId, MemberAccountChangeRecord.time, MemberAccountChangeRecord.accountChangeType, MemberAccountChangeRecord.amount, MemberAccountChangeRecord.rechargeid, MemberAccountChangeRecord.memberBalance.label('balanceBefore'), MemberAccountChangeRecord.memberFrozenBalance.label( 'frozenBalanceBefore'), Member.id.label('memberId'), Member.username, MemberLevel.levelName, MemberLevel.id.label('levelId'), User.username.label('UsersName')) query = query.outerjoin( Member, MemberAccountChangeRecord.memberId == Member.id) query = query.outerjoin(MemberLevel, Member.levelConfig == MemberLevel.id) query = query.outerjoin(User, User.id == MemberAccountChangeRecord.actionUID) pagination = paginate(query, criterion, args['page'], args['pageSize']) pagination = convert_pagination(pagination) total_amount = 0 for item in pagination.items: total_amount += item['amount'] item['accountChangeTypeName'] = MemberAccountChangeTypes.d.get( item['accountChangeType']) if item['accountChangeType'] in [100001, 100002]: item['balanceAfter'] = item['balanceBefore'] + item['amount'] item['frozenBalanceAfter'] = item['frozenBalanceBefore'] if item['accountChangeType'] in [200001]: item['balanceAfter'] = item['balanceBefore'] - item['amount'] item['frozenBalanceAfter'] = item[ 'frozenBalanceBefore'] + item['amount'] if item['accountChangeType'] in [200002]: item['balanceAfter'] = item['balanceBefore'] item['frozenBalanceAfter'] = item[ 'frozenBalanceBefore'] - item['amount'] if item['accountChangeType'] in [200003]: item['balanceAfter'] = item['balanceBefore'] + item['amount'] item['frozenBalanceAfter'] = item[ 'frozenBalanceBefore'] - item['amount'] if item['accountChangeType'] in [900001]: item['balanceAfter'] = item['balanceBefore'] + item['amount'] item['frozenBalanceAfter'] = item['frozenBalanceBefore'] if item['accountChangeType'] in [900002]: item['balanceAfter'] = item['balanceBefore'] - item['amount'] item['frozenBalanceAfter'] = item['frozenBalanceBefore'] return make_response_from_pagination(pagination, totalAmount=total_amount)
def put(self, id): parser = RequestParser(trim=True) parser.add_argument('enabled', type=int) parser.add_argument('chat', type=int) parser.add_argument('verificationByPhone', type=int) parser.add_argument('verificationByGoogle', type=int) parser.add_argument('verificationByEmail', type=int) parser.add_argument('oldPassword', type=str) parser.add_argument('newPassword', type=str) parser.add_argument('phone', type=str) parser.add_argument('email', type=str) parser.add_argument('menus', type=str) parser.add_argument('systemDepositLimitOnce', type=str) parser.add_argument('systemDepositLimitCount', type=str) parser.add_argument('systemDepositLimitTotal', type=int) parser.add_argument('withdrawallimitOnce', type=str) parser.add_argument('withdrawallimitSumCeiling', type=str) parser.add_argument('withdrawallimitSum', type=int) parser.add_argument('remark', type=str) args = parser.parse_args(strict=True) user = User.query.get(id) if not user: abort(400) if args['enabled'] is not None: user.enabled = args['enabled'] if args['chat'] is not None: user.chat = args['chat'] if args['verificationByPhone'] is not None: user.verificationByPhone = args['verificationByPhone'] if args['verificationByGoogle'] is not None: user.verificationByGoogle = args['verificationByGoogle'] if args['verificationByEmail'] is not None: user.verificationByEmail = args['verificationByEmail'] if args['oldPassword'] and args['newPassword']: if not user.verify_password(args['oldPassword']): return make_response(error_code=400, error_message="旧密码输入错误") if args['oldPassword'] == args['newPassword']: return make_response(error_code=400, error_message="新旧密码一致") pattern = "^[A-Za-z0-9]{6,15}$" re_result = re.match(pattern, args['newPassword']) if re_result is None: return make_response(error_code=400, error_message="新密码格式不正确") if user.verify_password(args['oldPassword']): user.password = args['newPassword'] if args['phone']: user.phone = args['phone'] if args['email']: user.email = args['email'] if args['systemDepositLimitOnce']: user.systemDepositLimitOnce = args['systemDepositLimitOnce'] if args['systemDepositLimitCount']: user.systemDepositLimitCount = args['systemDepositLimitCount'] if args['systemDepositLimitTotal'] is not None: user.systemDepositLimitTotal = args['systemDepositLimitTotal'] if args['withdrawallimitOnce']: user.withdrawallimitOnce = args['withdrawallimitOnce'] if args['withdrawallimitSumCeiling']: user.withdrawallimitSumCeiling = args['withdrawallimitSumCeiling'] if args['withdrawallimitSum'] is not None: user.withdrawallimitSum = args['withdrawallimitSum'] if args['remark']: user.remark = args['remark'] if args['menus'] == "": return {"errorCode": 400, "errorMsg": "请选择用户权限"} if args['menus']: user.menus.clear() db.session.commit() menu_id_list = args.pop('menus').split(',') for menu_id in menu_id_list: menu = Menu.query.get(menu_id) if menu and menu not in user.menus: user.menus.append(menu) try: db.session.add(user) db.session.commit() except: db.session.rollback() db.session.remove() abort(500) return make_response([{'password': args.get('newPassword')}])
def get(self): parser = RequestParser(trim=True) parser.add_argument('page', type=int, default=DEFAULT_PAGE) parser.add_argument('pageSize', type=int, default=DEFAULT_PAGE_SIZE) parser.add_argument('id', type=str) parser.add_argument('accountChangeType', type=str) parser.add_argument('isAcdemen', type=int) parser.add_argument('timeLower', type=int) parser.add_argument('timeUpper', type=int) parser.add_argument('amountLower', type=float) parser.add_argument('amountUpper', type=float) parser.add_argument('rechargeid', type=str) parser.add_argument('orderId', type=str) parser.add_argument('memberUsername', type=str) parser.add_argument('memberLevelConfig', type=str) parser.add_argument('memberParentUsername', type=str) args = parser.parse_args(strict=True) args['accountChangeType'] = args['accountChangeType'].split(',') criterion = set() criterion.add(Member.isTsetPLay != 1) if args['id']: criterion.add( MemberAccountChangeRecord.id.in_(args['id'].split(','))) if args['isAcdemen'] is not None: if args['isAcdemen'] == 1: criterion.add( MemberAccountChangeRecord.isAcdemen == args['isAcdemen']) if '6' in args['accountChangeType']: args['accountChangeType'].remove('6') else: criterion.add( or_(MemberAccountChangeRecord.isAcdemen.is_(None), MemberAccountChangeRecord.isAcdemen == 0)) if args['rechargeid']: criterion.add( MemberAccountChangeRecord.rechargeid == args['rechargeid']) if args['accountChangeType']: criterion.add( MemberAccountChangeRecord.accountChangeType.in_( args['accountChangeType'])) if args['timeLower']: criterion.add(MemberAccountChangeRecord.time >= args['timeLower']) if args['timeUpper']: criterion.add(MemberAccountChangeRecord.time <= args['timeUpper'] + SECONDS_PER_DAY) # if args['amountUpper']: # criterion.add(MemberAccountChangeRecord.amount <= args['amountUpper']) # if args['amountLower']: # criterion.add(MemberAccountChangeRecord.amount <= args['amountLower']) if args['amountUpper'] is not None and args['amountLower'] is not None: if args['amountUpper'] >= args['amountLower']: criterion.add( MemberAccountChangeRecord.amount <= args['amountUpper']) criterion.add( MemberAccountChangeRecord.amount >= args['amountLower']) else: criterion.add( MemberAccountChangeRecord.amount >= args['amountUpper']) criterion.add( MemberAccountChangeRecord.amount <= args['amountLower']) elif args['amountUpper'] is not None: if args['amountUpper'] >= 0: criterion.add( MemberAccountChangeRecord.amount <= args['amountUpper']) else: criterion.add( MemberAccountChangeRecord.amount >= args['amountUpper']) elif args['amountLower'] is not None: if args['amountLower'] >= 0: criterion.add( MemberAccountChangeRecord.amount >= args['amountLower']) else: criterion.add( MemberAccountChangeRecord.amount <= args['amountLower']) if args['orderId']: criterion.add(MemberAccountChangeRecord.orderId == args['orderId']) if args['memberUsername']: criterion.add( Member.username.in_(args['memberUsername'].split(','))) if args['memberLevelConfig']: criterion.add( Member.levelConfig.in_(args['memberLevelConfig'].split(','))) # if args['memberLevelConfig'] is None: # criterion.add(Member.levelConfig == '') if args['memberParentUsername']: parent = Member.query.filter( Member.username == args['memberParentUsername']).first() if parent: criterion.add(Member.parent == parent.id) query = db.session.query( func.sum(MemberAccountChangeRecord.amount).label('sumAmount')) query = query.outerjoin( Member, MemberAccountChangeRecord.memberId == Member.id) query = query.outerjoin(MemberLevel, Member.levelConfig == MemberLevel.id) query = query.outerjoin(User, User.id == MemberAccountChangeRecord.actionUID) result_query = [] if args['accountChangeType']: if '6' in args['accountChangeType']: query_yule = db.session.query( func.sum( EntertainmentCityBetsDetail.Profit).label('sumAmount')) query_yule = query_yule.outerjoin( Member, EntertainmentCityBetsDetail.PlayerName == Member.username) query_yule = query_yule.outerjoin( MemberLevel, Member.levelConfig == MemberLevel.id) criterion_query = set() if args['id']: criterion_query.add( EntertainmentCityBetsDetail.id.in_( args['id'].split(','))) if args['rechargeid']: criterion_query.add(EntertainmentCityBetsDetail.BillNo == args['rechargeid']) if args['timeLower']: criterion_query.add(EntertainmentCityBetsDetail.BetTime >= args['timeLower']) if args['timeUpper']: criterion_query.add(EntertainmentCityBetsDetail.BetTime <= args['timeUpper'] + SECONDS_PER_DAY) # if args['amountLower']: # criterion_query.add(EntertainmentCityBetsDetail.ValidBetAmount >= args['amountLower']) # if args['amountUpper']: # criterion_query.add(EntertainmentCityBetsDetail.ValidBetAmount <= args['amountUpper']) if args['amountUpper'] is not None and args[ 'amountLower'] is not None: if args['amountUpper'] >= args['amountLower']: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountUpper']) criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountLower']) else: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountUpper']) criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountLower']) elif args['amountUpper'] is not None: if args['amountUpper'] >= 0: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountUpper']) else: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountUpper']) elif args['amountLower'] is not None: if args['amountLower'] >= 0: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount >= args['amountLower']) else: criterion_query.add( EntertainmentCityBetsDetail.ValidBetAmount <= args['amountLower']) if args['orderId']: criterion_query.add( EntertainmentCityBetsDetail.BillNo == args['orderId']) if args['memberUsername']: criterion_query.add( Member.username.in_(args['memberUsername'].split(','))) if args['memberLevelConfig']: criterion_query.add( Member.levelConfig.in_( args['memberLevelConfig'].split(','))) # if args['memberLevelConfig'] is None: # criterion_query.add(Member.levelConfig == '') if args['memberParentUsername']: parent = Member.query.filter( Member.username == args['memberParentUsername']).first() if parent: criterion_query.add(Member.parent == parent.id) query = query.filter(*criterion) query_yule = query_yule.filter(*criterion_query) # union_all 拼接数据 result = union_all(query, query_yule) # 将拼接好的数据重新命名,变成一个新的查询表 user_alias = aliased(result, name='user_alias') user_alias = db.session.query(func.sum( user_alias.c.sumAmount)).all()[0][0] return {'success': True, 'data': user_alias} user_alias = query.filter(*criterion).all()[0][0] return {'success': True, 'data': user_alias}
from datetime import datetime from decimal import Decimal from flask_restful import Resource, fields, marshal_with from flask_restful.reqparse import RequestParser from sqlalchemy import or_, func as sql_func from sqlalchemy.orm import contains_eager from cebulany.auth import token_required from cebulany.models import Transaction, Payment from cebulany.resources.types import dt_type transaction_parser = RequestParser() transaction_parser.add_argument('date_start', type=dt_type) transaction_parser.add_argument('date_end', type=dt_type) transaction_parser.add_argument('month') transaction_parser.add_argument('text') transaction_parser.add_argument('negative') transaction_parser.add_argument('positive') transaction_parser.add_argument('cost_le', type=Decimal) transaction_parser.add_argument('cost_ge', type=Decimal) transaction_parser.add_argument('ordering') transaction_parser.add_argument('member_id', type=int) member_fields = fields.Nested({ 'id': fields.Integer, 'name': fields.String, }) payment_type_fields = fields.Nested({ 'id': fields.Integer,
class SourceDetailsAPIView(APIView): get_parser = RequestParser() get_parser.add_argument('coverage', type=types.boolean, location='args', default=False) # this is mostly copy-pasted from ProjectSourceDetails :( def get(self, source_id): source = Source.query.filter( Source.id == source_id, ).first() if source is None: return error("Source not found", http_code=404) args = self.get_parser.parse_args() context = self.serialize(source) diff = source.generate_diff() if diff: files = self._get_files_from_raw_diff(diff) if args.coverage: coverage = merged_coverage_data(c for c in get_coverage_by_source_id(source_id) if c.filename in files) coverage_for_added_lines = self._filter_coverage_for_added_lines(diff, coverage) tails_info = dict(source.data) else: coverage = None coverage_for_added_lines = None tails_info = None context['diff'] = diff if args.coverage: context['coverage'] = coverage context['coverageForAddedLines'] = coverage_for_added_lines context['tailsInfo'] = tails_info return self.respond(context) def _filter_coverage_for_added_lines(self, diff, coverage): """ This function takes a diff (text based) and a map of file names to the coverage for those files and returns an ordered list of the coverage for each "addition" line in the diff. If we don't have coverage for a specific file, we just mark the lines in those files as unknown or 'N'. """ if not diff: return None diff_lines = diff.splitlines() current_file = None line_number = None coverage_by_added_line = [] for line in diff_lines: if line.startswith('diff'): # We're about to start a new file. current_file = None line_number = None elif current_file is None and line_number is None and (line.startswith('+++') or line.startswith('---')): # We're starting a new file if line.startswith('+++ b/'): line = line.split('\t')[0] current_file = unicode(line[6:]) elif line.startswith('@@'): # Jump to new lines within the file line_num_info = line.split('+')[1] # Strip off the trailing ' @@' so that when only the line is specified # and there is no comma, we can just parse as a number. line_num_info = line_num_info.rstrip("@ ") line_number = int(line_num_info.split(',')[0]) - 1 elif current_file is not None and line_number is not None: # Iterate through the file. if line.startswith('+'): # Make sure we have coverage for this line. Else just tag it as unknown. cov = 'N' if current_file in coverage: try: cov = coverage[current_file][line_number] except IndexError: logger = logging.getLogger('coverage') logger.info('Missing code coverage for line %d of file %s' % (line_number, current_file)) coverage_by_added_line.append(cov) if not line.startswith('-'): # Up the line count (assuming we aren't at a remove line) line_number += 1 return coverage_by_added_line def _get_files_from_raw_diff(self, diff): """ Returns a list of filenames from a diff. """ files = set() diff_lines = diff.split('\n') for line in diff_lines: if line.startswith('+++ b/'): line = line.split('\t')[0] files.add(line[6:]) return files
def __init__(self): self.parser = RequestParser()
def test_parse_lte_gte_missing(self): parser = RequestParser() parser.add_argument("foo", operators=["<=", "="]) args = parser.parse_args(Request.from_values("/bubble?foo<=bar")) self.assertEquals(args['foo'], "bar")