Queer European MD passionate about IT
Browse Source

Method to add a table and its columns to and ` ObjectWithDatabase`

Davte 1 year ago
parent
commit
55b47ed1f7
2 changed files with 31 additions and 1 deletions
  1. 1 1
      davtelepot/__init__.py
  2. 30 0
      davtelepot/database.py

+ 1 - 1
davtelepot/__init__.py

@@ -11,7 +11,7 @@ __author__ = "Davide Testa"
 __email__ = "davide@davte.it"
 __credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
 __license__ = "GNU General Public License v3.0"
-__version__ = "2.8.8"
+__version__ = "2.8.9"
 __maintainer__ = "Davide Testa"
 __contact__ = "t.me/davte"
 

+ 30 - 0
davtelepot/database.py

@@ -2,6 +2,7 @@
 
 # Standard library modules
 import logging
+from typing import Tuple
 
 # Third party modules
 import dataset
@@ -71,3 +72,32 @@ class ObjectWithDatabase(object):
                     )
                 except Exception as e:
                     logging.error(f"{e}")
+
+    def add_table_and_columns_if_not_existent(self,
+                                              table_name: str,
+                                              columns: Tuple[
+                                                  Tuple[str,
+                                                        dataset.database.Types],
+                                                  ...] = None):
+        """Create table (if it does not exist) and add given columns (if missing).
+
+        @param table_name: Table name (string)
+        @param columns: Table columns as tuples of column name and type
+        @return: None
+        """
+        if table_name not in self.db.tables:
+            table = self.db.create_table(table_name=table_name)
+            logging.info(f"Created table `{table_name}`")
+        else:
+            table = self.db[table_name]
+        if columns is None:
+            columns = []
+        for column_name, column_type in columns:
+            if not table.has_column(column_name):
+                table.create_column(
+                    column_name,
+                    column_type
+                )
+                logging.info(f"Added column `{column_name}` "
+                             f"(type `{column_type}`) "
+                             f"to table `{table_name}`")