def disconnect(self): if self.connection: if self.cursor: self.cursor.close() self.connection.close() logger.info("MYSQL connection is closed") self.connection = None self.cursor = None
def test_http_methods(self): logger.info("Testing Http methods like POST, PUT, DELETE") result = self.simulate_post('/api/v1/embl/search?name=tbx') self.assertEqual(result.status, falcon.HTTP_405) result = self.simulate_put('/api/v1/embl/search?name=tbx') self.assertEqual(result.status, falcon.HTTP_405) result = self.simulate_delete('/api/v1/embl/search?name=tbx') self.assertEqual(result.status, falcon.HTTP_405)
def test_validate_params(self): logger.info("Validating parameters") output = { u"error": u"Search param 'name' cannot be none or less than 3 chars" } result = self.simulate_get('/api/v1/embl/search?name=tb') self.assertEqual(result.json, output)
def send_mail(email_id, attach_file, to_email, book_title, book_author): if gk7.SEND_MAIL_TYPE == 'api': data = { 'email_id': email_id, 'file_path': attach_file, 'to_user': to_email, 'title': book_title, 'author': book_author } ApiTask.post.delay(gk7.API_URL.get('mail'), urllib.urlencode(data)) logger.info(u'调用API发送邮件接口中...') return True # 其他类型 # 发送邮件并修改待发送邮件状态 MailTask.send.delay(email_id, attach_file, to_email, book_title, book_author) logger.info(u'发送邮件中...') return True
def get_data(self, query, params, retry_counter=0) -> []: try: logger.info("running query " + query) self.cursor.execute(query, params) retry_counter = 0 except DBError as error: if retry_counter >= Constants.limit_retries.value: raise error else: retry_counter += 1 logger.info("DB Connection error {}. retrying {}".format( str(error).strip(), retry_counter)) time.sleep(2) self.reset() self.get_data(query, retry_counter) columns = tuple([col[0] for col in self.cursor.description]) data = [dict(zip(columns, row)) for row in self.cursor] return data
def on_get(self, req, resp): gene_name = req.get_param(Constants.name.value, None) species = req.get_param(Constants.species.value, None) http_status = falcon.HTTP_400 if gene_name and len(gene_name) >= Constants.min_keyword_count.value: query = """select stable_id as id, display_label as name, species from gene_autocomplete where display_label like %s""" params = (gene_name.lower()+"%",) if species: query+=" and species = %s" params=(gene_name.lower()+"%",species,) try: http_status = falcon.HTTP_200 response_body = json.dumps(self.database.get_data(query,params), ensure_ascii=False) except Exception as exp: logger.info(str(exp)) http_status = falcon.HTTP_400 response_body = json.dumps({Constants.error.value: str(exp)}) else: response_body = json.dumps({Constants.error.value: "Search param 'name' cannot be none or less than 3 chars"}) resp.content_type = falcon.MEDIA_JSON resp.status = http_status resp.body = response_body
def connect(self, retry_counter=0): if not self.connection: try: self.connection = connector.connect( host=Constants.host.value, user=Constants.user.value, database=Constants.database.value, pool_size=Constants.pool_size.value, connect_timeout=3) retry_counter = 0 return self.connection except DBError as error: if not self.reconnect or retry_counter >= Constants.limit_retries.value: raise error else: retry_counter += 1 logger.info( "DB Connection error {}. reconnecting {}".format( str(error).strip(), retry_counter)) time.sleep(5) self.connect(retry_counter) except (Exception, DBError) as error: raise error
def labeling(self, close_df, num_days=5, save=False, min_pct=0.05): """labeling func ラベリングの処理を実行する Args: close_df(pandas.DataFrame): 価格情報 num_days(int): xxx save(bool): 保存するかどうか min_pct(float): drop_labels で使用 Note: 1. 変化分が大きいシグナルを検出(t_events, get_t_events)、CUSUMサンプリング 2. 変化率を計算(daily_vol_df, get_daily_vol) 3. トリプルバリア法により、ラベルづけ可能なシグナルを検出(events, get_events) 4. ラベルを決定(get_bin) 5. 重複ラベルを削除(drop_labels) """ logger.info("close_df len: {}".format(len(close_df))) t_events = get_t_events(close_df, h=30) daily_vol_df = self.get_daily_vol(close_df, num_days=num_days) logger.info("t_events len: {}".format(len(t_events))) events = self.get_events(close = close_df, t_events=t_events, ptsl=[0.1, 0.1], \ trgt=daily_vol_df, min_ret=0.03, num_threads=1, num_days=num_days,\ t1=True) logger.info("events len: {}".format(len(events))) bins = self.get_bins(events, close_df) bins = self.drop_labels(bins, min_pct=min_pct) if save: print("label file を保存します。") bins.to_csv(self.bins_save_filename) events.to_csv(self.events_save_filename) self.close_df = close_df self.bins = bins self.events = events return bins, events
# 设置系统编码 reload(sys) sys.setdefaultencoding('utf-8') urls = ( '/','Index', '/send', 'Send', '/admin/login', 'Login', ) #web.config.debug = False app = web.application(urls, globals()) class Index: def GET(self): return json.dumps({'msg':'not services'}) def POST(self): return json.dumps({'msg':'not servicindex'}) if __name__ == "__main__": logger.info(u'-----------系统启动-----------') # 初始化书籍封面目录 if not os.path.exists(gk7.BOOK_COVER_DIRS): os.makedirs(gk7.BOOK_COVER_DIRS) #web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr) ##这行是新增的 app.run()
def sample_weighting(self, check_mc=False, save=False): """sample_weighting func 標本の重み付けの処理 Args: check_mc(bool): モンテカルロ法で逐次ブートストラップ法の有用性を確認するかどうか """ # スニペット 4.1 # スニペット 4.2 ラベルの平均性の推定 num_co_events = mp_pandas_obj(func=self.mp_num_co_events, pd_obj=("molecule", self.events.index), num_threads=self.num_threads, close_idx=self.labeling.close_df.index, t1=self.events["t1"]) num_co_events = num_co_events.loc[~num_co_events.index.duplicated( keep="last")] num_co_events = num_co_events.reindex( self.labeling.close_df.index).fillna(0) self.bins["tw"] = mp_pandas_obj(self.mp_sample_tw, ("molecule", self.events.index), num_threads=self.num_threads, \ t1=self.events["t1"], num_co_events=num_co_events) # スニペット 4.10 絶対リターンの帰属による標本ウェイトの決定 self.bins["w"] = mp_pandas_obj(self.mp_sample_w, ("molecule", self.events.index), num_threads=self.num_threads, \ t1=self.events["t1"], num_co_events=num_co_events, close = self.labeling.close_df) self.bins["w"] *= self.bins.shape[0] / self.bins["w"].sum() # スニペット 4.11 時間減衰ファクターの実装 self.bins["tw"] = get_time_decay(self.bins["tw"], c_if_last_w=0.5) # bar_ix = self.get_bar_ix() bar_ix = self.labeling.close_df.index if check_mc: # スニペット 4.8 標準的ブートストラップと逐次ブートストラップによる独自性 num_iters = 2 jobs = [] for i in range(int(num_iters)): job = { "func": SampleWeighting.aux_mc, "t1": self.events["t1"], "bar_ix": bar_ix } jobs.append(job) if self.num_threads == 1: out = process_jobs_single(jobs) out_df = pd.DataFrame(out) print("out_df", out_df) print("out_df describe", out_df.describe()) # スニペット 4.3 # スニペット 4.4 ind_matrix = SampleWeighting.get_ind_matrix(bar_ix, self.events["t1"]) phi = SampleWeighting.seq_bootstrap(ind_matrix) phi = list(set(sorted(phi))) self.bins_sampled = self.bins.iloc[phi, :] logger.info("サンプル前 -> サンプル後: {} -> {}".format(len(self.bins), len(self.bins_sampled))) if save: print("結果を保存します") self.bins_sampled.to_csv(self.bins_save_filename) return self.bins_sampled
def process_request(self, req, resp): if req.method not in ["GET"]: logger.info("") resp.status = falcon.HTTP_405 resp.body = json.dumps( {Constants.error.value: "API supports only [GET,]"})
# 设置系统编码 reload(sys) sys.setdefaultencoding('utf-8') urls = ( '/','Index', '/send', 'Send', '/admin/login', 'Login', ) #web.config.debug = False app = web.application(urls, globals()) class Index: def GET(self): return json.dumps({'msg':'not services'}) def POST(self): return json.dumps({'msg':'not servicindex'}) if __name__ == "__main__": logger.info(u'-----------系统启动-----------') #web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr) ##这行是新增的 app.run() #application = app.wsgifunc()
def test_get_all_records(self): logger.info("Searching for gene name tbx") result = self.simulate_get('/api/v1/embl/search?name=tbx') self.assertEqual(result.status, falcon.HTTP_200)