예제 #1
0
 def setUp(self):
     self.currentdir = os.path.abspath(os.curdir)
     self.testdir = os.path.join(self.currentdir, "tests")
     self.assetdir = os.path.join(self.testdir, "assets")
     self.consMaker = PrimitiveMaker("constant string")
     self.constrMaker = PrimitiveMaker("constraint string")
     self.nnmaker = PrimitiveMaker("non numeric string")
예제 #2
0
 def test_primitive_maker_choice(self):
     check = False
     try:
         pmaker = PrimitiveMaker("weird choice")
         pmaker.make(mystr="my string")
     except ValueError:
         check = True
     self.assertEqual(check, True)
예제 #3
0
 def test_constant_string(self):
     "test for constant string primitive"
     pmaker = PrimitiveMaker("constant string")
     myconstr1 = pmaker.make(mystr="my true constant string and unicode š")
     myconstr2 = pmaker.make(mystr="my true constant string and unicode š")
     myconstr3 = pmaker.make(mystr="my true constant string and unicode ḫ")
     self.assertEqual(True, myconstr1.isValid())
     self.assertEqual(False, myconstr1 == myconstr3)
     self.assertEqual(True, myconstr1 == myconstr2)
예제 #4
0
 def from_element(cls, element: etree.Element):
     ""
     elclass = element.get("class")
     eltag = element.tag
     cls.check_value_error(elclass, "NonNumericString", "Given element class: ")
     cls.check_value_error(eltag, "primitive", "Given element tag: ")
     cstr = element.text
     constr = cls.text_to_constant_string(cstr)
     maker = PrimitiveMaker("non numeric string")
     return maker.make(mystr=constr)
예제 #5
0
        def from_dict(cls, cdict: dict):
            "make object from given dict"
            objclass = cdict.get("class", "")
            objtype = cdict.get("type", "")
            cls.check_value_error(objclass, "NonNumericString", "Given object class: ")
            cls.check_value_error(objtype, "primitive", "Given object type: ")

            constr = cls.dict_to_constant_string(cdict["value"])
            maker = PrimitiveMaker("non numeric string")
            return maker.make(mystr=constr)
예제 #6
0
 def from_dict(cls, cdict: dict) -> ConstraintString:
     "transform dict to ConstraintString"
     objclass = cdict.get("class", "")
     objtype = cdict.get("type", "")
     cls.check_value_error(objtype, "primitive", "Given object type: ")
     cls.check_value_error(objclass, "ConstraintString", "Given object class: ")
     myfn = bytes.fromhex(cdict["constraint"])
     myfnc = dill.loads(myfn)
     constrdict = cdict["value"]
     constr = cls.dict_to_constant_string(constrdict)
     maker = PrimitiveMaker("constraint string")
     return maker.make(mystr=constr, fnc=myfnc)
예제 #7
0
 def from_element(cls, el: etree.Element) -> ConstantString:
     "from element"
     elclass = el.get("class")
     cls.check_value_error(
         objval=elclass,
         wantedVal="ConstantString",
         messPrefix="Given tag class: ",
     )
     elstr = el.text
     maker = PrimitiveMaker("constant string")
     constr = maker.make(mystr=elstr)
     return constr
예제 #8
0
        def from_element(cls, element: etree.Element):
            ""
            elclass = element.get("class")
            eltag = element.tag
            cls.check_value_error(elclass, "ConstraintString", "Given element class: ")
            cls.check_value_error(eltag, "primitive", "Given element tag: ")

            myfn = bytes.fromhex(element.get("constraint"))
            myfn = dill.loads(myfn)
            cstr = element.text
            constr = cls.text_to_constant_string(cstr)
            maker = PrimitiveMaker("constraint string")
            return maker.make(mystr=constr, fnc=myfn)
예제 #9
0
 def from_dict(cls, cdict: dict) -> ConstantString:
     "render constant string from dict"
     objtype = cdict.get("type", "")
     objclass = cdict.get("class", "")
     cls.check_value_error(
         objtype, "primitive", messPrefix="Given object type: "
     )
     cls.check_value_error(
         objclass, "ConstantString", messPrefix="Given object class: "
     )
     maker = PrimitiveMaker("constant string")
     constr = maker.make(mystr=cdict["value"])
     return constr
예제 #10
0
class _ContainerXmlIo(_ContainerIo):
    "Container input output"
    cmaker = ContainerMaker("")
    pmaker = PrimitiveMaker("")
    primitiveIo = ConstantStringIo.getIoClass("xml")

    def __init__(self, container, containerType):
        super().__init__(container, containerType)

    @classmethod
    def element_to_dict(cls, el: etree.Element) -> dict:
        "transform element to dict"
        eldict = el.attrib
        eldict["text"] = el.text
        eldict["tag"] = el.tag
        return eldict

    @classmethod
    def unit_to_member(cls, el: etree.Element):
        "transform element to member"
        return cls.primitiveIo.from_element(el)

    def member_to_unit(self, member: ConstantString) -> etree.Element:
        "transform member to element"
        consio = self.primitiveIo(member)
        return consio.to_element()

    def member_to_dict(self, member: ConstantString) -> dict:
        "transform member to element"
        consio = self.primitiveIo(member)
        return consio.to_dict()
