cognite-neat 0.92.3__py3-none-any.whl → 0.94.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cognite-neat might be problematic. Click here for more details.
- cognite/neat/__init__.py +3 -2
- cognite/neat/{app → _app}/api/configuration.py +9 -7
- cognite/neat/_app/api/context_manager/__init__.py +3 -0
- cognite/neat/{app → _app}/api/context_manager/manager.py +1 -1
- cognite/neat/{app → _app}/api/explorer.py +5 -5
- cognite/neat/{app → _app}/api/routers/configuration.py +2 -2
- cognite/neat/{app → _app}/api/routers/crud.py +4 -4
- cognite/neat/{app → _app}/api/routers/workflows.py +7 -7
- cognite/neat/{app → _app}/main.py +1 -1
- cognite/neat/_app/ui/neat-app/package-lock.json +18306 -0
- cognite/neat/_app/ui/neat-app/package.json +62 -0
- cognite/neat/_app/ui/neat-app/public/favicon.ico +0 -0
- cognite/neat/_app/ui/neat-app/public/img/architect-icon.svg +116 -0
- cognite/neat/_app/ui/neat-app/public/img/developer-icon.svg +112 -0
- cognite/neat/_app/ui/neat-app/public/img/sme-icon.svg +34 -0
- cognite/neat/_app/ui/neat-app/public/index.html +43 -0
- cognite/neat/_app/ui/neat-app/public/logo192.png +0 -0
- cognite/neat/_app/ui/neat-app/public/manifest.json +25 -0
- cognite/neat/_app/ui/neat-app/public/robots.txt +3 -0
- cognite/neat/_app/ui/neat-app/src/App.css +38 -0
- cognite/neat/_app/ui/neat-app/src/App.js +17 -0
- cognite/neat/_app/ui/neat-app/src/App.test.js +8 -0
- cognite/neat/_app/ui/neat-app/src/MainContainer.tsx +70 -0
- cognite/neat/_app/ui/neat-app/src/components/JsonViewer.tsx +43 -0
- cognite/neat/_app/ui/neat-app/src/components/LocalUploader.tsx +124 -0
- cognite/neat/_app/ui/neat-app/src/components/OverviewComponentEditorDialog.tsx +63 -0
- cognite/neat/_app/ui/neat-app/src/components/StepEditorDialog.tsx +511 -0
- cognite/neat/_app/ui/neat-app/src/components/TabPanel.tsx +36 -0
- cognite/neat/_app/ui/neat-app/src/components/Utils.tsx +56 -0
- cognite/neat/_app/ui/neat-app/src/components/WorkflowDeleteDialog.tsx +60 -0
- cognite/neat/_app/ui/neat-app/src/components/WorkflowExecutionReport.tsx +112 -0
- cognite/neat/_app/ui/neat-app/src/components/WorkflowImportExportDialog.tsx +67 -0
- cognite/neat/_app/ui/neat-app/src/components/WorkflowMetadataDialog.tsx +79 -0
- cognite/neat/_app/ui/neat-app/src/index.css +13 -0
- cognite/neat/_app/ui/neat-app/src/index.js +13 -0
- cognite/neat/_app/ui/neat-app/src/logo.svg +1 -0
- cognite/neat/_app/ui/neat-app/src/reportWebVitals.js +13 -0
- cognite/neat/_app/ui/neat-app/src/setupTests.js +5 -0
- cognite/neat/_app/ui/neat-app/src/types/WorkflowTypes.ts +388 -0
- cognite/neat/_app/ui/neat-app/src/views/AboutView.tsx +61 -0
- cognite/neat/_app/ui/neat-app/src/views/ConfigView.tsx +184 -0
- cognite/neat/_app/ui/neat-app/src/views/GlobalConfigView.tsx +180 -0
- cognite/neat/_app/ui/neat-app/src/views/WorkflowView.tsx +570 -0
- cognite/neat/_app/ui/neat-app/tsconfig.json +27 -0
- cognite/neat/{config.py → _config.py} +3 -3
- cognite/neat/{constants.py → _constants.py} +13 -5
- cognite/neat/_graph/_shared.py +34 -0
- cognite/neat/{graph → _graph}/_tracking/base.py +1 -1
- cognite/neat/{graph → _graph}/_tracking/log.py +1 -1
- cognite/neat/{graph → _graph}/extractors/__init__.py +5 -0
- cognite/neat/{graph → _graph}/extractors/_base.py +2 -2
- cognite/neat/{graph → _graph}/extractors/_classic_cdf/_assets.py +1 -1
- cognite/neat/{graph → _graph}/extractors/_classic_cdf/_base.py +4 -4
- cognite/neat/{graph → _graph}/extractors/_classic_cdf/_classic.py +5 -5
- cognite/neat/{graph → _graph}/extractors/_classic_cdf/_data_sets.py +1 -1
- cognite/neat/{graph → _graph}/extractors/_classic_cdf/_events.py +1 -1
- cognite/neat/{graph → _graph}/extractors/_classic_cdf/_files.py +1 -1
- cognite/neat/{graph → _graph}/extractors/_classic_cdf/_labels.py +1 -1
- cognite/neat/{graph → _graph}/extractors/_classic_cdf/_relationships.py +2 -2
- cognite/neat/{graph → _graph}/extractors/_classic_cdf/_sequences.py +1 -1
- cognite/neat/{graph → _graph}/extractors/_classic_cdf/_timeseries.py +1 -1
- cognite/neat/{graph → _graph}/extractors/_dexpi.py +5 -5
- cognite/neat/{graph → _graph}/extractors/_dms.py +3 -3
- cognite/neat/_graph/extractors/_iodd.py +402 -0
- cognite/neat/{graph → _graph}/extractors/_mock_graph_generator.py +9 -8
- cognite/neat/_graph/extractors/_rdf_file.py +49 -0
- cognite/neat/{graph → _graph}/loaders/_base.py +5 -5
- cognite/neat/{graph → _graph}/loaders/_rdf2asset.py +11 -10
- cognite/neat/{graph → _graph}/loaders/_rdf2dms.py +10 -10
- cognite/neat/{graph → _graph}/queries/_base.py +91 -19
- cognite/neat/{graph → _graph}/queries/_construct.py +5 -5
- cognite/neat/{graph → _graph}/queries/_shared.py +3 -3
- cognite/neat/{graph → _graph}/transformers/__init__.py +6 -0
- cognite/neat/{graph → _graph}/transformers/_classic_cdf.py +135 -3
- cognite/neat/_graph/transformers/_iodd.py +25 -0
- cognite/neat/_graph/transformers/_prune_graph.py +126 -0
- cognite/neat/{graph → _graph}/transformers/_rdfpath.py +3 -3
- cognite/neat/_graph/transformers/_value_type.py +66 -0
- cognite/neat/{issues → _issues}/_base.py +32 -17
- cognite/neat/{issues → _issues}/errors/__init__.py +1 -1
- cognite/neat/{issues → _issues}/errors/_external.py +8 -8
- cognite/neat/{issues → _issues}/errors/_general.py +5 -5
- cognite/neat/{issues → _issues}/errors/_properties.py +7 -7
- cognite/neat/{issues → _issues}/errors/_resources.py +11 -11
- cognite/neat/{issues → _issues}/errors/_workflow.py +5 -5
- cognite/neat/{issues → _issues}/warnings/__init__.py +1 -1
- cognite/neat/{issues → _issues}/warnings/_external.py +5 -5
- cognite/neat/{issues → _issues}/warnings/_general.py +4 -4
- cognite/neat/{issues → _issues}/warnings/_models.py +10 -10
- cognite/neat/{issues → _issues}/warnings/_properties.py +6 -6
- cognite/neat/{issues → _issues}/warnings/_resources.py +5 -5
- cognite/neat/{issues → _issues}/warnings/user_modeling.py +9 -9
- cognite/neat/_rules/_constants.py +190 -0
- cognite/neat/{rules → _rules}/_shared.py +5 -5
- cognite/neat/_rules/analysis/__init__.py +5 -0
- cognite/neat/{rules → _rules}/analysis/_asset.py +5 -5
- cognite/neat/{rules → _rules}/analysis/_base.py +5 -5
- cognite/neat/_rules/analysis/_dms.py +43 -0
- cognite/neat/{rules → _rules}/analysis/_information.py +12 -6
- cognite/neat/_rules/catalog/__init__.py +6 -0
- cognite/neat/_rules/catalog/info-rules-imf.xlsx +0 -0
- cognite/neat/{rules → _rules}/exporters/__init__.py +2 -0
- cognite/neat/{rules → _rules}/exporters/_base.py +3 -3
- cognite/neat/{rules → _rules}/exporters/_rules2dms.py +5 -5
- cognite/neat/{rules → _rules}/exporters/_rules2excel.py +12 -8
- cognite/neat/_rules/exporters/_rules2instance_template.py +152 -0
- cognite/neat/{rules → _rules}/exporters/_rules2ontology.py +10 -9
- cognite/neat/{rules → _rules}/exporters/_rules2yaml.py +1 -3
- cognite/neat/{rules → _rules}/exporters/_validation.py +2 -2
- cognite/neat/{rules → _rules}/importers/_base.py +3 -3
- cognite/neat/{rules → _rules}/importers/_dms2rules.py +9 -9
- cognite/neat/{rules → _rules}/importers/_dtdl2rules/dtdl_converter.py +7 -7
- cognite/neat/{rules → _rules}/importers/_dtdl2rules/dtdl_importer.py +9 -9
- cognite/neat/{rules → _rules}/importers/_dtdl2rules/spec.py +1 -1
- cognite/neat/_rules/importers/_rdf/_base.py +144 -0
- cognite/neat/{rules → _rules}/importers/_rdf/_imf2rules/_imf2classes.py +1 -1
- cognite/neat/{rules → _rules}/importers/_rdf/_imf2rules/_imf2metadata.py +4 -4
- cognite/neat/{rules → _rules}/importers/_rdf/_imf2rules/_imf2properties.py +2 -1
- cognite/neat/{rules → _rules}/importers/_rdf/_imf2rules/_imf2rules.py +8 -39
- cognite/neat/{rules → _rules}/importers/_rdf/_inference2rules.py +33 -106
- cognite/neat/{rules → _rules}/importers/_rdf/_owl2rules/_owl2classes.py +1 -1
- cognite/neat/{rules → _rules}/importers/_rdf/_owl2rules/_owl2metadata.py +5 -5
- cognite/neat/{rules → _rules}/importers/_rdf/_owl2rules/_owl2properties.py +1 -1
- cognite/neat/_rules/importers/_rdf/_owl2rules/_owl2rules.py +39 -0
- cognite/neat/{rules → _rules}/importers/_rdf/_shared.py +4 -4
- cognite/neat/{rules → _rules}/importers/_spreadsheet2rules.py +7 -7
- cognite/neat/{rules → _rules}/importers/_yaml2rules.py +5 -5
- cognite/neat/{rules → _rules}/models/__init__.py +5 -5
- cognite/neat/{rules → _rules}/models/_base_input.py +15 -6
- cognite/neat/{rules → _rules}/models/_base_rules.py +14 -2
- cognite/neat/{rules → _rules}/models/_rdfpath.py +1 -1
- cognite/neat/_rules/models/_types.py +151 -0
- cognite/neat/{rules → _rules}/models/asset/_rules.py +4 -4
- cognite/neat/{rules → _rules}/models/asset/_rules_input.py +4 -4
- cognite/neat/{rules → _rules}/models/asset/_validation.py +7 -7
- cognite/neat/{rules → _rules}/models/data_types.py +15 -12
- cognite/neat/{rules → _rules}/models/dms/_exporter.py +60 -12
- cognite/neat/{rules → _rules}/models/dms/_rules.py +26 -23
- cognite/neat/{rules → _rules}/models/dms/_rules_input.py +4 -4
- cognite/neat/{rules → _rules}/models/dms/_schema.py +15 -14
- cognite/neat/{rules → _rules}/models/dms/_validation.py +8 -8
- cognite/neat/{rules → _rules}/models/domain.py +6 -6
- cognite/neat/{rules → _rules}/models/entities/__init__.py +1 -2
- cognite/neat/_rules/models/entities/_constants.py +15 -0
- cognite/neat/{rules → _rules}/models/entities/_loaders.py +2 -2
- cognite/neat/{rules → _rules}/models/entities/_multi_value.py +15 -2
- cognite/neat/{rules → _rules}/models/entities/_single_value.py +7 -4
- cognite/neat/{rules → _rules}/models/information/_rules.py +34 -22
- cognite/neat/{rules → _rules}/models/information/_rules_input.py +3 -3
- cognite/neat/{rules → _rules}/models/information/_validation.py +6 -5
- cognite/neat/_rules/models/mapping/__init__.py +4 -0
- cognite/neat/_rules/models/mapping/_base.py +131 -0
- cognite/neat/_rules/models/mapping/_classic2core.py +150 -0
- cognite/neat/{rules → _rules}/transformers/__init__.py +15 -2
- cognite/neat/{rules → _rules}/transformers/_base.py +3 -3
- cognite/neat/{rules → _rules}/transformers/_converters.py +289 -20
- cognite/neat/{rules/transformers/_map_onto.py → _rules/transformers/_mapping.py} +46 -4
- cognite/neat/{rules → _rules}/transformers/_pipelines.py +4 -4
- cognite/neat/{rules → _rules}/transformers/_verification.py +10 -4
- cognite/neat/_session/__init__.py +3 -0
- cognite/neat/_session/_base.py +86 -0
- cognite/neat/_session/_prepare.py +61 -0
- cognite/neat/_session/_read.py +118 -0
- cognite/neat/_session/_show.py +274 -0
- cognite/neat/_session/_state.py +69 -0
- cognite/neat/_session/_to.py +70 -0
- cognite/neat/_session/_wizard.py +39 -0
- cognite/neat/_session/exceptions.py +42 -0
- cognite/neat/{store → _store}/_base.py +62 -31
- cognite/neat/{store → _store}/_provenance.py +11 -1
- cognite/neat/{utils → _utils}/auth.py +14 -3
- cognite/neat/{utils → _utils}/auxiliary.py +1 -1
- cognite/neat/{utils → _utils}/cdf/loaders/_data_modeling.py +8 -2
- cognite/neat/{utils → _utils}/cdf/loaders/_ingestion.py +1 -1
- cognite/neat/{utils → _utils}/upload.py +1 -1
- cognite/neat/_version.py +1 -1
- cognite/neat/_workflows/__init__.py +17 -0
- cognite/neat/{workflows → _workflows}/base.py +10 -10
- cognite/neat/{workflows → _workflows}/cdf_store.py +3 -3
- cognite/neat/{workflows → _workflows}/examples/Export_DMS/workflow.yaml +89 -89
- cognite/neat/{workflows → _workflows}/manager.py +6 -6
- cognite/neat/{workflows → _workflows}/steps/data_contracts.py +3 -3
- cognite/neat/{workflows → _workflows}/steps/lib/current/graph_extractor.py +8 -31
- cognite/neat/{workflows → _workflows}/steps/lib/current/graph_loader.py +4 -4
- cognite/neat/{workflows → _workflows}/steps/lib/current/graph_store.py +4 -4
- cognite/neat/{workflows → _workflows}/steps/lib/current/rules_exporter.py +8 -8
- cognite/neat/{workflows → _workflows}/steps/lib/current/rules_importer.py +13 -13
- cognite/neat/{workflows → _workflows}/steps/lib/current/rules_validator.py +8 -8
- cognite/neat/{workflows → _workflows}/steps/lib/io/io_steps.py +3 -3
- cognite/neat/{workflows → _workflows}/steps/step_model.py +3 -3
- cognite/neat/{workflows → _workflows}/steps_registry.py +9 -9
- cognite/neat/{workflows → _workflows}/tasks.py +1 -1
- cognite/neat/{workflows → _workflows}/triggers.py +2 -2
- {cognite_neat-0.92.3.dist-info → cognite_neat-0.94.0.dist-info}/METADATA +6 -2
- cognite_neat-0.94.0.dist-info/RECORD +276 -0
- {cognite_neat-0.92.3.dist-info → cognite_neat-0.94.0.dist-info}/WHEEL +1 -1
- cognite_neat-0.94.0.dist-info/entry_points.txt +3 -0
- cognite/neat/app/api/context_manager/__init__.py +0 -3
- cognite/neat/graph/_shared.py +0 -5
- cognite/neat/graph/extractors/_iodd.py +0 -160
- cognite/neat/graph/extractors/_rdf_file.py +0 -26
- cognite/neat/rules/analysis/__init__.py +0 -6
- cognite/neat/rules/examples/__init__.py +0 -10
- cognite/neat/rules/examples/info-rules-imf.xlsx +0 -0
- cognite/neat/rules/examples/wind-energy.owl +0 -1511
- cognite/neat/rules/importers/_rdf/_owl2rules/_owl2rules.py +0 -65
- cognite/neat/rules/models/_types.py +0 -96
- cognite/neat/rules/models/entities/_constants.py +0 -73
- cognite/neat/utils/regex_patterns.py +0 -58
- cognite/neat/workflows/__init__.py +0 -12
- cognite_neat-0.92.3.dist-info/RECORD +0 -224
- cognite_neat-0.92.3.dist-info/entry_points.txt +0 -3
- /cognite/neat/{app → _app}/api/__init__.py +0 -0
- /cognite/neat/{app → _app}/api/asgi/metrics.py +0 -0
- /cognite/neat/{app → _app}/api/data_classes/__init__.py +0 -0
- /cognite/neat/{app → _app}/api/data_classes/rest.py +0 -0
- /cognite/neat/{app → _app}/api/routers/metrics.py +0 -0
- /cognite/neat/{app → _app}/api/utils/__init__.py +0 -0
- /cognite/neat/{app → _app}/api/utils/data_mapping.py +0 -0
- /cognite/neat/{app → _app}/api/utils/logging.py +0 -0
- /cognite/neat/{app → _app}/api/utils/query_templates.py +0 -0
- /cognite/neat/{app → _app}/monitoring/__init__.py +0 -0
- /cognite/neat/{app → _app}/monitoring/metrics.py +0 -0
- /cognite/neat/{app → _app}/ui/index.html +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/.gitignore +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/README.md +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/asset-manifest.json +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/favicon.ico +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/img/architect-icon.svg +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/img/developer-icon.svg +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/img/sme-icon.svg +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/index.html +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/logo192.png +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/manifest.json +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/robots.txt +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/static/css/main.72e3d92e.css +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/static/css/main.72e3d92e.css.map +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/static/js/main.5a52cf09.js +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/static/js/main.5a52cf09.js.LICENSE.txt +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/static/js/main.5a52cf09.js.map +0 -0
- /cognite/neat/{app → _app}/ui/neat-app/build/static/media/logo.8093b84df9ed36a174c629d6fe0b730d.svg +0 -0
- /cognite/neat/{graph → _graph}/__init__.py +0 -0
- /cognite/neat/{graph → _graph}/_tracking/__init__.py +0 -0
- /cognite/neat/{graph → _graph}/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
- /cognite/neat/{graph → _graph}/examples/Knowledge-Graph-Nordic44.xml +0 -0
- /cognite/neat/{graph → _graph}/examples/__init__.py +0 -0
- /cognite/neat/{graph → _graph}/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
- /cognite/neat/{graph → _graph}/extractors/_classic_cdf/__init__.py +0 -0
- /cognite/neat/{graph → _graph}/loaders/__init__.py +0 -0
- /cognite/neat/{graph → _graph}/models.py +0 -0
- /cognite/neat/{graph → _graph}/queries/__init__.py +0 -0
- /cognite/neat/{graph → _graph}/transformers/_base.py +0 -0
- /cognite/neat/{issues → _issues}/__init__.py +0 -0
- /cognite/neat/{issues → _issues}/formatters.py +0 -0
- /cognite/neat/{rules → _rules}/__init__.py +0 -0
- /cognite/neat/{rules → _rules}/importers/__init__.py +0 -0
- /cognite/neat/{rules → _rules}/importers/_dtdl2rules/__init__.py +0 -0
- /cognite/neat/{rules → _rules}/importers/_dtdl2rules/_unit_lookup.py +0 -0
- /cognite/neat/{rules → _rules}/importers/_rdf/__init__.py +0 -0
- /cognite/neat/{rules → _rules}/importers/_rdf/_imf2rules/__init__.py +0 -0
- /cognite/neat/{rules → _rules}/importers/_rdf/_owl2rules/__init__.py +0 -0
- /cognite/neat/{rules → _rules}/models/asset/__init__.py +0 -0
- /cognite/neat/{rules → _rules}/models/dms/__init__.py +0 -0
- /cognite/neat/{rules → _rules}/models/entities/_types.py +0 -0
- /cognite/neat/{rules → _rules}/models/entities/_wrapped.py +0 -0
- /cognite/neat/{rules → _rules}/models/information/__init__.py +0 -0
- /cognite/neat/{store → _store}/__init__.py +0 -0
- /cognite/neat/{utils → _utils}/__init__.py +0 -0
- /cognite/neat/{utils → _utils}/cdf/__init__.py +0 -0
- /cognite/neat/{utils → _utils}/cdf/data_classes.py +0 -0
- /cognite/neat/{utils → _utils}/cdf/loaders/__init__.py +0 -0
- /cognite/neat/{utils → _utils}/cdf/loaders/_base.py +0 -0
- /cognite/neat/{utils → _utils}/collection_.py +0 -0
- /cognite/neat/{utils → _utils}/rdf_.py +0 -0
- /cognite/neat/{utils → _utils}/spreadsheet.py +0 -0
- /cognite/neat/{utils → _utils}/text.py +0 -0
- /cognite/neat/{utils → _utils}/time_.py +0 -0
- /cognite/neat/{utils → _utils}/xml_.py +0 -0
- /cognite/neat/{workflows → _workflows}/examples/Export_Semantic_Data_Model/workflow.yaml +0 -0
- /cognite/neat/{workflows → _workflows}/examples/Import_DMS/workflow.yaml +0 -0
- /cognite/neat/{workflows → _workflows}/examples/Validate_Rules/workflow.yaml +0 -0
- /cognite/neat/{workflows → _workflows}/examples/Validate_Solution_Model/workflow.yaml +0 -0
- /cognite/neat/{workflows → _workflows}/model.py +0 -0
- /cognite/neat/{workflows → _workflows}/steps/__init__.py +0 -0
- /cognite/neat/{workflows → _workflows}/steps/lib/__init__.py +0 -0
- /cognite/neat/{workflows → _workflows}/steps/lib/current/__init__.py +0 -0
- /cognite/neat/{workflows → _workflows}/steps/lib/io/__init__.py +0 -0
- /cognite/neat/{workflows → _workflows}/utils.py +0 -0
- {cognite_neat-0.92.3.dist-info → cognite_neat-0.94.0.dist-info}/LICENSE +0 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import Timeline from '@mui/lab/Timeline';
|
|
2
|
+
import TimelineConnector from '@mui/lab/TimelineConnector';
|
|
3
|
+
import TimelineContent from '@mui/lab/TimelineContent';
|
|
4
|
+
import TimelineDot from '@mui/lab/TimelineDot';
|
|
5
|
+
import TimelineItem, { timelineItemClasses } from '@mui/lab/TimelineItem';
|
|
6
|
+
import TimelineSeparator from '@mui/lab/TimelineSeparator';
|
|
7
|
+
import Box from '@mui/material/Box';
|
|
8
|
+
import Button from '@mui/material/Button';
|
|
9
|
+
import CircularProgress from '@mui/material/CircularProgress';
|
|
10
|
+
import Dialog from '@mui/material/Dialog';
|
|
11
|
+
import DialogActions from '@mui/material/DialogActions';
|
|
12
|
+
import DialogContent from '@mui/material/DialogContent';
|
|
13
|
+
import DialogTitle from '@mui/material/DialogTitle';
|
|
14
|
+
import FormControl from '@mui/material/FormControl';
|
|
15
|
+
import TextField from '@mui/material/TextField';
|
|
16
|
+
import { Container } from '@mui/system';
|
|
17
|
+
import React, { useEffect } from 'react';
|
|
18
|
+
import { useState } from 'react';
|
|
19
|
+
import { WorkflowStats } from 'views/WorkflowView';
|
|
20
|
+
import NJsonViewer from './JsonViewer';
|
|
21
|
+
import { getNeatApiRootUrl, getSelectedWorkflowName } from './Utils';
|
|
22
|
+
|
|
23
|
+
export default function WorkflowExecutionReport(props: any) {
|
|
24
|
+
const [workflowStats, setWorkflowStats] = useState<any>();
|
|
25
|
+
const run_id = props.run_id;
|
|
26
|
+
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (props.run_id)
|
|
29
|
+
loadReport();
|
|
30
|
+
else
|
|
31
|
+
setWorkflowStats(filterStats(props.report));
|
|
32
|
+
}, [props.report]);
|
|
33
|
+
|
|
34
|
+
const loadReport = () => {
|
|
35
|
+
const neatApiRootUrl = getNeatApiRootUrl();
|
|
36
|
+
let url = neatApiRootUrl+"/api/workflow/detailed-execution-report/"+run_id;
|
|
37
|
+
fetch(url)
|
|
38
|
+
.then((response) => {
|
|
39
|
+
return response.json();
|
|
40
|
+
}).then((jdata) => {
|
|
41
|
+
setWorkflowStats(filterStats(jdata.report));
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
)}
|
|
45
|
+
const filterStats = (stats: WorkflowStats) => {
|
|
46
|
+
|
|
47
|
+
console.dir(stats)
|
|
48
|
+
// detelete all log RUNNING entries that have both RUNNING and COMPLETED entries for the same step
|
|
49
|
+
if (stats?.execution_log == null )
|
|
50
|
+
return stats;
|
|
51
|
+
|
|
52
|
+
const filteredLog = stats.execution_log!.filter((log, index) => {
|
|
53
|
+
if (log.state == "STARTED") {
|
|
54
|
+
const nextLog = stats.execution_log[index + 1];
|
|
55
|
+
if (nextLog && nextLog.state == "COMPLETED" && nextLog.id == log.id)
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
})
|
|
60
|
+
stats.execution_log = filteredLog;
|
|
61
|
+
return stats;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function createMarkup(text) {
|
|
65
|
+
return {__html: text};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return (
|
|
69
|
+
<Timeline sx={{
|
|
70
|
+
[`& .${timelineItemClasses.root}:before`]: {
|
|
71
|
+
flex: 0,
|
|
72
|
+
padding: 0,
|
|
73
|
+
},
|
|
74
|
+
}} >
|
|
75
|
+
{workflowStats?.execution_log?.map((log) => (
|
|
76
|
+
<TimelineItem key={log.id}>
|
|
77
|
+
<TimelineSeparator>
|
|
78
|
+
{log.state == "STARTED" && (<TimelineDot color="success" variant="outlined" />)}
|
|
79
|
+
{log.state == "COMPLETED" && (<TimelineDot color="success" />)}
|
|
80
|
+
{log.state == "FAILED" && (<TimelineDot color="error" />)}
|
|
81
|
+
{log.state != "STARTED" && log.state != "COMPLETED" && log.state != "FAILED" && (<TimelineDot />)}
|
|
82
|
+
<TimelineConnector />
|
|
83
|
+
</TimelineSeparator>
|
|
84
|
+
<TimelineContent> {log.timestamp} - {log.state} : {log.label} ({log.id}) in ({log.elapsed_time} sec)
|
|
85
|
+
{log.state == "FAILED" && (<div dangerouslySetInnerHTML={ createMarkup(log.error) }></div>)}
|
|
86
|
+
{log.state == "COMPLETED" && (<div dangerouslySetInnerHTML={ createMarkup(log.output_text) }></div>)}
|
|
87
|
+
{log.data && ( <NJsonViewer data={log.data} />) }
|
|
88
|
+
</TimelineContent>
|
|
89
|
+
|
|
90
|
+
</TimelineItem>
|
|
91
|
+
))}
|
|
92
|
+
{(workflowStats?.state == "COMPLETED" || workflowStats?.state == "FAILED") && (
|
|
93
|
+
<TimelineItem>
|
|
94
|
+
<TimelineSeparator>
|
|
95
|
+
{workflowStats?.state == "COMPLETED" && (<TimelineDot color="success" />)}
|
|
96
|
+
{workflowStats?.state == "FAILED" && (<TimelineDot color="error" />)}
|
|
97
|
+
</TimelineSeparator>
|
|
98
|
+
<TimelineContent> Workflows completed with state : {workflowStats?.state} . Elapsed time : {workflowStats?.elapsed_time} seconds.
|
|
99
|
+
</TimelineContent>
|
|
100
|
+
</TimelineItem>
|
|
101
|
+
)}
|
|
102
|
+
{(workflowStats?.state != "COMPLETED" && workflowStats?.state != "FAILED" && workflowStats?.state != "CREATED") && (
|
|
103
|
+
<TimelineItem>
|
|
104
|
+
<TimelineSeparator>
|
|
105
|
+
<TimelineDot variant="outlined" />
|
|
106
|
+
</TimelineSeparator>
|
|
107
|
+
<TimelineContent> <CircularProgress /> </TimelineContent>
|
|
108
|
+
</TimelineItem>
|
|
109
|
+
)}
|
|
110
|
+
</Timeline>
|
|
111
|
+
)
|
|
112
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import Button from "@mui/material/Button"
|
|
2
|
+
import Dialog from "@mui/material/Dialog"
|
|
3
|
+
import DialogActions from "@mui/material/DialogActions"
|
|
4
|
+
import DialogContent from "@mui/material/DialogContent"
|
|
5
|
+
import DialogTitle from "@mui/material/DialogTitle"
|
|
6
|
+
import React from "react"
|
|
7
|
+
import { useEffect, useState } from "react"
|
|
8
|
+
import { WorkflowDefinition } from "types/WorkflowTypes"
|
|
9
|
+
import LocalUploader from "./LocalUploader"
|
|
10
|
+
import { getNeatApiRootUrl, getSelectedWorkflowName } from "./Utils"
|
|
11
|
+
import { Box } from "@mui/material"
|
|
12
|
+
import FileDownloadIcon from '@mui/icons-material/FileDownload';
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
export default function WorkflowImportExportDialog(props: any)
|
|
16
|
+
{
|
|
17
|
+
const neatApiRootUrl = getNeatApiRootUrl();
|
|
18
|
+
const [dialogOpen, setDialogOpen] = useState(false);
|
|
19
|
+
const [component, setComponent] = useState<WorkflowDefinition>(null);
|
|
20
|
+
const handleDialogCancel = () => {
|
|
21
|
+
setDialogOpen(false);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const onDownloadSuccess = (fileName: string, hash: string) => {
|
|
25
|
+
|
|
26
|
+
props.onDownloaded(fileName, hash);
|
|
27
|
+
setDialogOpen(false);
|
|
28
|
+
}
|
|
29
|
+
const packageWorkflow = () => {
|
|
30
|
+
const url = neatApiRootUrl + "/api/workflow/package/" + getSelectedWorkflowName();
|
|
31
|
+
fetch(url, {
|
|
32
|
+
method: "post", headers: {
|
|
33
|
+
'Content-Type': 'application/json;charset=utf-8'
|
|
34
|
+
}
|
|
35
|
+
}).then((response) => response.json()).then((data) => {
|
|
36
|
+
const downloadUrl = neatApiRootUrl+"/data/workflows/"+data.package+"?version="+data.hash;
|
|
37
|
+
const link = document.createElement("a");
|
|
38
|
+
link.download = "package.zip";
|
|
39
|
+
link.href = downloadUrl;
|
|
40
|
+
document.body.appendChild(link);
|
|
41
|
+
link.click();
|
|
42
|
+
document.body.removeChild(link);
|
|
43
|
+
|
|
44
|
+
}).catch((error) => {
|
|
45
|
+
console.error('Error:', error);
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<React.Fragment >
|
|
51
|
+
<Button variant="outlined" onClick={(event)=>{setDialogOpen(true)}} sx={{ marginTop: 2, marginRight: 1 }} >Import/Export</Button>
|
|
52
|
+
|
|
53
|
+
<Dialog open={dialogOpen} onClose={handleDialogCancel}>
|
|
54
|
+
<DialogTitle>Workflow Import/Export</DialogTitle>
|
|
55
|
+
<DialogContent>
|
|
56
|
+
<Box sx={{width: 500}}>
|
|
57
|
+
<LocalUploader fileType="workflow" action="install" stepId="none" label="Upload to NEAT" workflowName={getSelectedWorkflowName()} onUpload={onDownloadSuccess} />
|
|
58
|
+
</Box>
|
|
59
|
+
<Button variant="outlined" onClick={packageWorkflow} sx={{ marginTop: 2, marginRight: 1 , width: 500 }} >Download from NEAT <FileDownloadIcon sx={{marginLeft:1}} /> </Button>
|
|
60
|
+
</DialogContent>
|
|
61
|
+
<DialogActions>
|
|
62
|
+
<Button variant="outlined" size="small" onClick={handleDialogCancel}>Cancel</Button>
|
|
63
|
+
</DialogActions>
|
|
64
|
+
</Dialog>
|
|
65
|
+
</React.Fragment>
|
|
66
|
+
)
|
|
67
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import Button from "@mui/material/Button"
|
|
2
|
+
import Dialog from "@mui/material/Dialog"
|
|
3
|
+
import DialogActions from "@mui/material/DialogActions"
|
|
4
|
+
import DialogContent from "@mui/material/DialogContent"
|
|
5
|
+
import DialogTitle from "@mui/material/DialogTitle"
|
|
6
|
+
import FormControl from "@mui/material/FormControl"
|
|
7
|
+
import IconButton from "@mui/material/IconButton/IconButton"
|
|
8
|
+
import TextField from "@mui/material/TextField"
|
|
9
|
+
import React from "react"
|
|
10
|
+
import { useEffect, useState } from "react"
|
|
11
|
+
import { WorkflowDefinition } from "types/WorkflowTypes"
|
|
12
|
+
import AddCircleOutlineOutlinedIcon from '@mui/icons-material/AddCircleOutlineOutlined';
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
export default function WorkflowMetadataDialog(props: any)
|
|
16
|
+
{
|
|
17
|
+
const [dialogOpen, setDialogOpen] = useState(false);
|
|
18
|
+
const [component, setComponent] = useState<WorkflowDefinition>(null);
|
|
19
|
+
const handleDialogSave = () => {
|
|
20
|
+
setDialogOpen(false);
|
|
21
|
+
props.onClose(component,"save");
|
|
22
|
+
};
|
|
23
|
+
const handleDialogCancel = () => {
|
|
24
|
+
setDialogOpen(false);
|
|
25
|
+
props.onClose(component,"cancel");
|
|
26
|
+
};
|
|
27
|
+
const handleDelete = () => {
|
|
28
|
+
setDialogOpen(false);
|
|
29
|
+
props.onClose(component,"delete");
|
|
30
|
+
};
|
|
31
|
+
const handleStepConfigChange = (name: string, value: any) => {
|
|
32
|
+
let wdef = new WorkflowDefinition();
|
|
33
|
+
if (component) {
|
|
34
|
+
wdef.name = component.name;
|
|
35
|
+
wdef.description = component.description;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
switch (name) {
|
|
39
|
+
case "name":
|
|
40
|
+
wdef.name = value;
|
|
41
|
+
break;
|
|
42
|
+
case "description":
|
|
43
|
+
wdef.description = value;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
console.dir(wdef);
|
|
47
|
+
setComponent(wdef);
|
|
48
|
+
}
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (props.open){
|
|
51
|
+
setDialogOpen(true);
|
|
52
|
+
setComponent(props.component);
|
|
53
|
+
console.dir(props.component);
|
|
54
|
+
}
|
|
55
|
+
}, [props.open]);
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<React.Fragment >
|
|
61
|
+
<IconButton color="primary" aria-label="add new workflow" onClick={(event)=>{setDialogOpen(true)} }>
|
|
62
|
+
<AddCircleOutlineOutlinedIcon />
|
|
63
|
+
</IconButton>
|
|
64
|
+
<Dialog open={dialogOpen} onClose={handleDialogCancel}>
|
|
65
|
+
<DialogTitle>Workflow editor</DialogTitle>
|
|
66
|
+
<DialogContent>
|
|
67
|
+
<FormControl sx={{ width: 300 }} >
|
|
68
|
+
<TextField sx={{ marginTop: 1 }} id="step-wf-name" fullWidth label="Unique name" size='small' variant="outlined" value={component?.name} onChange={(event) => { handleStepConfigChange("name", event.target.value) }} />
|
|
69
|
+
<TextField sx={{ marginTop: 1 }} id="step-wf-description" fullWidth label="Description" size='small' variant="outlined" value={component?.description} onChange={(event) => { handleStepConfigChange("description", event.target.value) }} />
|
|
70
|
+
</FormControl>
|
|
71
|
+
</DialogContent>
|
|
72
|
+
<DialogActions>
|
|
73
|
+
<Button variant="outlined" size="small" onClick={handleDialogSave}>Save</Button>
|
|
74
|
+
<Button variant="outlined" size="small" onClick={handleDialogCancel}>Cancel</Button>
|
|
75
|
+
</DialogActions>
|
|
76
|
+
</Dialog>
|
|
77
|
+
</React.Fragment>
|
|
78
|
+
)
|
|
79
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
body {
|
|
2
|
+
margin: 0;
|
|
3
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
|
4
|
+
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
|
5
|
+
sans-serif;
|
|
6
|
+
-webkit-font-smoothing: antialiased;
|
|
7
|
+
-moz-osx-font-smoothing: grayscale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
code {
|
|
11
|
+
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
|
12
|
+
monospace;
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom/client';
|
|
3
|
+
import './index.css';
|
|
4
|
+
import App from './App';
|
|
5
|
+
import CssBaseline from '@mui/material/CssBaseline';
|
|
6
|
+
|
|
7
|
+
const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
8
|
+
root.render(
|
|
9
|
+
<React.Fragment>
|
|
10
|
+
<CssBaseline />
|
|
11
|
+
<App />
|
|
12
|
+
</React.Fragment>
|
|
13
|
+
);
|