summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--schema/parse.py115
1 files changed, 73 insertions, 42 deletions
diff --git a/schema/parse.py b/schema/parse.py
index 64eebd01..c2f369fb 100644
--- a/schema/parse.py
+++ b/schema/parse.py
@@ -67,10 +67,45 @@ def get_name_from_morph_file(path):
return contents['name']
-# FIXME: get_uri_for_resource()
+# FIXME: can you use assignment instead of Resource.set ?
+def uriref_for_chunk(base_uri, chunk_name):
+ uriref = base_uri + 'chunks/' + chunk_name
+ return rdflib.URIRef(uriref)
+
+
+def uriref_for_chunk_reference(base_uri, stratum_name, chunk_name):
+ stratum_uriref = uriref_for_stratum(base_uri, stratum_name)
+ chunk_reference_uriref = stratum_uriref + '/chunk-refs/' + chunk_name
+ return rdflib.URIRef(chunk_reference_uriref)
+
+
+def uriref_for_cluster(base_uri, cluster_name):
+ uriref = base_uri + 'clusters/' + cluster_name
+ return rdflib.URIRef(uriref)
+
+
+def uriref_for_stratum(base_uri, stratum_name):
+ uriref = base_uri + 'strata/' + stratum_name
+ return rdflib.URIRef(uriref)
+
+
+def uriref_for_stratum_artifact(base_uri, stratum_name, artifact_name):
+ stratum_uriref = uriref_for_stratum(base_uri, stratum_name)
+ artifact_uriref = stratum_uriref + '/products/' + artifact_name
+ return rdflib.URIRef(artifact_uriref)
+
+
+def uriref_for_system(base_uri, system_name):
+ uriref = base_uri + 'systems/' + system_name
+ return rdflib.URIRef(uriref)
+
+
+def uriref_for_system_deployment(base_uri, cluster_name, label):
+ cluster_uriref = uriref_for_cluster(base_uri, cluster_name)
+ system_deployment_uriref = cluster_uriref + label
+ return rdflib.URIRef(system_deployment_uriref)
-# FIXME: can you use assignment instead of Resource.set ?
def load_all_morphologies(path='.'):
'''Load Baserock Definitions serialisation format V5 as an RDFLib 'graph'.
@@ -94,9 +129,8 @@ def load_all_morphologies(path='.'):
entity = None
if contents['kind'] == 'chunk':
- chunk_uri = base_uri + 'chunks/' + contents['name']
- entity = chunk = rdflib.resource.Resource(
- graph, rdflib.URIRef(chunk_uri))
+ chunk_uriref = uriref_for_chunk(base_uri, contents['name'])
+ entity = chunk = rdflib.resource.Resource(graph, chunk_uriref)
# FIXME: order is lost here !!!!!
if 'pre-configure-commands' in contents:
@@ -128,68 +162,66 @@ def load_all_morphologies(path='.'):
rdflib.Literal(contents['post-install-commands']))
elif contents['kind'] == 'stratum':
- stratum_uri = base_uri + 'strata/' + contents['name']
- entity = stratum = rdflib.resource.Resource(
- graph, rdflib.URIRef(stratum_uri))
+ stratum_name = contents['name']
+ stratum_uriref = uriref_for_stratum(base_uri, stratum_name)
+ entity = stratum = rdflib.resource.Resource(graph, stratum_uriref)
for entry in contents.get('build-depends', []):
build_dep_file = os.path.join(toplevel_path, entry['morph'])
build_dep_name = get_name_from_morph_file(build_dep_file)
- build_dep_uri = base_uri + 'strata/' + build_dep_name
- stratum.add(BASEROCK.hasBuildDependency,
- rdflib.URIRef(build_dep_uri))
+ build_dep_uriref = uriref_for_stratum(base_uri, build_dep_name)
+ stratum.add(BASEROCK.hasBuildDependency, build_dep_uriref)
for entry in contents.get('products', []):
- artifact_uri = stratum_uri + '/products/' + entry['artifact']
- artifact = rdflib.resource.Resource(
- graph, rdflib.URIRef(artifact_uri))
+ artifact_uri = uriref_for_stratum_artifact(
+ base_uri, stratum_name, entry['artifact'])
+ artifact = rdflib.resource.Resource(graph, artifact_uri)
# FIXME: order probably lost here
if 'includes' in entry:
artifact.set(BASEROCK.includes,
rdflib.Literal(entry['includes']))
stratum.add(BASEROCK.produces, artifact)
- chunk_refs = []
for entry in contents.get('chunks', []):
- chunk_ref_uri = stratum_uri + '/chunk-refs/' + entry['name']
- chunk_ref = rdflib.resource.Resource(
- graph, rdflib.URIRef(chunk_ref_uri))
-
if 'morph' in entry:
chunk_file = os.path.join(toplevel_path, entry['morph'])
chunk_name = get_name_from_morph_file(chunk_file)
if chunk_name != entry['name']:
warnings.warn(
"Chunk name %s in stratum %s doesn't match "
- "name from %s" % (entry['name'], stratum_uri,
+ "name from %s" % (entry['name'], stratum_uriref,
entry['morph']))
else:
chunk_name = entry['name']
- chunk_uri = base_uri + 'chunks/' + chunk_name
- chunk_ref.set(BASEROCK.refersToChunk, rdflib.URIRef(chunk_uri))
+ chunk_ref_uriref = uriref_for_chunk_reference(
+ base_uri, stratum_name, chunk_name)
+ chunk_ref = rdflib.resource.Resource(graph, chunk_ref_uriref)
+
+ chunk_uriref = uriref_for_chunk(base_uri, chunk_name)
+ chunk_ref.set(BASEROCK.refersToChunk, chunk_uriref)
chunk_ref.set(BASEROCK.repo, rdflib.Literal(entry['repo']))
chunk_ref.set(BASEROCK.ref, rdflib.Literal(entry['ref']))
if 'unpetrify-ref' in entry:
chunk_ref.set(BASEROCK.unpetrifyRef,
- rdflib.Literal(entry['unpetrify-ref']))
+ rdflib.Literal(entry['unpetrify-ref']))
chunk_ref.set(BASEROCK.buildMode,
- rdflib.Literal(entry.get('build-mode', 'normal')))
+ rdflib.Literal(entry.get('build-mode', 'normal')))
chunk_ref.set(BASEROCK.prefix,
- rdflib.Literal(entry.get('prefix', '/usr')))
+ rdflib.Literal(entry.get('prefix', '/usr')))
for entry_dep in entry.get('build-depends', []):
- build_dep_uri = stratum_uri + '/chunk-refs/' + entry_dep
+ build_dep_uriref = uriref_for_chunk_reference(
+ base_uri, stratum_name, entry_dep)
chunk_ref.set(BASEROCK.hasChunkBuildDependency,
- rdflib.URIRef(build_dep_uri))
+ build_dep_uriref)
stratum.add(BASEROCK.containsChunkReference, chunk_ref)
elif contents['kind'] == 'system':
- system_uri = base_uri + 'systems/' + contents['name']
- entity = system = rdflib.resource.Resource(
- graph, rdflib.URIRef(system_uri))
+ system_uriref = uriref_for_system(base_uri, contents['name'])
+ entity = system = rdflib.resource.Resource(graph, system_uriref)
system.set(BASEROCK.arch, rdflib.Literal(contents['arch']))
@@ -204,33 +236,32 @@ def load_all_morphologies(path='.'):
artifacts = ['%s-runtime' % entry['name'],
'%s-devel' % entry['name']]
for artifact in artifacts:
- artifact_uri = (base_uri + '/strata/' + entry['name'] +
- '/products/' + artifact)
+ artifact_uriref = uriref_for_stratum_artifact(
+ base_uri, entry['name'], artifact)
system.add(BASEROCK.containsStratumArtifact,
- rdflib.URIRef(artifact_uri))
+ artifact_uriref)
system.set(BASEROCK.hasConfigurationExtension, rdflib.Literal(
contents.get('configuration-extensions', [])))
elif contents['kind'] == 'cluster':
- cluster_uri = base_uri + 'clusters/' + contents['name']
- entity = cluster = rdflib.resource.Resource(
- graph, rdflib.URIRef(cluster_uri))
+ cluster_name = contents['name']
+ cluster_uriref = uriref_for_cluster(base_uri, cluster_name)
+ entity = cluster = rdflib.resource.Resource(graph, cluster_uriref)
- deployments = []
for entry in contents.get('systems', []):
system_morph_file = os.path.join(toplevel_path, entry['morph'])
system_name = get_name_from_morph_file(system_morph_file)
- system_uri = base_uri + 'systems/' + system_name
+ system_uriref = uriref_for_system(base_uri, system_name)
# FIXME: ignores deploy-defaults at present
for label, details in entry['deploy'].items():
- deployment_uri = cluster_uri + '/' + label
+ deployment_uriref = uriref_for_system_deployment(
+ base_uri, cluster_name, label)
deployment = rdflib.resource.Resource(
- graph, rdflib.URIRef(deployment_uri))
+ graph, deployment_uriref)
- deployment.set(BASEROCK.deploysSystem,
- rdflib.URIRef(system_uri))
+ deployment.set(BASEROCK.deploysSystem, system_uriref)
deployment.set(BASEROCK.hasLabel, rdflib.Literal(label))
deployment.set(BASEROCK.hasType,