예제 #11
0
class _ContainerJsonIo(_ContainerIo):
    "Container input output json"
    cmaker = ContainerMaker("")
    pmaker = PrimitiveMaker("")
    primitiveIo = ConstantStringIo.getIoClass("json")

    def __init__(self, container, containerType):
        super().__init__(container, containerType)

    @classmethod
    def json_to_dict(cls, jsonstr: str) -> dict:
        return json.loads(jsonstr)

    def member_to_unit(self, member: ConstantString) -> dict:
        consio = self.primitiveIo(member)
        return consio.to_dict()

    @classmethod
    def unit_to_member(cls, cdict: dict):
        return cls.primitiveIo.from_dict(cdict)

    def to_json(self):
        return dict_dump(self.to_dict())

    def toJSON(self):
        return self.to_json()
예제 #12
0
    class XmlIo(_ContainerXmlIo):
        "pair xml io"

        cmaker = ContainerMaker("pair")
        pmaker = PrimitiveMaker(choice="constant string")
        primitiveIo = ConstantStringIo.getIoClass("xml")

        def __init__(self, pair):
            super().__init__(pair, Pair)

        def to_element(self):
            "transform pair to xml"
            str1 = self.container.arg1
            str2 = self.container.arg2
            el = etree.Element("pair")
            el.set("class", self.containerType.__name__)
            el1 = self.member_to_unit(str1)
            el2 = self.member_to_unit(str2)
            self.add_members_to_parent(el, [el1, el2])
            return el

        def to_dict(self) -> dict:
            "to dict pair"
            str1 = self.container.arg1
            str2 = self.container.arg2
            pdict = {}
            pdict["class"] = self.containerType.__name__
            pdict["type"] = "pair"
            member1 = self.member_to_dict(str1)
            member2 = self.member_to_dict(str2)
            pdict["members"] = []
            self.add_members_to_parent(pdict["members"], [member1, member2])
            return pdict

        @classmethod
        def from_element(cls, el: etree.Element):
            "Obtain pair from element"
            eltag = el.tag
            elclass = el.get("class")
            cls.check_value_error(eltag, "pair", "Given element tag: ")
            cls.check_value_error(elclass, "Pair", "Given element class: ")
            arg1 = cls.unit_to_member(el[0])
            arg2 = cls.unit_to_member(el[1])
            pair = cls.cmaker.make(arg1=arg1, arg2=arg2)
            return pair
예제 #13
0
 def test_primitive_maker_constant_string(self):
     pmaker = PrimitiveMaker("char")
     check = False
     try:
         pmaker.make_constant_string(1235)
     except TypeError:
         check = True
     self.assertTrue(check)
     check = False
     try:
         pmaker.make_constant_string(1235.05)
     except TypeError:
         check = True
     self.assertTrue(check)
     check = False
     try:
         pmaker.make_constant_string(True)
     except TypeError:
         check = True
     self.assertTrue(check)
예제 #14
0
    class JsonIo(_ContainerJsonIo):
        "pair json io"
        cmaker = ContainerMaker("pair")
        pmaker = PrimitiveMaker(choice="constant string")
        primitiveIo = ConstantStringIo.getIoClass("json")

        def __init__(self, pair):
            super().__init__(pair, Pair)

        def to_dict(self) -> dict:
            "to dict pair"
            str1 = self.container.arg1
            str2 = self.container.arg2
            pdict = {}
            pdict["class"] = self.containerType.__name__
            pdict["type"] = "pair"
            member1 = self.member_to_unit(str1)
            member2 = self.member_to_unit(str2)
            pdict["members"] = []
            self.add_members_to_parent(pdict["members"], [member1, member2])
            return pdict

        @classmethod
        def from_json(cls, jsonstr: str):
            "obtain pair from json object"
            objdict = json.loads(jsonstr)
            return cls.from_dict(objdict)

        @classmethod
        def from_dict(cls, cdict: dict):
            "obtain pair from dict"
            objtype = cdict.get("type", "")
            objclass = cdict.get("class", "")
            cls.check_value_error(objtype, "pair", "Given object type: ")
            cls.check_value_error(objclass, "Pair", "Given object class: ")
            members = cdict["members"]
            member1 = cls.unit_to_member(members[0])
            member2 = cls.unit_to_member(members[1])
            pair = cls.cmaker.make(arg1=member1, arg2=member2)
            return pair
