Example #1
0
 def toElement(self):
     to_ret = Element("skiros:Parameter", self._key)
     to_ret.setProperty("rdfs:comment", self._description)
     to_ret.setProperty("skiros:ParameterType", self._param_type.value - 1)
     if (not self.dataTypeIs(Element)):
         to_ret.setProperty("skiros:DataType", self._data_type)
         if self.hasSpecifiedDefault():
             to_ret.setProperty("skiros:Default", self._default)
         if self.isSpecified():
             to_ret.setProperty("skiros:Value", self._values)
     else:
         to_ret.setProperty("skiros:DataType", self._default[0]._type)
         if self.isSpecified():
             for v in self._values:
                 if v._id != "":
                     to_ret.addRelation("-1", "skiros:hasValue", v._id)
     return to_ret
Example #2
0
    def get_individual(self, name, context_id=""):
        """
        @brief Builds an element from an individual

        @param context_id if defined look for the individual only in the context
        """
        subject = self.lightstring2uri(name)
        if not self.uri_exists(subject, context_id):
            raise Exception(
                "Element {} doesn't exist in ontology. Uri: {}. Context: {}.".
                format(name, subject, context_id))
        e = Element()
        for predicate, obj in self.ontology(context_id).predicate_objects(
                subject):
            if OWL.DatatypeProperty in self.ontology().objects(
                    predicate, RDF.type) or predicate == RDFS.comment:
                e.setProperty(self.uri2lightstring(predicate),
                              obj.value,
                              self.uri2lightstring(obj.datatype),
                              force_convertion=True)
            elif OWL.ObjectProperty in self.ontology().objects(
                    predicate, RDF.type):
                e.addRelation("-1", self.uri2lightstring(predicate),
                              self.uri2lightstring(obj))
            elif predicate == RDF.type and obj != OWL.NamedIndividual:
                e._type = self.uri2lightstring(str(obj))
            elif obj == OWL.NamedIndividual:
                pass
            elif predicate == RDFS.label:
                e._label = obj.value
            else:
                log.error(
                    "[get_individual]",
                    "Ignoring {}-{}-{}. Predicate is not defined in the ontology."
                    .format(name, self.uri2lightstring(predicate),
                            self.uri2lightstring(obj)))
        for subj, predicate in self.ontology(context_id).subject_predicates(
                subject):
            if (self.uri2lightstring(predicate) != "skiros:hasTemplate"):
                e.addRelation(self.uri2lightstring(subj),
                              self.uri2lightstring(predicate), "-1")
        self._add_reasoners_prop(e)
        return e
 def toElement(self):
     to_ret = Element(self._type)
     to_ret._label = self._label
     for _, p in self.params.items():
         if p.dataTypeIs(Element):
             to_ret.addRelation(self, "skiros:hasParam", p.toElement())
     for c in self._pre_conditions:
         to_ret.addRelation(self, "skiros:hasPreCondition", c.toElement())
     for c in self._hold_conditions:
         to_ret.addRelation(self, "skiros:hasHoldCondition", c.toElement())
     for c in self._post_conditions:
         to_ret.addRelation(self, "skiros:hasPostCondition", c.toElement())
     return to_ret
