-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcatalogueIntegration.py
More file actions
136 lines (117 loc) · 5.15 KB
/
Copy pathcatalogueIntegration.py
File metadata and controls
136 lines (117 loc) · 5.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
from typing import List
from services import Logger
from addons import ArchSmith, ASReport
from schemas import Batch, Category, BatchArtefact
from autoCategorise import AutoCategoriser
class HFCatalogueIntegrator:
@staticmethod
def integrate(batch: Batch):
"""Two steps:
1. Auto-categorisation
2. Auto Profiling
Provide a batch. At the end, all the artefacts will be `BatchArtefact.Status.INTEGRATED` and the batch will be `Batch.Stage.COMPLETED`.
Uses ArchSmith tracing for transparency.
Args:
batch (Batch, optional): Batch to integrate. Will only process artefacts with status `BatchArtefact.Status.CONFIRMED`. Defaults to None.
"""
if not isinstance(batch, Batch):
Logger.log("HFCATALOGUEINTEGRATOR INTEGRATE ERROR: Terminating due to invalid input.")
return
job = batch.job
job.start()
job.save()
tracer = ArchSmith.newTracer("HF Catalogue Integration for Batch {}".format(batch.id))
tracer.start()
try:
batch.loadAllArtefacts()
except Exception as e:
tracer.addReport(
ASReport(
"HFCATALOGUEINTEGRATOR INTEGRATE ERROR",
"Failed to load artefacts for batch {}: {}".format(batch.id, e)
)
)
return
targetHFBatchArtefacts: List[BatchArtefact] = []
try:
for batchArt in batch.artefacts.values():
if batchArt.artefact.artType == "mm":
batchArt.artefact = None
batchArt.integrationResult = "No integration required for meeting minute artefact."
batchArt.stage = BatchArtefact.Status.INTEGRATED
batchArt.save()
else:
batchArt.artefact = None
targetHFBatchArtefacts.append(batchArt)
except Exception as e:
tracer.addReport(
ASReport(
"HFCATALOGUEINTEGRATOR INTEGRATE ERROR",
"Failed to process loaded batch artefacts for MM integration and HF preparation; error: {}".format(e)
)
)
return
# Auto-categorisation
categories: List[Category] = Category.load()
for batchArt in targetHFBatchArtefacts:
try:
try:
batchArt.getArtefact(includeMetadata=True)
except Exception as e:
tracer.addReport(
ASReport(
"HFCATALOGUEINTEGRATOR INTEGRATE WARNING",
"Skipping auto-categorisation for artefact {} due to error in load: {}".format(batchArt.id, e)
)
)
continue
targetArtefact = batchArt.artefact
result = AutoCategoriser.feed(targetArtefact, categories, tracer)
tracer.addReport(
ASReport(
"HFCATALOGUEINTEGRATOR INTEGRATE{}".format(" WARNING" if result is None else ""),
"Auto-categorisation result for artefact {}: {}".format(targetArtefact.id, result)
)
)
batchArt.artefact = None
if not isinstance(batchArt.integrationResult, dict):
batchArt.integrationResult = {}
if result is None:
batchArt.integrationResult['autocategoriser'] = "Could not automatically categorise artefact."
else:
targetCat = [x for x in categories if x.id == result]
if len(targetCat) == 0:
targetCat = 'Unknown'
else:
targetCat = targetCat[0].name
batchArt.integrationResult['autocategoriser'] = "Assigned to category with name '{}'.".format(targetCat)
batchArt.stage = BatchArtefact.Status.INTEGRATED
batchArt.save()
except Exception as e:
tracer.addReport(
ASReport(
"HFCATALOGUEINTEGRATOR INTEGRATE ERROR",
"Failed to auto-categorise artefact {}: {}".format(batchArt.id, e)
)
)
continue
try:
batch.stage = Batch.Stage.COMPLETED
batch.save()
except Exception as e:
tracer.addReport(
ASReport(
"HFCATALOGUEINTEGRATOR INTEGRATE ERROR",
"Failed to mark batch {} as completed: {}".format(batch.id, e)
)
)
job.end()
job.save()
tracer.addReport(
ASReport(
"HFCATALOGUEINTEGRATOR INTEGRATE",
"Completed integration procedure for batch {}.".format(batch.id)
)
)
tracer.end()
ArchSmith.persist()