You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

pymantic

Package Overview
Dependencies
Maintainers
2
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pymantic - pypi Package Compare versions

Comparing version
0.2.2
to
0.2.3
+1
-1
PKG-INFO
Metadata-Version: 2.1
Name: pymantic
Version: 0.2.2
Version: 0.2.3
Summary: Semantic Web and RDF library for Python

@@ -5,0 +5,0 @@ Home-page: https://github.com/norcalrdf/pymantic/

Metadata-Version: 2.1
Name: pymantic
Version: 0.2.2
Version: 0.2.3
Summary: Semantic Web and RDF library for Python

@@ -5,0 +5,0 @@ Home-page: https://github.com/norcalrdf/pymantic/

#
version = '0.2.2'
version = '0.2.3'
release = version

@@ -416,25 +416,31 @@ __all__ = ['Triple', 'Quad', 'q_as_t', 't_as_q', 'Literal', 'NamedNode',

else: # s, p, ?var
for triple in itervalues(self._spo[subject][predicate]):
yield triple
if subject in self._spo and predicate in self._spo[subject]:
for triple in itervalues(self._spo[subject][predicate]):
yield triple
else: # s, ?var, ???
if object: # s, ?var, o
for triple in itervalues(self._osp[object][subject]):
yield triple
if object in self._osp and subject in self._osp[object]:
for triple in itervalues(self._osp[object][subject]):
yield triple
else: # s, ?var, ?var
for predicate in self._spo[subject]:
for triple in \
itervalues(self._spo[subject][predicate]):
yield triple
if subject in self._spo:
for predicate in self._spo[subject]:
for triple in \
itervalues(self._spo[subject][predicate]):
yield triple
elif predicate: # ?var, p, ???
if object: # ?var, p, o
for triple in itervalues(self._pos[predicate][object]):
yield triple
else: # ?var, p, ?var
for object in self._pos[predicate]:
if predicate in self._pos and object in self._pos[predicate]:
for triple in itervalues(self._pos[predicate][object]):
yield triple
else: # ?var, p, ?var
if predicate in self._pos:
for object in self._pos[predicate]:
for triple in itervalues(self._pos[predicate][object]):
yield triple
elif object: # ?var, ?var, o
for subject in self._osp[object]:
for triple in itervalues(self._osp[object][subject]):
yield triple
if object in self._osp:
for subject in self._osp[object]:
for triple in itervalues(self._osp[object][subject]):
yield triple
else:

@@ -441,0 +447,0 @@ for triple in self._triples:

@@ -64,8 +64,13 @@ from collections import OrderedDict

def turtle_repr(node, profile, name_map, bnode_name_maker):
def turtle_repr(node, profile, name_map, bnode_name_maker, base=None):
"""Turn a node in an RDF graph into its turtle representation."""
if node.interfaceName == 'NamedNode':
name = profile.prefixes.shrink(node)
if base and name.startswith(base):
if base.endswith("#"):
name = '<' + text_type(name.replace(base, "#")) + '>'
else:
name = '<' + text_type(name.replace(base, "")) + '>'
if name == node:
name = '<' + text_type(node) + '>'
name = '<' + text_type(name) + '>'
else:

@@ -125,3 +130,3 @@ escape_prefix_local(name)

name_maker = lambda n: turtle_repr(n, profile, name_map, bnode_name_maker)
name_maker = lambda n: turtle_repr(n, profile, name_map, bnode_name_maker, base)

@@ -128,0 +133,0 @@ from pymantic.rdf import List

@@ -88,2 +88,21 @@ from unittest import TestCase

def test_named_node_with_hash_base(self):
node = self.primitives.NamedNode('https://example.com/foo#bar')
name = self.turtle_repr(node = node, profile = self.profile, name_map = None, bnode_name_maker = None,
base='https://example.com/foo#')
self.assertEqual(name, '<#bar>')
def test_named_node_with_path_base(self):
node = self.primitives.NamedNode('https://example.com/foo')
name = self.turtle_repr(node = node, profile = self.profile, name_map = None, bnode_name_maker = None,
base='https://example.com/')
self.assertEqual(name, '<foo>')
def test_named_node_with_multi_path_base(self):
node = self.primitives.NamedNode('https://example.com/foo/bar')
name = self.turtle_repr(node = node, profile = self.profile, name_map = None, bnode_name_maker = None,
base='https://example.com/')
self.assertEqual(name, '<foo/bar>')
class TestTurtleSerializer(TestCase):

@@ -129,2 +148,66 @@ def setUp(self):

def testBaseSerialization(self):
basic_turtle = """@prefix dc: <http://purl.org/dc/terms/> .
@prefix example: <http://example.com/> .
example:foo dc:title "Foo" .
example:bar dc:title "Bar" .
example:baz dc:subject example:foo ."""
graph = self.turtle_parser.parse(basic_turtle)
f = cStringIO()
self.profile.setPrefix('dc', self.primitives.NamedNode('http://purl.org/dc/terms/'))
self.serialize_turtle(
graph = graph, f = f, profile = self.profile,
base = 'http://example.com/',
)
f.seek(0)
graph2 = self.turtle_parser.parse(f.read())
f.seek(0)
self.assertEqual(f.read().strip(), """@base <http://example.com/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix dc: <http://purl.org/dc/terms/> .
<bar> dc:title "Bar" ;
.
<baz> dc:subject <foo> ;
.
<foo> dc:title "Foo" ;
.
""".strip())
def testBaseAndPrefixSerialization(self):
basic_turtle = """@prefix dc: <http://purl.org/dc/terms/> .
@prefix example: <http://example.com/> .
example:foo dc:title "Foo" .
example:bar dc:title "Bar" .
example:baz dc:subject example:foo ."""
graph = self.turtle_parser.parse(basic_turtle)
f = cStringIO()
self.profile.setPrefix('ex', self.primitives.NamedNode('http://example.com/'))
self.profile.setPrefix('dc', self.primitives.NamedNode('http://purl.org/dc/terms/'))
self.serialize_turtle(
graph = graph, f = f, profile = self.profile,
base = 'http://example.com/',
)
f.seek(0)
graph2 = self.turtle_parser.parse(f.read())
f.seek(0)
self.assertEqual(f.read().strip(), """@base <http://example.com/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ex: <http://example.com/> .
@prefix dc: <http://purl.org/dc/terms/> .
ex:bar dc:title "Bar" ;
.
ex:baz dc:subject ex:foo ;
.
ex:foo dc:title "Foo" ;
.
""".strip())
def testMultiplePredicates(self):

@@ -131,0 +214,0 @@ basic_turtle = """@prefix dc: <http://purl.org/dc/terms/> .