示例#1
0
    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()
示例#2
0
    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()
示例#3
0
    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)
示例#4
0
    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()
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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()
示例#8
0
    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()
示例#9
0
    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()
示例#10
0
文件: dataset.py 项目: Guilucand/cms
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)
示例#11
0
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)
示例#12
0
    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()
示例#13
0
    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()