def test_yisheng(self): from cms.db.orm import DiZhi, DanWei, YiSheng dizhi = DiZhi("中国", "湖南", "湘潭市", "湘潭县云湖桥镇北岸村道林组83号") danwei = DanWei("任之堂") yisheng = YiSheng('余浩', 1, date(2015, 4, 2), '13673265859') danwei.yishengs = [yisheng] danwei.dizhi = dizhi Session.add(danwei) Session.commit() items = Session.query(DanWei).filter(DanWei.mingcheng == "任之堂").first() self.assertEqual(items.dizhi.jiedao, u"湘潭县云湖桥镇北岸村道林组83号") items = Session.query(YiSheng).join(DanWei).filter( DanWei.mingcheng == "任之堂").first() self.assertEqual(items.danwei.dizhi.jiedao, u"湘潭县云湖桥镇北岸村道林组83号") self.assertEqual(items.danwei.yishengs[0], items) items = Session.query(DanWei).all() items.extend(Session.query(DiZhi).all()) items.extend(Session.query(YiSheng).all()) for m in items: Session.delete(m) Session.commit()
def test_chufang_yao(self): from cms.db.orm import Yao, YaoXing, YaoWei, JingLuo, ChuFang, Yao_ChuFang_Asso yaowei = YaoWei("酸") yaoxing = YaoXing("寒") jingluo = JingLuo("足厥阴肝经") yao = Yao("白芍") chufang = ChuFang("桂枝汤") yao_chufang = Yao_ChuFang_Asso(yao, chufang, 7, "加热稀粥") yao.yaowei = yaowei yao.yaoxing = yaoxing yao.guijing = [jingluo] Session.add(yao) Session.add(yaowei) Session.add(yaoxing) Session.add(jingluo) Session.add(yao_chufang) Session.commit() items = Session.query(Yao.mingcheng, YaoWei.wei).filter(YaoWei.wei == "酸").all() self.assertEqual(len(items), 1) items = Session.query(JingLuo).all() self.assertEqual(len(items), 1) items = Session.query(Yao).all() items.extend(Session.query(YaoXing).all()) items.extend(Session.query(YaoWei).all()) items.extend(Session.query(JingLuo).all()) items.extend(Session.query(ChuFang).all()) for m in items: Session.delete(m) Session.commit()
def test_yaowei(self): from cms.db.orm import YaoWei yaowei = YaoWei("酸") Session.add(yaowei) Session.commit() suan = Session.query(YaoWei).filter(YaoWei.wei == "酸").all() self.assertEqual(len(suan), 1) for xing in suan: Session.delete(xing) Session.commit() suan = Session.query(YaoWei).all() self.assertEqual(bool(suan), False)
def test_dizhi(self): from cms.db.orm import DiZhi dizhi = DiZhi("中国", "湖南", "湘潭市", "湘潭县云湖桥镇北岸村道林组83号") Session.add(dizhi) Session.commit() items = Session.query(DiZhi.jiedao).filter(DiZhi.sheng == "湖南").first() self.assertEqual(items[0], u"湘潭县云湖桥镇北岸村道林组83号") items = Session.query(DiZhi).all() for m in items: Session.delete(m) Session.commit()
def test_jingluo(self): from cms.db.orm import JingLuo item = JingLuo("足少阳胆经") Session.add(item) Session.commit() items = Session.query(JingLuo).filter( JingLuo.mingcheng == "足少阳胆经").all() self.assertEqual(len(items), 1) for m in items: Session.delete(m) Session.commit() items = Session.query(JingLuo).all() self.assertEqual(bool(items), False)
def test_yaoxing(self): from cms.db.orm import YaoXing yaoxing = YaoXing("寒") Session.add(yaoxing) Session.commit() suan = Session.query(YaoXing).filter(YaoXing.xing == "寒").all() self.assertEqual(len(suan), 1) suan = Session.query(YaoXing).all() for xing in suan: Session.delete(xing) Session.commit() suan = Session.query(YaoXing).all() self.assertEqual(bool(suan), False)
def test_danwei(self): from cms.db.orm import DiZhi, DanWei dizhi = DiZhi("中国", "湖南", "湘潭市", "湘潭县云湖桥镇北岸村道林组83号") danwei = DanWei("任之堂") danwei.dizhi = dizhi Session.add(danwei) Session.commit() items = Session.query(DanWei).filter(DanWei.mingcheng == "任之堂").first() self.assertEqual(items.dizhi.jiedao, u"湘潭县云湖桥镇北岸村道林组83号") items = Session.query(DanWei).all() items.extend(Session.query(DiZhi).all()) for m in items: Session.delete(m) Session.commit()
def empty_tables(self, tbls=None): """drop all db tables """ # tbls = ['Yao_ChuFang_Asso','ChuFang','Yao_JingLuo_Asso','Yao','YaoWei','YaoXing','JingLuo'] tbls = [ 'YaoWei', 'YaoXing', 'JingLuo', 'Yao_JingLuo_Asso', 'Yao', 'Yao_ChuFang_Asso', 'ChuFang_BingRen_Asso', 'ChuFang', 'YiSheng', 'DanWei', 'DiZhi', 'BingRen' ] items = [] for tb in tbls: import_str = "from %(p)s import %(t)s as tablecls" % dict( p='cms.db.orm', t=tb) exec import_str items.extend(Session.query(tablecls).all()) for m in items: Session.delete(m) Session.commit()
def test_bingren(self): from cms.db.orm import ChuFang, BingRen, DiZhi dizhi = DiZhi("中国", "湖南", "湘潭市", "湘潭县云湖桥镇北岸村道林组83号") bingren = BingRen('张三', 1, date(2015, 4, 2), '13673265899') bingren.dizhi = dizhi Session.add(bingren) Session.commit() items = Session.query(BingRen).filter( BingRen.dianhua == "13673265899").first() self.assertEqual(items.dizhi.jiedao, u"湘潭县云湖桥镇北岸村道林组83号") items = Session.query(BingRen).join(DiZhi).filter( DiZhi.sheng == "湖南").first() self.assertEqual(items.dizhi.jiedao, u"湘潭县云湖桥镇北岸村道林组83号") items = Session.query(BingRen).all() items.extend(Session.query(DiZhi).all()) for m in items: Session.delete(m) Session.commit()
class AddTestcasesHandler(BaseHandler): """Add several testcases to a dataset. """ @require_permission(BaseHandler.PERMISSION_ALL) def get(self, dataset_id): dataset = self.safe_get_item(Dataset, dataset_id) task = dataset.task self.r_params = self.render_params() self.r_params["task"] = task self.r_params["dataset"] = dataset self.render("add_testcases.html", **self.r_params) @require_permission(BaseHandler.PERMISSION_ALL) def post(self, dataset_id): fallback_page = "/dataset/%s/testcases/add_multiple" % dataset_id # TODO: this method is quite long, some splitting is needed. dataset = self.safe_get_item(Dataset, dataset_id) task = dataset.task try: archive = self.request.files["archive"][0] except KeyError: self.application.service.add_notification( make_datetime(), "Invalid data", "Please choose tests archive.") self.redirect(fallback_page) return public = self.get_argument("public", None) is not None overwrite = self.get_argument("overwrite", None) is not None # Get input/output file names templates, or use default ones. input_template = self.get_argument("input_template", "input.*") output_template = self.get_argument("output_template", "output.*") input_re = re.compile(re.escape(input_template).replace("\\*", "(.*)") + "$") output_re = re.compile(re.escape(output_template).replace("\\*", "(.*)") + "$") task_name = task.name self.sql_session.close() fp = StringIO(archive["body"]) try: with zipfile.ZipFile(fp, "r") as archive_zfp: tests = dict() # Match input/output file names to testcases' codenames. for filename in archive_zfp.namelist(): match = input_re.match(filename) if match: codename = match.group(1) if codename not in tests: tests[codename] = [None, None] tests[codename][0] = filename else: match = output_re.match(filename) if match: codename = match.group(1) if codename not in tests: tests[codename] = [None, None] tests[codename][1] = filename skipped_tc = [] overwritten_tc = [] added_tc = [] for codename, testdata in tests.iteritems(): # If input or output file isn't found, skip it. if not testdata[0] or not testdata[1]: continue self.sql_session = Session() # Check, whether current testcase already exists. dataset = self.safe_get_item(Dataset, dataset_id) task = dataset.task if codename in dataset.testcases: # If we are allowed, remove existing testcase. # If not - skip this testcase. if overwrite: testcase = dataset.testcases[codename] self.sql_session.delete(testcase) if not self.try_commit(): skipped_tc.append(codename) continue overwritten_tc.append(codename) else: skipped_tc.append(codename) continue # Add current testcase. try: input_ = archive_zfp.read(testdata[0]) output = archive_zfp.read(testdata[1]) except Exception as error: self.application.service.add_notification( make_datetime(), "Reading testcase %s failed" % codename, repr(error)) self.redirect(fallback_page) return try: input_digest = self.application.service\ .file_cacher.put_file_content( input_, "Testcase input for task %s" % task_name) output_digest = self.application.service\ .file_cacher.put_file_content( output, "Testcase output for task %s" % task_name) except Exception as error: self.application.service.add_notification( make_datetime(), "Testcase storage failed", repr(error)) self.redirect(fallback_page) return testcase = Testcase(codename, public, input_digest, output_digest, dataset=dataset) self.sql_session.add(testcase) if not self.try_commit(): self.application.service.add_notification( make_datetime(), "Couldn't add test %s" % codename, "") self.redirect(fallback_page) return if codename not in overwritten_tc: added_tc.append(codename) except zipfile.BadZipfile: self.application.service.add_notification( make_datetime(), "The selected file is not a zip file.", "Please select a valid zip file.") self.redirect(fallback_page) return self.application.service.add_notification( make_datetime(), "Successfully added %d and overwritten %d testcase(s)" % (len(added_tc), len(overwritten_tc)), "Added: %s; overwritten: %s; skipped: %s" % (", ".join(added_tc) if added_tc else "none", ", ".join(overwritten_tc) if overwritten_tc else "none", ", ".join(skipped_tc) if skipped_tc else "none")) self.application.service.proxy_service.reinitialize() self.redirect("/task/%s" % task.id)
class AddTestcasesHandler(BaseHandler): """Add several testcases to a dataset. """ def get(self, dataset_id): dataset = self.safe_get_item(Dataset, dataset_id) task = dataset.task self.r_params = self.render_params() self.r_params["task"] = task self.r_params["dataset"] = dataset self.render("add_testcases.html", **self.r_params) def post(self, dataset_id): fallback_page = "/dataset/%s/testcases/add_multiple" % dataset_id # TODO: this method is quite long, some splitting is needed. dataset = self.safe_get_item(Dataset, dataset_id) task = dataset.task try: archive = self.request.files["archive"][0] except KeyError: self.application.service.add_notification( make_datetime(), "Invalid data", "Please choose tests archive.") self.redirect(fallback_page) return public = self.get_argument("public", None) is not None overwrite = self.get_argument("overwrite", None) is not None # Get input/output file names templates, or use default ones. input_template = self.get_argument("input_template", None) if not input_template: input_template = "input.*" output_template = self.get_argument("output_template", None) if not output_template: output_template = "output.*" input_re = re.compile( re.escape(input_template).replace("\\*", "(.*)") + "$") output_re = re.compile( re.escape(output_template).replace("\\*", "(.*)") + "$") task_name = task.name self.sql_session.close() fp = StringIO(archive["body"]) try: with zipfile.ZipFile(fp, "r") as archive_zfp: tests = dict() # Match input/output file names to testcases' codenames. for filename in archive_zfp.namelist(): match = input_re.match(filename) if match: codename = match.group(1) if codename not in tests: tests[codename] = [None, None] tests[codename][0] = filename else: match = output_re.match(filename) if match: codename = match.group(1) if codename not in tests: tests[codename] = [None, None] tests[codename][1] = filename skipped_tc = [] overwritten_tc = [] added_tc = [] for codename, testdata in tests.iteritems(): # If input or output file isn't found, skip it. if not testdata[0] or not testdata[1]: continue self.sql_session = Session() # Check, whether current testcase already exists. dataset = self.safe_get_item(Dataset, dataset_id) task = dataset.task if codename in dataset.testcases: # If we are allowed, remove existing testcase. # If not - skip this testcase. if overwrite: testcase = dataset.testcases[codename] self.sql_session.delete(testcase) if not self.try_commit(): skipped_tc.append(codename) continue overwritten_tc.append(codename) else: skipped_tc.append(codename) continue # Add current testcase. try: input_ = archive_zfp.read(testdata[0]) output = archive_zfp.read(testdata[1]) except Exception as error: self.application.service.add_notification( make_datetime(), "Reading testcase %s failed" % codename, repr(error)) self.redirect(fallback_page) return try: input_digest = self.application.service\ .file_cacher.put_file_content( input_, "Testcase input for task %s" % task_name) output_digest = self.application.service\ .file_cacher.put_file_content( output, "Testcase output for task %s" % task_name) except Exception as error: self.application.service.add_notification( make_datetime(), "Testcase storage failed", repr(error)) self.redirect(fallback_page) return testcase = Testcase(codename, public, input_digest, output_digest, dataset=dataset) self.sql_session.add(testcase) if not self.try_commit(): self.application.service.add_notification( make_datetime(), "Couldn't add test %s" % codename, "") self.redirect(fallback_page) return if codename not in overwritten_tc: added_tc.append(codename) except zipfile.BadZipfile: self.application.service.add_notification( make_datetime(), "The selected file is not a zip file.", "Please select a valid zip file.") self.redirect(fallback_page) return self.application.service.add_notification( make_datetime(), "Successfully added %d and overwritten %d testcase(s)" % (len(added_tc), len(overwritten_tc)), "Added: %s; overwritten: %s; skipped: %s" % (", ".join(added_tc) if added_tc else "none", ", ".join(overwritten_tc) if overwritten_tc else "none", ", ".join(skipped_tc) if skipped_tc else "none")) self.application.service.proxy_service.reinitialize() self.redirect("/task/%s" % task.id)
def test_all_tables(self): from cms.db.orm import ChuFang,DanWei,\ BingRen,DiZhi,YiSheng,ChuFang_BingRen_Asso,YaoWei,YaoXing,JingLuo,Yao,Yao_ChuFang_Asso dizhi = DiZhi("中国", "湖南", "湘潭市", "湘潭县云湖桥镇北岸村道林组83号") bingren = BingRen('张三', 1, date(2015, 4, 2), '13673265899') bingren.dizhi = dizhi dizhi2 = DiZhi("中国", "湖北", "十堰市", "茅箭区施洋路83号") danwei = DanWei("任之堂") yisheng = YiSheng('余浩', 1, date(2015, 4, 2), '13673265859') danwei.yishengs = [yisheng] danwei.dizhi = dizhi2 yaowei = YaoWei("酸") yaoxing = YaoXing("寒") jingluo = JingLuo("足厥阴肝经") yao = Yao("白芍") yaowei2 = YaoWei("甘") yaoxing2 = YaoXing("温") jingluo2 = JingLuo("足太阴脾经") yao2 = Yao("大枣") chufang = ChuFang("桂枝汤") yao2.yaowei = yaowei2 yao2.yaoxing = yaoxing2 yao2.guijing = [jingluo2] yao.yaowei = yaowei yao.yaoxing = yaoxing yao.guijing = [jingluo] yao_chufang = Yao_ChuFang_Asso(yao, chufang, 7, "加热稀粥") yao_chufang2 = Yao_ChuFang_Asso(yao2, chufang, 10, "掰开") chufang_bingren = ChuFang_BingRen_Asso(bingren, chufang, datetime.now()) yisheng.chufangs = [chufang] Session.add_all([yaowei, yaoxing, jingluo, yao, chufang, yao_chufang]) Session.add_all([yaowei2, yaoxing2, jingluo2, yao2, yao_chufang2]) Session.add(dizhi) Session.add(bingren) Session.add(dizhi2) Session.add(danwei) Session.add(yisheng) Session.add(chufang_bingren) Session.commit() items = Session.query(BingRen).filter( BingRen.dianhua == "13673265899").first() self.assertEqual(items.dizhi.jiedao, u"湘潭县云湖桥镇北岸村道林组83号") items = Session.query(BingRen).join(DiZhi).filter( DiZhi.sheng == "湖南").first() self.assertEqual(items.dizhi.jiedao, u"湘潭县云湖桥镇北岸村道林组83号") items = Session.query(ChuFang).join(YiSheng).filter( YiSheng.xingming == "余浩").first() import pdb pdb.set_trace() self.assertEqual(len(items.yaoes), 2) self.assertEqual(items.yishengxm, "余浩") items = Session.query(Yao).all() items.extend(Session.query(YaoXing).all()) items.extend(Session.query(YaoWei).all()) items.extend(Session.query(JingLuo).all()) items.extend(Session.query(ChuFang).all()) items.extend(Session.query(BingRen).all()) items.extend(Session.query(YiSheng).all()) items.extend(Session.query(DanWei).all()) items.extend(Session.query(DiZhi).all()) for m in items: Session.delete(m) Session.commit()
def test_asso_chufang_bingren(self): from cms.db.orm import ChuFang,DanWei,\ BingRen,DiZhi,YiSheng,ChuFang_BingRen_Asso,YaoWei,YaoXing,JingLuo,Yao,Yao_ChuFang_Asso dizhi = DiZhi("中国", "湖南", "湘潭市", "湘潭县云湖桥镇北岸村道林组83号") bingren = BingRen('张三', 1, date(2015, 4, 2), '13673265899') bingren.dizhi = dizhi dizhi2 = DiZhi("中国", "湖北", "十堰市", "茅箭区施洋路83号") danwei = DanWei("任之堂") yisheng = YiSheng('余浩', 1, date(2015, 4, 2), '13673265859') danwei.yishengs = [yisheng] danwei.dizhi = dizhi2 yaowei = YaoWei("酸") yaoxing = YaoXing("寒") jingluo = JingLuo("足厥阴肝经") yao = Yao("白芍") chufang = ChuFang("桂枝汤") yao.yaowei = yaowei yao.yaoxing = yaoxing yao.guijing = [jingluo] yao_chufang = Yao_ChuFang_Asso(yao, chufang, 7, "加热稀粥") chufang_bingren = ChuFang_BingRen_Asso(bingren, chufang, datetime.now()) # many to many association table don't add to session # Session.add(Yao_ChuFang_Asso) # Session.add(ChuFang_BingRen_Asso) Session.add(yaowei) Session.add(yaoxing) Session.add(jingluo) Session.add(yao) Session.add(chufang) Session.add(yao_chufang) Session.add(dizhi) Session.add(bingren) Session.add(dizhi2) Session.add(danwei) Session.add(yisheng) Session.add(chufang_bingren) Session.commit() items = Session.query(BingRen).filter( BingRen.dianhua == "13673265899").first() self.assertEqual(items.dizhi.jiedao, u"湘潭县云湖桥镇北岸村道林组83号") items = Session.query(BingRen).join(DiZhi).filter( DiZhi.sheng == "湖南").first() self.assertEqual(items.dizhi.jiedao, u"湘潭县云湖桥镇北岸村道林组83号") items = Session.query(Yao).all() items.extend(Session.query(YaoXing).all()) items.extend(Session.query(YaoWei).all()) items.extend(Session.query(JingLuo).all()) items.extend(Session.query(ChuFang).all()) items.extend(Session.query(BingRen).all()) items.extend(Session.query(YiSheng).all()) items.extend(Session.query(DanWei).all()) items.extend(Session.query(DiZhi).all()) for m in items: Session.delete(m) Session.commit()