Code review for BCFXML v3 Markup.xsd implementation with TestPrab

This commit is contained in:
Dion Moult
2021-05-25 18:44:11 +10:00
parent 41bdeea981
commit 96465bed8f
3 changed files with 39 additions and 22 deletions
+6
View File
@@ -92,6 +92,12 @@ class BcfXml:
subdirs = dirnames subdirs = dirnames
break break
for subdir in subdirs: for subdir in subdirs:
try:
uuid.UUID(subdir)
except ValueError:
continue
if not os.path.exists(os.path.join(self.filepath, subdir, "markup.bcf")):
continue
self.topics[subdir] = self.get_topic(subdir) self.topics[subdir] = self.get_topic(subdir)
return self.topics return self.topics
+31 -20
View File
@@ -86,6 +86,12 @@ class BcfXml:
subdirs = dirnames subdirs = dirnames
break break
for subdir in subdirs: for subdir in subdirs:
try:
uuid.UUID(subdir)
except ValueError:
continue
if not os.path.exists(os.path.join(self.filepath, subdir, "markup.bcf")):
continue
self.topics[subdir] = self.get_topic(subdir) self.topics[subdir] = self.get_topic(subdir)
return self.topics return self.topics
@@ -95,7 +101,7 @@ class BcfXml:
return return
header = bcf.v3.data.Header() header = bcf.v3.data.Header()
if data["Header"].get("Files"): if data["Header"].get("Files"):
for item in data["Header"]["Files"]["File"]: for item in data["Header"]["Files"].get("File", []):
header_file = bcf.v3.data.HeaderFile() header_file = bcf.v3.data.HeaderFile()
optional_keys = { optional_keys = {
"filename": "Filename", "filename": "Filename",
@@ -133,8 +139,6 @@ class BcfXml:
optional_keys = { optional_keys = {
"priority": "Priority", "priority": "Priority",
"index": "Index", "index": "Index",
"labels": "Labels",
"reference_links": "ReferenceLink",
"modified_date": "ModifiedDate", "modified_date": "ModifiedDate",
"modified_author": "ModifiedAuthor", "modified_author": "ModifiedAuthor",
"due_date": "DueDate", "due_date": "DueDate",
@@ -147,6 +151,12 @@ class BcfXml:
if value in data["Topic"]: if value in data["Topic"]:
setattr(topic, key, data["Topic"][value]) setattr(topic, key, data["Topic"][value])
if "ReferenceLinks" in data["Topic"]:
topic.reference_links.extend(data["Topic"]["ReferenceLinks"].get("ReferenceLink", []))
if "Labels" in data["Topic"]:
topic.labels.extend(data["Topic"]["Labels"].get("Label", []))
if "BimSnippet" in data["Topic"]: if "BimSnippet" in data["Topic"]:
bim_snippet = bcf.v3.data.BimSnippet() bim_snippet = bcf.v3.data.BimSnippet()
keys = { keys = {
@@ -159,8 +169,9 @@ class BcfXml:
if value in data["Topic"]["BimSnippet"]: if value in data["Topic"]["BimSnippet"]:
setattr(bim_snippet, key, data["Topic"]["BimSnippet"][value]) setattr(bim_snippet, key, data["Topic"]["BimSnippet"][value])
topic.bim_snippet = bim_snippet topic.bim_snippet = bim_snippet
if data["Topic"].get("DocumentReferences"): if data["Topic"].get("DocumentReferences"):
for item in data["Topic"]["DocumentReferences"]["DocumentReference"]: for item in data["Topic"]["DocumentReferences"].get("DocumentReference", []):
document_reference = bcf.v3.data.DocumentReference() document_reference = bcf.v3.data.DocumentReference()
keys = { keys = {
"document_guid": "DocumentGuid", "document_guid": "DocumentGuid",
@@ -172,8 +183,9 @@ class BcfXml:
if value in item: if value in item:
setattr(document_reference, key, item[value]) setattr(document_reference, key, item[value])
topic.document_references.append(document_reference) topic.document_references.append(document_reference)
if data["Topic"].get("RelatedTopics"): if data["Topic"].get("RelatedTopics"):
for item in data["Topic"]["RelatedTopics"]["RelatedTopic"]: for item in data["Topic"]["RelatedTopics"].get("RelatedTopic", []):
related_topic = bcf.v3.data.RelatedTopic() related_topic = bcf.v3.data.RelatedTopic()
related_topic.guid = item["@Guid"] related_topic.guid = item["@Guid"]
topic.related_topics.append(related_topic) topic.related_topics.append(related_topic)
@@ -276,16 +288,15 @@ class BcfXml:
with open(os.path.join(self.filepath, topic.guid, "markup.bcf"), "wb") as f: with open(os.path.join(self.filepath, topic.guid, "markup.bcf"), "wb") as f:
f.write(self.document.toprettyxml(encoding="utf-8")) f.write(self.document.toprettyxml(encoding="utf-8"))
def write_document_references(self, reference, root): def write_document_references(self, references, root):
for reference in references:
for refer in reference: document_reference_el = self._create_element(root, "DocumentReference", {"Guid": reference.guid})
document_reference_el = self._create_element(root, "DocumentReference", {"Guid": refer.guid}) if reference.document_guid:
if refer.document_guid: self._create_element(document_reference_el, "DocumentGuid", text=reference.document_guid)
self._create_element(document_reference_el, "DocumentGuid", text=refer.document_guid) elif reference.url:
if refer.url: self._create_element(document_reference_el, "Url", text=reference.url)
self._create_element(document_reference_el, "Url", text=refer.url) if reference.description:
if refer.description: self._create_element(document_reference_el, "Description", text=reference.description)
self._create_element(document_reference_el, "Description", text=refer.description)
def write_header(self, header, root): def write_header(self, header, root):
if not header or not header.files: if not header or not header.files:
@@ -615,10 +626,10 @@ class BcfXml:
def get_comments(self, guid): def get_comments(self, guid):
comments = {} comments = {}
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd") if "Comments" not in data["Topics"]:
if "Comment" not in data:
return comments return comments
for item in data["Topic"]["Comments"]["Comment"]: data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd")
for item in data["Topic"]["Comments"].get("Comment", []):
comment = bcf.v3.data.Comment() comment = bcf.v3.data.Comment()
mandatory_keys = { mandatory_keys = {
"guid": "@Guid", "guid": "@Guid",
@@ -645,9 +656,9 @@ class BcfXml:
def get_viewpoints(self, guid): def get_viewpoints(self, guid):
viewpoints = {} viewpoints = {}
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd") if "Viewpoints" not in data["Topic"]:
if "Viewpoints" not in data:
return viewpoints return viewpoints
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd")
for item in data["Topic"]["Viewpoints"]: for item in data["Topic"]["Viewpoints"]:
viewpoint = self.get_viewpoint(item, guid) viewpoint = self.get_viewpoint(item, guid)
viewpoints[viewpoint.guid] = viewpoint viewpoints[viewpoint.guid] = viewpoint
+2 -2
View File
@@ -16,7 +16,7 @@ class DocumentReference:
def __init__(self): def __init__(self):
self.description = None self.description = None
self.document_guid = None self.document_guid = None
self.url = False self.url = None
self.guid = None self.guid = None
@@ -178,4 +178,4 @@ class Viewpoint:
self.perspective_camera = None self.perspective_camera = None
self.lines = [] self.lines = []
self.clipping_planes = [] self.clipping_planes = []
self.bitmaps = [] self.bitmaps = []