예제 #15
0
class TestContainer(unittest.TestCase):
    "test container.py"

    def setUp(self):
        self.currentdir = os.path.abspath(os.curdir)
        self.testdir = os.path.join(self.currentdir, "tests")
        self.assetdir = os.path.join(self.testdir, "assets")
        self.consMaker = PrimitiveMaker("constant string")
        self.constrMaker = PrimitiveMaker("constraint string")
        self.nnmaker = PrimitiveMaker("non numeric string")

    def test_pair(self):
        pmaker = ContainerMaker("pair")
        mystr1 = self.consMaker.make(mystr="mystr1")
        mystr2 = self.nnmaker.from_string(mystr="mystr2")
        mystr3 = self.consMaker.make(mystr="mystr3")
        check = True
        try:
            pair = pmaker.make(arg1=mystr1, arg2=mystr2)
        except ValueError or TypeError:
            check = False
        self.assertTrue(check, "either value or type error triggered")
        check = False
        try:
            pair = pmaker.make(arg1=mystr1, arg2=mystr3)
        except ValueError or TypeError:
            check = True
        self.assertTrue(check, "either value or type error should have been triggered")

    def test_array(self):
        pmaker = ContainerMaker("array")
        mystr1 = self.consMaker.make(mystr="mystr1")
        mystr2 = self.nnmaker.from_string(mystr="mystr2")
        mystr3 = self.consMaker.make(mystr="mystr3")
        check = True
        try:
            arr = pmaker.make(elements=[mystr1, mystr3])
        except ValueError or TypeError:
            check = False
        self.assertTrue(check, "either value or type error triggered")
        check = False
        try:
            arr = pmaker.make(elements=[mystr1, mystr2])
        except ValueError or TypeError:
            check = True
        self.assertTrue(check, "either value or type error should have been triggered")
예제 #16
0
    def test_primitive_maker_from_str(self):
        pmaker = PrimitiveMaker("constant string")
        cmaker = PrimitiveMaker("constraint string")
        check = True
        try:
            constr = pmaker.from_string(mystr="a str")
        except ValueError or TypeError:
            check = False
        self.assertTrue(check)

        def lfn(x):
            return x.constr.islower()

        check = True
        try:
            constr = cmaker.from_string(mystr="another str", fnc=lfn)
        except ValueError or TypeError:
            check = False
        self.assertTrue(check)
예제 #17
0
    def test_constraint_string(self):
        pmaker = PrimitiveMaker("constant string")

        def lfn(x: ConstantString):
            return x.constr.islower()

        costr1 = pmaker.make(mystr="my true string")
        costr2 = pmaker.make(mystr="MY False String")
        cstr1 = pmaker.from_type(primitiveType=ConstraintString,
                                 mystr=costr1,
                                 fnc=lfn)
        check = False
        try:
            cstr2 = pmaker.from_type(primitiveType=ConstraintString,
                                     mystr=costr2,
                                     fnc=lfn)
        except ValueError:
            check = True

        self.assertEqual(True, cstr1.isValid())
        self.assertEqual(True, check)
예제 #18
0
 def text_to_constant_string(text: str) -> ConstantString:
     "transform string to constant string"
     maker = PrimitiveMaker("constant string")
     return maker.make(mystr=text)
예제 #19
0
    def test_nonnumeric_string(self):
        pmaker = PrimitiveMaker("constant string")
        costr1 = pmaker.make(mystr="my true string")
        costr2 = pmaker.make(mystr="1 my another true string 1")
        costr3 = pmaker.make(mystr="123")
        costr4 = pmaker.make(mystr="123.45")
        costr5 = pmaker.make(mystr="123j")
        costr6 = pmaker.make(mystr="123/12335")

        pmaker = PrimitiveMaker("non numeric string")
        cstr1 = pmaker.make(mystr=costr1)
        cstr2 = pmaker.make(mystr=costr2)
        check = False
        try:
            cstr3 = pmaker.make(mystr=costr3)
        except ValueError:
            check = True
        self.assertEqual(True, check)
        check = False
        try:
            cstr4 = pmaker.make(mystr=costr4)
        except ValueError:
            check = True
        self.assertEqual(True, check)
        check = False
        try:
            cstr5 = pmaker.make(mystr=costr5)
        except ValueError:
            check = True
        self.assertEqual(True, check)
        check = False
        try:
            cstr6 = pmaker.make(mystr=costr6)
        except ValueError:
            check = True
        self.assertEqual(True, check)
예제 #20
0
    def setUp(self):
        "setup small data"

        def lfn(x: ConstantString):
            return x.constr.islower()

        pmakerc = PrimitiveMaker("constraint string")
        pmakercons = PrimitiveMaker("constant string")
        nnmaker = PrimitiveMaker("non numeric string")
        cmaker = ContainerMaker
        self.constrio = ConstraintStringIo
        self.consio = ConstantStringIo

        self.mycstr = pmakerc.from_string(mystr="my valid constraint string",
                                          fnc=lfn)
        self.myfn = dill.dumps(self.mycstr.fn)
        self.mynnstr = nnmaker.from_string(mystr="my valid non numeric string")
        self.mynnfn = dill.dumps(self.mynnstr.fn)
        self.parg1 = pmakercons.make(mystr="mystr1")
        self.parg2 = pmakercons.make(mystr="mystr2")
        self.pair = cmaker.from_type(objType=Pair,
                                     arg1=self.parg1,
                                     arg2=self.parg2)
        mystr1 = pmakerc.from_string(mystr="my true string", fnc=lfn)
        mystr2 = pmakerc.from_string(mystr="my another true string", fnc=lfn)
        self.scpair1 = cmaker.from_type(objType=SingleConstraintPair,
                                        arg1=mystr1,
                                        arg2=mystr2)