From 44514d0f2d6b416ec449b4491c5cf19e363f9566 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Mon, 6 Jul 2015 15:08:59 +0100 Subject: schema: Consolidate URI-generation code in one place And a few other style fixes. Change-Id: I8ac937b742a5d6cd92ef5bf2af3e04f6c9f62ae1 --- schema/parse.py | 115 +++++++++++++++++++++++++++++++++++--------------------- 1 file 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, -- cgit v1.2.1