Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/rdflib/plugin.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:32:28 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:d30785e31577 | 1:56ad4e20f292 |
---|---|
1 """ | |
2 Plugin support for rdf. | |
3 | |
4 There are a number of plugin points for rdf: parser, serializer, | |
5 store, query processor, and query result. Plugins can be registered | |
6 either through setuptools entry_points or by calling | |
7 rdf.plugin.register directly. | |
8 | |
9 If you have a package that uses a setuptools based setup.py you can add the | |
10 following to your setup:: | |
11 | |
12 entry_points = { | |
13 'rdf.plugins.parser': [ | |
14 'nt = rdf.plugins.parsers.nt:NTParser', | |
15 ], | |
16 'rdf.plugins.serializer': [ | |
17 'nt = rdf.plugins.serializers.NTSerializer:NTSerializer', | |
18 ], | |
19 } | |
20 | |
21 See the `setuptools dynamic discovery of services and plugins`__ for more | |
22 information. | |
23 | |
24 .. __: http://peak.telecommunity.com/DevCenter/setuptools#dynamic-discovery-of-services-and-plugins | |
25 | |
26 """ | |
27 | |
28 from rdflib.store import Store | |
29 from rdflib.parser import Parser | |
30 from rdflib.serializer import Serializer | |
31 from rdflib.query import ResultParser, ResultSerializer, \ | |
32 Processor, Result, UpdateProcessor | |
33 from rdflib.exceptions import Error | |
34 | |
35 __all__ = [ | |
36 'register', 'get', 'plugins', 'PluginException', 'Plugin', 'PKGPlugin'] | |
37 | |
38 entry_points = {'rdf.plugins.store': Store, | |
39 'rdf.plugins.serializer': Serializer, | |
40 'rdf.plugins.parser': Parser, | |
41 'rdf.plugins.resultparser': ResultParser, | |
42 'rdf.plugins.resultserializer': ResultSerializer, | |
43 'rdf.plugins.queryprocessor': Processor, | |
44 'rdf.plugins.queryresult': Result, | |
45 'rdf.plugins.updateprocessor': UpdateProcessor | |
46 } | |
47 | |
48 _plugins = {} | |
49 | |
50 | |
51 class PluginException(Error): | |
52 pass | |
53 | |
54 | |
55 class Plugin(object): | |
56 | |
57 def __init__(self, name, kind, module_path, class_name): | |
58 self.name = name | |
59 self.kind = kind | |
60 self.module_path = module_path | |
61 self.class_name = class_name | |
62 self._class = None | |
63 | |
64 def getClass(self): | |
65 if self._class is None: | |
66 module = __import__(self.module_path, globals(), locals(), [""]) | |
67 self._class = getattr(module, self.class_name) | |
68 return self._class | |
69 | |
70 | |
71 class PKGPlugin(Plugin): | |
72 | |
73 def __init__(self, name, kind, ep): | |
74 self.name = name | |
75 self.kind = kind | |
76 self.ep = ep | |
77 self._class = None | |
78 | |
79 def getClass(self): | |
80 if self._class is None: | |
81 self._class = self.ep.load() | |
82 return self._class | |
83 | |
84 | |
85 def register(name, kind, module_path, class_name): | |
86 """ | |
87 Register the plugin for (name, kind). The module_path and | |
88 class_name should be the path to a plugin class. | |
89 """ | |
90 p = Plugin(name, kind, module_path, class_name) | |
91 _plugins[(name, kind)] = p | |
92 | |
93 | |
94 def get(name, kind): | |
95 """ | |
96 Return the class for the specified (name, kind). Raises a | |
97 PluginException if unable to do so. | |
98 """ | |
99 try: | |
100 p = _plugins[(name, kind)] | |
101 except KeyError: | |
102 raise PluginException( | |
103 "No plugin registered for (%s, %s)" % (name, kind)) | |
104 return p.getClass() | |
105 | |
106 | |
107 try: | |
108 from pkg_resources import iter_entry_points | |
109 except ImportError: | |
110 pass # TODO: log a message | |
111 else: | |
112 # add the plugins specified via pkg_resources' EntryPoints. | |
113 for entry_point, kind in entry_points.items(): | |
114 for ep in iter_entry_points(entry_point): | |
115 _plugins[(ep.name, kind)] = PKGPlugin(ep.name, kind, ep) | |
116 | |
117 | |
118 def plugins(name=None, kind=None): | |
119 """ | |
120 A generator of the plugins. | |
121 | |
122 Pass in name and kind to filter... else leave None to match all. | |
123 """ | |
124 for p in list(_plugins.values()): | |
125 if (name is None or name == p.name) and ( | |
126 kind is None or kind == p.kind): | |
127 yield p | |
128 | |
129 register( | |
130 'default', Store, | |
131 'rdflib.plugins.memory', 'IOMemory') | |
132 register( | |
133 'IOMemory', Store, | |
134 'rdflib.plugins.memory', 'IOMemory') | |
135 register( | |
136 'Auditable', Store, | |
137 'rdflib.plugins.stores.auditable', 'AuditableStore') | |
138 register( | |
139 'Concurrent', Store, | |
140 'rdflib.plugins.stores.concurrent', 'ConcurrentStore') | |
141 register( | |
142 'Sleepycat', Store, | |
143 'rdflib.plugins.sleepycat', 'Sleepycat') | |
144 register( | |
145 'SPARQLStore', Store, | |
146 'rdflib.plugins.stores.sparqlstore', 'SPARQLStore') | |
147 register( | |
148 'SPARQLUpdateStore', Store, | |
149 'rdflib.plugins.stores.sparqlstore', 'SPARQLUpdateStore') | |
150 | |
151 register( | |
152 'application/rdf+xml', Serializer, | |
153 'rdflib.plugins.serializers.rdfxml', 'XMLSerializer') | |
154 register( | |
155 'xml', Serializer, | |
156 'rdflib.plugins.serializers.rdfxml', 'XMLSerializer') | |
157 register( | |
158 'text/n3', Serializer, | |
159 'rdflib.plugins.serializers.n3', 'N3Serializer') | |
160 register( | |
161 'n3', Serializer, | |
162 'rdflib.plugins.serializers.n3', 'N3Serializer') | |
163 register( | |
164 'text/turtle', Serializer, | |
165 'rdflib.plugins.serializers.turtle', 'TurtleSerializer') | |
166 register( | |
167 'turtle', Serializer, | |
168 'rdflib.plugins.serializers.turtle', 'TurtleSerializer') | |
169 register( | |
170 'ttl', Serializer, | |
171 'rdflib.plugins.serializers.turtle', 'TurtleSerializer') | |
172 register( | |
173 'trig', Serializer, | |
174 'rdflib.plugins.serializers.trig', 'TrigSerializer') | |
175 register( | |
176 'application/n-triples', Serializer, | |
177 'rdflib.plugins.serializers.nt', 'NTSerializer') | |
178 register( | |
179 'ntriples', Serializer, | |
180 'rdflib.plugins.serializers.nt', 'NTSerializer') | |
181 register( | |
182 'nt', Serializer, | |
183 'rdflib.plugins.serializers.nt', 'NTSerializer') | |
184 register( | |
185 'nt11', Serializer, | |
186 'rdflib.plugins.serializers.nt', 'NT11Serializer') | |
187 | |
188 register( | |
189 'pretty-xml', Serializer, | |
190 'rdflib.plugins.serializers.rdfxml', 'PrettyXMLSerializer') | |
191 register( | |
192 'trix', Serializer, | |
193 'rdflib.plugins.serializers.trix', 'TriXSerializer') | |
194 register( | |
195 'application/trix', Serializer, | |
196 'rdflib.plugins.serializers.trix', 'TriXSerializer') | |
197 register( | |
198 'application/n-quads', Serializer, | |
199 'rdflib.plugins.serializers.nquads', 'NQuadsSerializer') | |
200 register( | |
201 'nquads', Serializer, | |
202 'rdflib.plugins.serializers.nquads', 'NQuadsSerializer') | |
203 | |
204 register( | |
205 'application/rdf+xml', Parser, | |
206 'rdflib.plugins.parsers.rdfxml', 'RDFXMLParser') | |
207 register( | |
208 'xml', Parser, | |
209 'rdflib.plugins.parsers.rdfxml', 'RDFXMLParser') | |
210 register( | |
211 'text/n3', Parser, | |
212 'rdflib.plugins.parsers.notation3', 'N3Parser') | |
213 register( | |
214 'n3', Parser, | |
215 'rdflib.plugins.parsers.notation3', 'N3Parser') | |
216 register( | |
217 'text/turtle', Parser, | |
218 'rdflib.plugins.parsers.notation3', 'TurtleParser') | |
219 register( | |
220 'turtle', Parser, | |
221 'rdflib.plugins.parsers.notation3', 'TurtleParser') | |
222 register( | |
223 'ttl', Parser, | |
224 'rdflib.plugins.parsers.notation3', 'TurtleParser') | |
225 register( | |
226 'application/n-triples', Parser, | |
227 'rdflib.plugins.parsers.nt', 'NTParser') | |
228 register( | |
229 'ntriples', Parser, | |
230 'rdflib.plugins.parsers.nt', 'NTParser') | |
231 register( | |
232 'nt', Parser, | |
233 'rdflib.plugins.parsers.nt', 'NTParser') | |
234 register( | |
235 'nt11', Parser, | |
236 'rdflib.plugins.parsers.nt', 'NTParser') | |
237 register( | |
238 'application/n-quads', Parser, | |
239 'rdflib.plugins.parsers.nquads', 'NQuadsParser') | |
240 register( | |
241 'nquads', Parser, | |
242 'rdflib.plugins.parsers.nquads', 'NQuadsParser') | |
243 register( | |
244 'application/trix', Parser, | |
245 'rdflib.plugins.parsers.trix', 'TriXParser') | |
246 register( | |
247 'trix', Parser, | |
248 'rdflib.plugins.parsers.trix', 'TriXParser') | |
249 register( | |
250 'trig', Parser, | |
251 'rdflib.plugins.parsers.trig', 'TrigParser') | |
252 | |
253 # The basic parsers: RDFa (by default, 1.1), | |
254 # microdata, and embedded turtle (a.k.a. hturtle) | |
255 register( | |
256 'hturtle', Parser, | |
257 'rdflib.plugins.parsers.hturtle', 'HTurtleParser') | |
258 register( | |
259 'rdfa', Parser, | |
260 'rdflib.plugins.parsers.structureddata', 'RDFaParser') | |
261 register( | |
262 'mdata', Parser, | |
263 'rdflib.plugins.parsers.structureddata', 'MicrodataParser') | |
264 register( | |
265 'microdata', Parser, | |
266 'rdflib.plugins.parsers.structureddata', 'MicrodataParser') | |
267 # A convenience to use the RDFa 1.0 syntax (although the parse method can | |
268 # be invoked with an rdfa_version keyword, too) | |
269 register( | |
270 'rdfa1.0', Parser, | |
271 'rdflib.plugins.parsers.structureddata', 'RDFa10Parser') | |
272 # Just for the completeness, if the user uses this | |
273 register( | |
274 'rdfa1.1', Parser, | |
275 'rdflib.plugins.parsers.structureddata', 'RDFaParser') | |
276 # An HTML file may contain both microdata, rdfa, or turtle. If the user | |
277 # wants them all, the parser below simply invokes all: | |
278 register( | |
279 'html', Parser, | |
280 'rdflib.plugins.parsers.structureddata', 'StructuredDataParser') | |
281 # Some media types are also bound to RDFa | |
282 register( | |
283 'application/svg+xml', Parser, | |
284 'rdflib.plugins.parsers.structureddata', 'RDFaParser') | |
285 register( | |
286 'application/xhtml+xml', Parser, | |
287 'rdflib.plugins.parsers.structureddata', 'RDFaParser') | |
288 # 'text/html' media type should be equivalent to html: | |
289 register( | |
290 'text/html', Parser, | |
291 'rdflib.plugins.parsers.structureddata', 'StructuredDataParser') | |
292 | |
293 | |
294 register( | |
295 'sparql', Result, | |
296 'rdflib.plugins.sparql.processor', 'SPARQLResult') | |
297 register( | |
298 'sparql', Processor, | |
299 'rdflib.plugins.sparql.processor', 'SPARQLProcessor') | |
300 | |
301 register( | |
302 'sparql', UpdateProcessor, | |
303 'rdflib.plugins.sparql.processor', 'SPARQLUpdateProcessor') | |
304 | |
305 | |
306 register( | |
307 'xml', ResultSerializer, | |
308 'rdflib.plugins.sparql.results.xmlresults', 'XMLResultSerializer') | |
309 register( | |
310 'txt', ResultSerializer, | |
311 'rdflib.plugins.sparql.results.txtresults', 'TXTResultSerializer') | |
312 register( | |
313 'json', ResultSerializer, | |
314 'rdflib.plugins.sparql.results.jsonresults', 'JSONResultSerializer') | |
315 register( | |
316 'csv', ResultSerializer, | |
317 'rdflib.plugins.sparql.results.csvresults', 'CSVResultSerializer') | |
318 | |
319 register( | |
320 'xml', ResultParser, | |
321 'rdflib.plugins.sparql.results.xmlresults', 'XMLResultParser') | |
322 register( | |
323 'json', ResultParser, | |
324 'rdflib.plugins.sparql.results.jsonresults', 'JSONResultParser') | |
325 register( | |
326 'csv', ResultParser, | |
327 'rdflib.plugins.sparql.results.csvresults', 'CSVResultParser') | |
328 register( | |
329 'tsv', ResultParser, | |
330 'rdflib.plugins.sparql.results.tsvresults', 'TSVResultParser') |