class TestWorldElement(unittest.TestCase):
    def setUp(self):
        self.e = Element()

    def test_element(self):
        e = Element()
        e.setProperty("Hello", float)
        e.setProperty("Hello", 0.0)
        self.assertEqual(e.getProperty("Hello").value, 0.0)

        e.getProperty("Hello").values = 1.0
        self.assertEqual(e.getProperty("Hello").values, [1.0])

        e.getProperty("Hello").value = 2.0
        self.assertEqual(e.getProperty("Hello").values, [2.0])

    def test_getIdNumber(self):
        msg = """
        getIdNumber should return -1 if element has no specified id"""
        self.assertEqual(-1, self.e.getIdNumber(), msg)

        msg = """
        getIdNumber should return the elements specified id"""
        self.e.setUri(4)
        self.assertEqual(4, self.e.getIdNumber(), msg)

    def test_getRelations(self):
        relations_list = [["1", "pred1", "2"], ["-1", "pred2", "3"]]
        self.e.addRelation(*relations_list[0])
        self.e.addRelation(*relations_list[1])

        msg = """
        getRelations with no argument should return all relations"""
        expected = self._relationsDefault(relations_list)
        self.assertEqual(expected, self.e.getRelations(), msg)

        msg = """
        getRelations should return a list of relations matching subj 
        pred and obj"""
        expected = self._relationsDefault(relations_list[:1])
        result = self.e.getRelations(*relations_list[0])
        self.assertEqual(expected, result, msg)

    def test_setRelation(self):
        relations_list = [["-1", "pred", "2"], ["1", "pred", "2"],
                          ["-1", "pred", "3"]]
        self.e.addRelation(*relations_list[0])
        self.e.addRelation(*relations_list[1])
        self.e.setRelation(*relations_list[2])
        msg = """
        When subj or obj are -1 setRelation should only overwrite
        previous relations which also have subj or obj as -1 and
        the same predicate"""
        expected = self._relationsDefault(relations_list[1:])
        self.assertEqual(expected, self.e.getRelations(), msg)

        msg = """
        setRelation should overwrite previous relations with same 
        predicate when subj or obj are not -1"""
        self.e.setRelation("1", "pred", "2")
        expected = [self._relationDefault("1", "pred", "2")]
        self.assertEqual(expected, self.e.getRelations(), msg)

    def test_addRelation(self):
        msg = """
        addRelation should have no effect if relation is already 
        added"""
        relations_list = [["1", "pred", "2"], [u"2", "pred", u"3"]]
        self.e.addRelation(*relations_list[0])
        self.e.addRelation(*relations_list[0])
        expected = self._relationsDefault(relations_list[:1])
        self.assertEqual(expected, self.e.getRelations(), msg)

        # test pyhton 2 compatibility
        msg = """
        addRelation should add the relation if subj and obj are unicode
        strings"""
        self.e.addRelation(*relations_list[1])
        expected = self._relationsDefault(relations_list)
        self.assertEqual(expected, self.e.getRelations())

    def test_hasProperty(self):
        e = Element()
        e.setProperty("Integer", "2", "xsd:int")
        self.assertEqual(False, e.hasProperty("NonExistingKey"))
        self.assertEqual(False, e.hasProperty("Integer", 1))
        self.assertEqual(True, e.hasProperty("Integer", 2))
        self.assertEqual(True, e.hasProperty("Integer"))
        e.setProperty("Type", int)
        self.assertEqual(False, e.hasProperty("Type", not_none=True))

    def test_setProperty(self):
        e = Element()
        e.setProperty("Integer", 1)
        self.assertEqual([1], e.getProperty("Integer").values)

        msg = """
        setProperty should convert when setting the property if 
        force_convertion is true"""
        e.setProperty("Integer", "2", force_convertion=True)
        self.assertEqual([2], e.getProperty("Integer").values, msg)

        msg = """
        setProperty should convert when setting the property if 
        value is a list and if force_convertion is true"""
        e.setProperty("Integer", ["1", "2"], force_convertion=True)
        self.assertEqual([1, 2], e.getProperty("Integer").values, msg)

        msg = """
        setProperty should convert unicode values to str before
        creating new property"""
        e.setProperty("strKey", u"a")
        self.assertEqual(str, type(e.getProperty("strKey").value), msg)

        msg = """
        setProperty should convert unicode values to str when setting
        the property"""
        e.setProperty("strKey", u"b")
        self.assertEqual(["b"], e.getProperty("strKey").values, msg)

    def test_appendProperty(self):
        e = Element()
        e.setProperty("Integer", 2, "xsd:int")
        self.assertEqual(2, e.getProperty("Integer").value)
        e.appendProperty("Integer", 3)
        self.assertEqual([2, 3], e.getProperty("Integer").values)

    def _hasRelations(self, element, relation_arg_list):
        for r in relation_arg_list:
            if not element.hasRelation(*r):
                return False
        return True

    # return a relation with state and abstract set to their default values
    def _relationDefault(self, subj, pred, obj):
        return {
            'src': subj,
            'dst': obj,
            'type': pred,
            'state': True,
            'abstract': False
        }

    # return a list of relations with state and abstract set to their
    # default values
    def _relationsDefault(self, relation_arg_list):
        return [self._relationDefault(*r) for r in relation_arg_list]