def generate_report(): try: # left join job group for job group id history = pd.read_sql_table(table_name='history', con=db.engine, parse_dates=['date']) rate = pd.read_sql_table(table_name='rate', con=db.engine) df = pd.merge(history, rate, how='left', left_on='jid', right_on='jid', sort=True) df['amountpaid'] = df['hours'].astype(float) * df['rate'].astype( float) df['payperiod'] = df['date'].apply( lambda x: f"1/{x.month}/{x.year} - 15/{x.month}/{x.year}" if x.day <= 15 else f"16/{x.month}/{x.year} - 30/{x.month}/{x.year}") df = df[['payperiod', 'eid', 'amountpaid']].groupby(['payperiod', 'eid']).sum().reset_index() return df.to_json(orient="records") except Exception as e: logger.error(e) raise e
def get(self): ''' Article get ''' try: _article_id = request.args.get('id', None, int) _article_title = request.args.get('title', None, str) _article_author = request.args.get('author', None, str) _article_text = request.args.get('text', None, str) _article_body = request.args.get('body', None, str) if _article_id is not None: result_list = db.session.query(ArticleModel.article_id, ArticleModel.article_author, ArticleModel.article_title, ArticleModel.article_text, ArticleModel.article_body). \ filter(ArticleModel.article_id == _article_id).first() if result_list is None: return [], 404 return [ArticleSchema().dump(_).data for _ in [result_list]] if _article_title is not None: result_list = db.session.query(ArticleModel.article_id, ArticleModel.article_author, ArticleModel.article_title, ArticleModel.article_text, ArticleModel.article_body). \ filter(ArticleModel.article_title.like('%{0}%'.format(_article_title))) if _article_author is not None: result_list = result_list.filter( ArticleModel.article_author.like( '%{0}%'.format(_article_author))) if _article_text is not None: result_list = result_list.filter( ArticleModel.article_text.like( '%{0}%'.format(_article_text))) if _article_body is not None: result_list = result_list.filter( ArticleModel.article_body.like( '%{0}%'.format(_article_body))) result_list = result_list.limit(10).all() if result_list == []: return [], 404 else: return {'code': 400, 'message': ' Bad Request '}, 400 return [ArticleSchema().dump(_).data for _ in result_list] except Exception as e: logger.error(e) return {'code': 500, 'message': ' Internal Server Error '}, 500
def verify_pw(user_sid, password): try: user = User.query.filter_by(user_sid=user_sid).first() if not user: raise Exception("No user for {}".format(user_sid)) if check_password_hash(user.hashed_token, password): g.user = user return True except Exception as e: logger.error("Error: %s" % e)
def add(session, df): # add job group if its new try: jgs = df['jg'].drop_duplicates() for name in jgs.values.tolist(): jg = JobGroupModel.query.filter_by(name=name).first() if jg is None: newjg = JobGroupModel(name=name) session.add(newjg) except Exception as e: logger.error(e) raise e
def init_values(): from model.Rate import RateModel from model import db a_rate = RateModel(rate=20, jid=1) b_rate = RateModel(rate=30, jid=2) session = db.session() try: session.add(a_rate) session.add(b_rate) session.commit() except Exception as e: logger.error(e) session.rollback() finally: db.session.remove()
def upload(session, file): try: df, fname = FileService.parse_file(file) if not FileService.check_fname(fname=fname): raise ValueError("File already uploaded.") else: logger.info(f"Adding file={fname}") file = FilesModel(name=fname) session.add(file) fid = FilesModel.query.filter_by(name=fname).first().id JobGroupService.add(df=df) HistoryService.add(df=df, fid=fid) except Exception as e: logger.error(e) raise e
def _wrapper(*args, **kwargs): try: token = request.environ.get('HTTP_TOKEN') if token is None: raise TokenNotFoundException if redis_store.exists(f'token:{token}') == 1: login_user_info = redis_store.hgetall(f'token:{token}') if login_user_info is None: raise TokenNotFoundException setattr(request, 'login_user_info', login_user_info) return func(*args, **kwargs) else: raise TokenNotFoundException except Exception as e: logger.error(e) raise e
def authorize(): logger.info("Inside authorize") headers = {'Content-Type': 'text/html'} resp = {} if not request.args: resp["error"] = "Missing request parameters." return make_response( render_template("error.html", error='Missing request parameters.'), 200, headers) client = get_client(request.args) redirect_uri = get_redirect_uri(request.args, client) if not client: # Check for known client logger.error('Unknown client %s', request.args['client_id']) resp["error"] = "Unknown client." return make_response( render_template("error.html", error='Unknown client.'), 400, headers) elif not redirect_uri: logger.error("Mismatched redirect URI, expected %s got %s", client["redirect_uris"], request.args["redirect_uri"]) resp["error"] = "Invalid redirect URI." return resp else: # Check for the scopes req_scope = None client_scope = client["scope"].split(" ") if request.args['scope']: req_scope = request.args['scope'].split(' ') same = [item for item in req_scope if item in client_scope] if len(same) == 0: # client asked for a scope it could not have resp["error"] = "invalid_scope" return make_response( render_template("error.html", error='Invalid Scope'), 400, headers) reqid = generate_auth_code() REQUESTS[reqid] = request.query_string return make_response( render_template("authorize.html", reqid=reqid, scope=req_scope, client=client), 200, headers)
def patch(self): _login_user_info = getattr(request, 'login_user_info') _passwd = request.json.get('passWord') try: if len(_passwd) < 6: raise AccountPasswdShortException db.session.query(DIDUserModel). \ filter(DIDUserModel.id == _login_user_info.get('id')). \ update({DIDUserModel._password: _passwd}) db.session.commit() return {'code': 200, 'message': '修改成功'} except Exception as e: db.session.rollback() logger.error(e) raise e
def get(self): ''' Question get ''' try: _question_id = request.args.get('id', None, int) _question_title = request.args.get('title', None, str) _question_text = request.args.get('text', None, str) if _question_id is not None: result_list = db.session.query(QuestionModel.question_id, QuestionModel.question_title, QuestionModel.question_text, QuestionModel.question_body). \ filter(QuestionModel.question_id == _question_id).first() if result_list is None: return [], 404 return [QuestionSchema().dump(_).data for _ in [result_list]] if _question_title is not None: result_list = db.session.query(QuestionModel.question_id, QuestionModel.question_title, QuestionModel.question_text, QuestionModel.question_body). \ filter(QuestionModel.question_title.like('%{0}%'.format(_question_title))) if _question_text is not None: result_list = result_list.filter( QuestionModel.question_text.like( '%{0}%'.format(_question_text))) result_list = result_list.limit(10).all() if result_list == []: return [], 404 else: return {'code': 400, 'message': ' Bad Request '}, 400 return [QuestionSchema().dump(_).data for _ in result_list] except Exception as e: logger.error(e) return {'code': 500, 'message': ' Internal Server Error '}, 500
def post(self): _passwd = request.json.get('passWord') _phone = request.json.get('phoneNumber') try: if None in (_passwd, _phone): raise RequestParameterException user_query = db.session.query(DIDUserModel.id, DIDUserModel.uname, DIDUserModel.passwd, DIDUserModel.phone, DIDUserModel.email). \ filter(DIDUserModel.phone == _phone).first() if user_query is None: raise AccountNotFoundException if check_password_hash(user_query.passwd, _passwd) is False: raise AccountPasswdErrorException token = uuid1().hex login_user_info = { 'token': token, 'id': user_query.id, 'uname': user_query.uname, 'phone': user_query.phone, 'email': user_query.email } redis_store.hmset(f'token:{token}', login_user_info) redis_store.expire(f'token:{token}', 60 * 10) # 10 minute return { 'code': 200, 'message': '登陆成功', 'resp_data': login_user_info } except Exception as e: logger.error(e) db.session.rollback() raise e
def add(session, df, fid): try: # left join job group for job group id jg = pd.read_sql_table(table_name='jobgroup', con=db.engine) df = pd.merge(df, jg, how='left', left_on='jg', right_on='name', sort=True) for idx, row in df.iterrows(): history = HistoryModel(date=datetime.datetime.strptime( row['date'], '%d/%m/%Y'), hours=row['hours'], eid=row['eid'], jid=row['id'], fid=fid) session.add(history) except Exception as e: logger.error(e) raise e
def delete(self): _login_user_info = getattr(request, 'login_user_info') _passwd = request.json.get('passWord') try: user_query = db.session.query(DIDUserModel.id, DIDUserModel.passwd, DIDUserModel.status). \ filter(DIDUserModel.status != 0, DIDUserModel.id == _login_user_info.get('id')) if check_password_hash(user_query.first().passwd, _passwd) is False: raise AccountPasswdErrorException user_query.update({DIDUserModel.status: 0}) db.session.commit() return {'code': 200, 'message': '删除成功'} except Exception as e: db.session.rollback() logger.error(e) raise e
def get(self): ''' Photo get ''' try: _photo_id = request.args.get('id', None, int) _photo_text = request.args.get('text', None, str) if _photo_id is not None: result_list = db.session.query(PhotoModel.photo_id, PhotoModel.photo_url, PhotoModel.photo_date, PhotoModel.photo_text, PhotoModel.wufazhuce_url). \ filter(PhotoModel.photo_id == _photo_id).first() if result_list is None: return [], 404 return [PhotoSchema().dump(_).data for _ in [result_list]] if _photo_text is not None: result_list = db.session.query(PhotoModel.photo_id, PhotoModel.photo_url, PhotoModel.photo_date, PhotoModel.photo_text, PhotoModel.wufazhuce_url). \ filter(PhotoModel.photo_text.like('%{0}%'.format(_photo_text))). \ limit(10).all() if result_list == []: return [], 404 else: return {'code': 400, 'message': ' Bad Request '}, 400 return [PhotoSchema().dump(_).data for _ in result_list] except Exception as e: logger.error(e) return {'code': 500, 'message': ' Internal Server Error '}, 500
def post(self): _username = request.json.get('userName') _passwd = request.json.get('passWord') _phone = request.json.get('phoneNumber') _email = request.json.get('userEmail') _group_id = request.json.get('groupId') try: if None in (_username, _passwd, _phone, _email, _group_id): raise RequestParameterException user_query = db.session.query(DIDUserModel.id, DIDUserModel.phone, DIDUserModel.email). \ filter(or_(DIDUserModel.phone == _phone, DIDUserModel.email == _email)).first() if user_query is not None: if user_query.phone == _phone: raise AccountRepeatException elif user_query.email == _email: raise AccountRepeatException _user_data = DIDUserModel( uname=_username, _password=_passwd, phone=_phone, email=_email, group_id=_group_id) db.session.add(_user_data) db.session.commit() resp_data = DIDUserSchema().dump(_user_data).data return {'code': 200, 'resp_data': resp_data, 'message': '添加成功'} except Exception as e: db.session.rollback() logger.error(e) raise e
def get(self): _login_user_info = getattr(request, 'login_user_info') try: user_query = db.session.query(DIDUserModel.id, DIDUserModel.passwd, DIDUserModel.phone, DIDUserModel.email, DIDUserModel.photo, DIDUserModel.group_id, DIDUserModel.status, DIDUserModel.ctime, DIDUserModel.mtime). \ filter(DIDUserModel.status != 0, DIDUserModel.id == _login_user_info.get('id')).first() resp_data = DIDUserSchema().dump(user_query).data return {'code': 200, 'resp_data': resp_data} except Exception as e: db.session.rollback() logger.error(e) raise e
def sim_btc_create_transaction(self, from_addr, dest_info): txout = self.sim_btc_get_trx_out(from_addr) if len(txout) == 0 : return "" sum = 0.0 vin_need = [] fee = self.config["fee"] amount = 0.0 vouts = {} for addr, num in dest_info.items(): amount = round(amount + num,8) vouts[addr]=round(num,8) txout = sorted(txout, key=lambda d: float(d["amount"]), reverse=True) #{"amount":tx["value"],"txid":tx["txid"],"vout":tx["vout"],"scriptPubKey":tx["scriptPubKey"]} all_need_amount = round(amount+fee,8) bak_index = -1 use_idx = [] if len(txout)>50: for i in range(len(txout)): if float(txout[i].get("amount")) >= all_need_amount: bak_index=i elif float(txout[i].get("amount")) < all_need_amount and bak_index!=-1: sum = round(sum + float(txout[bak_index].get("amount")), 8) vin_need.append(txout[bak_index]) use_idx.append(bak_index) break elif float(txout[i].get("amount")) < all_need_amount and bak_index==-1: break if bak_index == -1: for i in range(len(txout)): if sum >= round(amount + fee, 8): break sum = round(sum + float(txout[i].get("amount")), 8) vin_need.append(txout[i]) use_idx.append(i) if len(txout)>50 and len(vin_need)<10: for i in range(10 - len(vin_need)): cur_idx = len(txout)-i-1 if cur_idx not in use_idx: sum = round(sum + float(txout[cur_idx].get("amount")), 8) vin_need.append(txout[cur_idx]) use_idx.append(cur_idx) if sum < round(amount+fee,8): return "" vins = [] script = [] for need in vin_need : pubkey=need.get('scriptPubKey') script.append(pubkey) vin = {'txid': need.get('txid'), 'vout': int(need.get('vout')), 'scriptPubKey': pubkey} vins.append(vin) #set a fee resp = "" trx_size = len(vin_need) * self.config["vin_size"] + (len(vouts)+1) * self.config["vout_size"] cal_fee = math.ceil(trx_size/1000.0) * self.config["per_fee"] cal_fee = round(cal_fee,8) if cal_fee>fee: logger.error("cal fee large than max fee!") return "" if round(sum-amount,8) == cal_fee: resp = self.http_request("createrawtransaction", [vins, vouts]) else: if vouts.has_key(from_addr): vouts[from_addr] = round(sum - amount - cal_fee + vouts[from_addr],8) else: if round(sum - amount - cal_fee,8) >0.00000546: vouts[from_addr] = round(sum - amount - cal_fee,8) resp = self.http_request("createrawtransaction", [vins, vouts]) if resp["result"] != None: trx_hex = resp['result'] trx = self.sim_btc_decode_hex_transaction(trx_hex) return {"trx":trx,"hex":trx_hex,"scriptPubKey":script} return ""
def sim_btc_create_transaction(self, from_addr, dest_info, is_fast): txout = self.sim_btc_get_trx_out(from_addr) if len(txout) == 0: return "" sum = 0.0 vin_need = [] fee = self.config["fee"] amount = 0.0 vouts = {} for addr, num in dest_info.items(): amount = round(amount + num, 8) vouts[addr] = round(num, 8) txout = sorted(txout, key=lambda d: float(d["amount"]), reverse=True) #{"amount":tx["value"],"txid":tx["txid"],"vout":tx["vout"],"scriptPubKey":tx["scriptPubKey"]} all_need_amount = round(amount + fee, 8) bak_index = -1 use_idx = [] if self.name.upper() != "DOGE": if len(txout) > 8: for i in range(len(txout)): if float(txout[i].get("amount")) >= all_need_amount: bak_index = i elif float(txout[i].get( "amount")) < all_need_amount and bak_index != -1: sum = round( sum + float(txout[bak_index].get("amount")), 8) vin_need.append(txout[bak_index]) use_idx.append(bak_index) break elif float(txout[i].get( "amount")) < all_need_amount and bak_index == -1: break bak_sum = 0 if bak_index == -1: for i in range(len(txout)): if sum >= round(amount + fee, 8): break if self.name.upper() == "DOGE" and i == 0: bak_sum = round(float(txout[i].get("amount")), 8) else: sum = round(sum + float(txout[i].get("amount")), 8) vin_need.append(txout[i]) use_idx.append(i) sum = round(sum + bak_sum, 8) if len(txout) > 8 and len(vin_need) < 5: for i in range(5 - len(vin_need)): cur_idx = len(txout) - i - 1 if cur_idx not in use_idx: sum = round(sum + float(txout[cur_idx].get("amount")), 8) vin_need.append(txout[cur_idx]) use_idx.append(cur_idx) if sum < round(amount + fee, 8): return "" vins = [] script = [] vins_map = {} for need in vin_need: pubkey = need.get('scriptPubKey') script.append(pubkey) vin = { 'txid': need.get('txid'), 'vout': int(need.get('vout')), 'scriptPubKey': pubkey, "sequence": 0xfffffff0 } vins.append(vin) if self.name.upper() == "BCH": vins_map[need.get('txid') + str(need.get('vout'))] = need.get("amount") #set a fee resp = "" trx_size = len(vin_need) * self.config["vin_size"] + ( len(vouts) + 1) * self.config["vout_size"] if is_fast: cal_fee = fee else: cal_fee = math.ceil(trx_size / 1000.0) * self.config["per_fee"] if self.name.upper() == "DOGE" and sum > 6000: cal_fee = 0.001 cal_fee = round(cal_fee, 8) if cal_fee > fee: logger.error("cal fee large than max fee!") return "" if round(sum - amount, 8) == cal_fee: resp = self.http_request("createrawtransaction", [vins, vouts]) else: if vouts.has_key(from_addr): vouts[from_addr] = round( sum - amount - cal_fee + vouts[from_addr], 8) else: if round(sum - amount - cal_fee, 8) > 0.00000546: vouts[from_addr] = round(sum - amount - cal_fee, 8) resp = self.http_request("createrawtransaction", [vins, vouts]) if resp["result"] != None: trx_hex = resp['result'] trx = self.sim_btc_decode_hex_transaction(trx_hex) if self.name.upper() == "BCH": index = 0 for one_vin in trx["vin"]: tmp_amount = vins_map[one_vin["txid"] + str(one_vin["vout"])] trx["vin"][index]["amount"] = self.floatToInt( round(float(tmp_amount), 8) * 100000000) index += 1 return {"trx": trx, "hex": trx_hex, "scriptPubKey": script} return ""
def omni_create_transaction(self, from_addr, dest_info): txout = self.omni_get_trx_out(from_addr) omni_balance = self.omni_get_balance(from_addr) if len(txout) == 0: return "" sum = 0.0 vin_need = [] fee = self.config["fee"] amount = 0.0 vouts = {} for addr, num in dest_info.items(): amount = round(amount + num, 8) vouts[addr] = round(0.00000546, 8) if len(vouts) != 1: logger.error("dest info is invaild %v", dest_info) return "" if float(omni_balance < amount): logger.error("omni balance is insufficient") return "" txout = sorted(txout, key=lambda d: float(d["amount"]), reverse=True) # {"amount":tx["value"],"txid":tx["txid"],"vout":tx["vout"],"scriptPubKey":tx["scriptPubKey"]} all_need_amount = round(fee, 8) bak_index = -1 for i in range(len(txout)): if sum >= round(fee, 8): break sum = round(sum + float(txout[i].get("amount")), 8) vin_need.append(txout[i]) has_546 = False for i in range(len(txout)): if round(float(txout[i].get("amount")), 8) == 0.00000546: vin_need.append(txout[i]) has_546 = True break if sum < round(fee, 8): return "" vins = [] script = [] for need in vin_need: pubkey = need.get('scriptPubKey') script.append(pubkey) vin = { 'txid': need.get('txid'), 'vout': int(need.get('vout')), 'scriptPubKey': pubkey } vins.append(vin) # set a fee resp = "" trx_size = len(vin_need) * self.config["vin_size"] + ( len(vouts) + 1) * self.config["vout_size"] + 40 cal_fee = math.ceil(trx_size / 1000.0) * self.config["per_fee"] cal_fee = round(cal_fee, 8) if cal_fee > fee: logger.error("cal fee large than max fee!") return "" #add usdt payload vout omni_payload = "%04x%04x%08x%016x" % (0, 0, self.config["property_id"], int(amount * math.pow(10, 8))) if not has_546: cal_fee += 0.00000546 if round(fee, 8) == cal_fee: resp = self.http_request("createrawtransaction", [vins, vouts]) else: if vouts.has_key(from_addr): vouts[from_addr] = round(sum - cal_fee + vouts[from_addr], 8) else: if round(fee - cal_fee, 8) > 0.00000546: vouts[from_addr] = round(sum - cal_fee, 8) resp = self.http_request("createrawtransaction", [vins, vouts]) if resp["result"] != None: trx_hex = resp['result'] #use payload rebuild raw trx omni_rawtrx_res = self.http_request("omni_createrawtx_opreturn", [trx_hex, omni_payload]) if omni_rawtrx_res["result"] != None: trx_hex = omni_rawtrx_res['result'] trx = self.omni_decode_hex_transaction(trx_hex) return {"trx": trx, "hex": trx_hex, "scriptPubKey": script} return ""
def approve(): logger.info("==> approve()") headers = {'Content-Type': 'text/html'} params = {} if not request.form: logger.error("Missing post parameters. Bad request.") return make_response( render_template( 'error.html', error='Missing post form parameters. Bad request.'), 400, headers) # return "Bad Request", 400 else: query = REQUESTS.pop(request.form['reqid'], None) query = query.decode('UTF-8') print("The query: ", query) if not query: logger.error("Did not get a query string.") return make_response( render_template('error.html', error='Bad Request'), 400, headers) else: params = parse.parse_qs(query) print(params) if request.form["approve"]: logger.debug("Approving a token request.") if params["response_type"][0] == 'code': code = generate_auth_code() # Not sure whwer the user comes from. # user = request.form['user'] scope = params['scope'][0] req_scope = scope.split(' ') client = get_client_from_query(params) print(client) client_scope = client['scope'] same = [item for item in req_scope if item in client_scope] if len(same) == 0: # Client asked for a scope it could not have. return make_response( render_template('error.html', error='Invalid Scope'), 400, headers) # Save for later. A dictionary of stuff CODES[code] = { 'authorizationRequest': query, 'scope': scope, 'client_id': client['client_id'] } # Build the redirect url redirect_uri = params['redirect_uri'][0] if redirect_uri not in client['redirect_uris']: return make_response( render_template('error.html', error='Invalid redirect URI.'), 400, headers) state = params['state'][0] payload = {'code': code, 'state': state} the_location = ''.join( (redirect_uri, '?', parse.urlencode(payload))) print(the_location) return redirect(the_location, code=302) return "Got here", 200