From 81d2b4dfc5ff50fda8b8084c7628583135edc2c9 Mon Sep 17 00:00:00 2001
From: Alexander Kreft <akreft@trineo.org>
Date: Thu, 16 Sep 2021 11:47:49 +0200
Subject: [PATCH] DEP: deprecate yamlapi

---
 CHANGELOG.md              |  8 ++++
 src/caosdb/yamlapi.py     | 38 +++++++++++++++--
 unittests/test_yamlapi.py | 88 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 130 insertions(+), 4 deletions(-)
 create mode 100644 unittests/test_yamlapi.py

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1dd84c29..16997415 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -23,6 +23,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ### Deprecated ###
 
 * `id_query(ids)` in apiutils
+* The whole yamlapi with the following functions:
+  * `append_sublist` 
+  * `kv_to_xml`
+  * `dict_to_xml`
+  * `yaml_to_xml`
+  * `process`
+  * `yaml_file_to_xml`
+  * `insert_yaml_file`
 
 ### Removed ###
 
diff --git a/src/caosdb/yamlapi.py b/src/caosdb/yamlapi.py
index 9a69a527..6b99b742 100644
--- a/src/caosdb/yamlapi.py
+++ b/src/caosdb/yamlapi.py
@@ -22,7 +22,11 @@
 # ** end header
 #
 
-"""YAML interface for the database (caosdb)"""
+""" YAML interface for the database (caosdb) """
+""" !!! Deprecated !!! """
+
+
+
 
 import yaml
 from lxml import etree
@@ -31,9 +35,12 @@ import re
 import caosdb
 import caosdb.common.utils as utils
 from caosdb.connection.connection import get_connection
-
-
+import warnings
 def append_sublist(v, newel, def_entity_type):
+    warnings.warn("""
+                  This function is deprecated and will be removed with the next release.
+                  Please use caosdb-advanced-user-tools/models/data_model.py for a
+                  similar functionality.""", DeprecationWarning)
     if v is None:
         return
     for i in v:
@@ -46,6 +53,10 @@ def append_sublist(v, newel, def_entity_type):
 
 
 def kv_to_xml(k, v):
+    warnings.warn("""
+                  This function is deprecated and will be removed with the next release.
+                  Please use caosdb-advanced-user-tools/models/data_model.py for a
+                  similar functionality.""", DeprecationWarning)
     newel = Element(k)
     # code.interact(local=locals())
     if isinstance(v, list):  # Top level loop
@@ -69,10 +80,18 @@ def dict_to_xml(d):
     d: The dictionary (possibly loaded from yaml)
        to convert to caosdb-xml.
     """
+    warnings.warn("""
+                  This function is deprecated and will be removed with the next release.
+                  Please use caosdb-advanced-user-tools/models/data_model.py for a
+                  similar functionality.""", DeprecationWarning)
     return kv_to_xml("Entities", d)
 
 
 def yaml_to_xml(yamlstr):
+    warnings.warn("""
+                  This function is deprecated and will be removed with the next release.
+                  Please use caosdb-advanced-user-tools/models/data_model.py for a
+                  similar functionality.""", DeprecationWarning)
     """Load a yaml document from yamlstr and converts it to XML.
 
     Parameters
@@ -86,6 +105,10 @@ def yaml_to_xml(yamlstr):
 
 def process(text):
     """Do some replacements on the original file to obtain valid yaml."""
+    warnings.warn("""
+                  This function is deprecated and will be removed with the next release.
+                  Please use caosdb-advanced-user-tools/models/data_model.py for a
+                  similar functionality.""", DeprecationWarning)
     processed = re.sub(
         "^(\\s*)-\\s*\\{?(.*)\\}?\\s*$",
         "\\1- {\\2}",
@@ -98,6 +121,10 @@ def process(text):
 
 
 def yaml_file_to_xml(yamlfilename):
+    warnings.warn("""
+                  This function is deprecated and will be removed with the next release.
+                  Please use caosdb-advanced-user-tools/models/data_model.py for a
+                  similar functionality.""", DeprecationWarning)
     with open(yamlfilename, "r") as f:
         return yaml_to_xml(process(f.read()))
 
@@ -108,7 +135,10 @@ def insert_yaml_file(yamlfilename, simulate=False):
     Set 'simulate' to True if you don't actually want to insert the xml,
     but only receive what would be sent.
     """
-    con = get_connection()
+    warnings.warn("""
+                  This function is deprecated and will be removed with the next release.
+                  Please use caosdb-advanced-user-tools/models/data_model.py for a
+                  similar functionality.""", DeprecationWarning)
     prs = etree.XMLParser(remove_blank_text=True)
     sent_xml = etree.tostring(
         etree.fromstring(
diff --git a/unittests/test_yamlapi.py b/unittests/test_yamlapi.py
new file mode 100644
index 00000000..4af8a53b
--- /dev/null
+++ b/unittests/test_yamlapi.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+#
+# ** header v3.0
+# This file is a part of the CaosDB Project.
+#
+# Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+# Copyright (C) 2021 Alexander Kreft <akreft@trineo.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# ** end header
+#
+
+import os
+import warnings
+import tempfile
+from caosdb.yamlapi import (append_sublist, kv_to_xml,
+                            dict_to_xml, yaml_to_xml,
+                            process, yaml_file_to_xml)
+
+with warnings.catch_warnings(record=True) as w:
+    # Cause all warnings to always be triggered.
+    warnings.simplefilter("always")
+
+    append_sublist(None, None, None)
+
+    assert issubclass(w[-1].category, DeprecationWarning)
+    assert "This function is deprecated" in str(w[-1].message)
+
+with warnings.catch_warnings(record=True) as w:
+    # Cause all warnings to always be triggered.
+    warnings.simplefilter("always")
+
+    kv_to_xml("None", "None")
+    assert len(w) == 1
+    assert issubclass(w[-1].category, DeprecationWarning)
+    assert "This function is deprecated" in str(w[-1].message)
+
+with warnings.catch_warnings(record=True) as w:
+    # Cause all warnings to always be triggered.
+    warnings.simplefilter("always")
+
+    dict_to_xml(None)
+
+    assert issubclass(w[-1].category, DeprecationWarning)
+    assert "This function is deprecated" in str(w[-1].message)
+
+with warnings.catch_warnings(record=True) as w:
+    # Cause all warnings to always be triggered.
+    warnings.simplefilter("always")
+
+    yaml_to_xml("None")
+
+    assert issubclass(w[-1].category, DeprecationWarning)
+    assert "This function is deprecated" in str(w[-1].message)
+
+with warnings.catch_warnings(record=True) as w:
+    # Cause all warnings to always be triggered.
+    warnings.simplefilter("always")
+
+    process("None")
+
+    assert issubclass(w[-1].category, DeprecationWarning)
+    assert "This function is deprecated" in str(w[-1].message)
+
+with warnings.catch_warnings(record=True) as w:
+    # Cause all warnings to always be triggered.
+    warnings.simplefilter("always")
+
+    with tempfile.TemporaryDirectory() as tmpdirname:
+        tmpfile = os.path.join(tmpdirname, 'yamlfile')
+        with open(tmpfile, 'w') as tf:
+            tf.write("")
+        yaml_file_to_xml(tmpfile)
+
+    assert issubclass(w[-1].category, DeprecationWarning)
+    assert "This function is deprecated" in str(w[-1].message)
-- 
GitLab