From 16f7a7f6909dbe16908d1be2e1fa03d3bddd17b5 Mon Sep 17 00:00:00 2001
From: Markus Scheidgen <markus.scheidgen@gmail.com>
Date: Fri, 20 Mar 2020 17:31:53 +0100
Subject: [PATCH] Parser optimizations.

---
 wien2kparser/parser_wien2k.py        | 59 +++++++++-------------------
 wien2kparser/setup_paths.py          | 20 ----------
 wien2kparser/wien2k_parser_in0.py    |  1 -
 wien2kparser/wien2k_parser_in1.py    |  1 -
 wien2kparser/wien2k_parser_in1c.py   |  1 -
 wien2kparser/wien2k_parser_in2.py    |  1 -
 wien2kparser/wien2k_parser_in2c.py   |  1 -
 wien2kparser/wien2k_parser_struct.py |  1 -
 8 files changed, 19 insertions(+), 66 deletions(-)
 delete mode 100644 wien2kparser/setup_paths.py

diff --git a/wien2kparser/parser_wien2k.py b/wien2kparser/parser_wien2k.py
index d2c53f8..f496ada 100644
--- a/wien2kparser/parser_wien2k.py
+++ b/wien2kparser/parser_wien2k.py
@@ -13,9 +13,9 @@ import wien2kparser.wien2k_parser_in1c as wien2k_parser_in1c
 import wien2kparser.wien2k_parser_in2c as wien2k_parser_in2c
 import wien2kparser.wien2k_parser_in1 as wien2k_parser_in1
 import wien2kparser.wien2k_parser_in2 as wien2k_parser_in2
-import wien2kparser.setup_paths as setup_paths
 import logging as _logging
 
+from nomad.parsing.legacy import CoESimpleMatcherParser
 
 ################################################################
 # This is the parser for the main output file (.scf) of WIEN2k.
@@ -266,47 +266,26 @@ mainFileDescription = SM(
     ])
 
 
-# which values to cache or forward (mapping meta name -> CachingLevel)
+class Wien2kParser(CoESimpleMatcherParser):
 
-cachingLevelForMetaName = {
+    def metainfo_env(self):
+        from .metainfo import m_env
+        return m_env
 
-    "XC_functional_name": CachingLevel.ForwardAndCache,
-    "energy_total": CachingLevel.ForwardAndCache
+    def create_super_context(self):
+        return Wien2kContext()
 
- }
+    def create_simple_matcher(self):
+        return mainFileDescription
 
-# loading metadata from nomad-meta-info/meta_info/nomad_meta_info/fhi_aims.nomadmetainfo.json
+    def create_parser_description(self):
+        return {
+            "name": "Wien2k",
+            "version": "1.0"
+        }
 
-parserInfo = {
-  "name": "Wien2k",
-  "version": "1.0"
-}
-
-class Wien2kParser():
-    """ A proper class envolop for running this parser from within python. """
-    def __init__(self, backend, **kwargs):
-        self.backend_factory = backend
-
-    def parse(self, mainfile):
-        from unittest.mock import patch
-        _logging.getLogger('nomadcore').setLevel(_logging.WARNING)
-        backend = self.backend_factory("wien2k.nomadmetainfo.json")
-        with patch.object(sys, 'argv', ['<exe>', '--uri', 'nmd://uri', mainfile]):
-            mainFunction(
-                mainFileDescription,
-                None,
-                parserInfo,
-                cachingLevelForMetaName = cachingLevelForMetaName,
-                superContext=Wien2kContext(),
-                superBackend=backend)
-
-        return backend
-
-
-if __name__ == "__main__":
-    import metainfo
-    metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(metainfo.__file__)), "wien2k.nomadmetainfo.json"))
-    metaInfoEnv, warnings = loadJsonFile(filePath = metaInfoPath, dependencyLoader = None, extraArgsHandling = InfoKindEl.ADD_EXTRA_ARGS, uri = None)
-
-    superContext = Wien2kContext()
-    mainFunction(mainFileDescription, metaInfoEnv, parserInfo, superContext = superContext)
+    def create_caching_levels(self):
+        return {
+            "XC_functional_name": CachingLevel.ForwardAndCache,
+            "energy_total": CachingLevel.ForwardAndCache
+        }
diff --git a/wien2kparser/setup_paths.py b/wien2kparser/setup_paths.py
deleted file mode 100644
index ed289a0..0000000
--- a/wien2kparser/setup_paths.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2016-2018 Daria Tomecka, Fawzi Mohamed
-# 
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-# 
-#     http://www.apache.org/licenses/LICENSE-2.0
-# 
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-import sys, os, os.path
-baseDir = os.path.dirname(os.path.abspath(__file__))
-commonDir = os.path.normpath(os.path.join(baseDir,"../../../../python-common/common/python"))
-
-if not commonDir in sys.path:
-    sys.path.insert(0, commonDir)
diff --git a/wien2kparser/wien2k_parser_in0.py b/wien2kparser/wien2k_parser_in0.py
index f3de4f7..73c49c6 100644
--- a/wien2kparser/wien2k_parser_in0.py
+++ b/wien2kparser/wien2k_parser_in0.py
@@ -1,5 +1,4 @@
 from builtins import object
-import wien2kparser.setup_paths as setup_paths
 from nomadcore.simple_parser import mainFunction, CachingLevel
 from nomadcore.simple_parser import SimpleMatcher as SM
 from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
diff --git a/wien2kparser/wien2k_parser_in1.py b/wien2kparser/wien2k_parser_in1.py
index e8dfdcd..9680524 100644
--- a/wien2kparser/wien2k_parser_in1.py
+++ b/wien2kparser/wien2k_parser_in1.py
@@ -1,5 +1,4 @@
 from builtins import object
-import wien2kparser.setup_paths as setup_paths
 from nomadcore.simple_parser import mainFunction, CachingLevel
 from nomadcore.simple_parser import SimpleMatcher as SM
 from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
diff --git a/wien2kparser/wien2k_parser_in1c.py b/wien2kparser/wien2k_parser_in1c.py
index 95c862e..1a9ce54 100644
--- a/wien2kparser/wien2k_parser_in1c.py
+++ b/wien2kparser/wien2k_parser_in1c.py
@@ -1,5 +1,4 @@
 from builtins import object
-import wien2kparser.setup_paths as setup_paths
 from nomadcore.simple_parser import mainFunction, CachingLevel
 from nomadcore.simple_parser import SimpleMatcher as SM
 from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
diff --git a/wien2kparser/wien2k_parser_in2.py b/wien2kparser/wien2k_parser_in2.py
index 452918a..46a3f75 100644
--- a/wien2kparser/wien2k_parser_in2.py
+++ b/wien2kparser/wien2k_parser_in2.py
@@ -1,5 +1,4 @@
 from builtins import object
-import wien2kparser.setup_paths as setup_paths
 from nomadcore.simple_parser import mainFunction, CachingLevel
 from nomadcore.simple_parser import SimpleMatcher as SM
 from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
diff --git a/wien2kparser/wien2k_parser_in2c.py b/wien2kparser/wien2k_parser_in2c.py
index 693a62d..07a10ae 100644
--- a/wien2kparser/wien2k_parser_in2c.py
+++ b/wien2kparser/wien2k_parser_in2c.py
@@ -1,5 +1,4 @@
 from builtins import object
-import wien2kparser.setup_paths as setup_paths
 from nomadcore.simple_parser import mainFunction, CachingLevel
 from nomadcore.simple_parser import SimpleMatcher as SM
 from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
diff --git a/wien2kparser/wien2k_parser_struct.py b/wien2kparser/wien2k_parser_struct.py
index 27ffa52..c6b6627 100644
--- a/wien2kparser/wien2k_parser_struct.py
+++ b/wien2kparser/wien2k_parser_struct.py
@@ -1,5 +1,4 @@
 from builtins import object
-import wien2kparser.setup_paths as setup_paths
 from nomadcore.simple_parser import mainFunction, CachingLevel
 from nomadcore.simple_parser import SimpleMatcher as SM
 from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
-- 
GitLab