From 8767d00e3dc2faf1e2354107e5544663bcdea24c Mon Sep 17 00:00:00 2001
From: Mathieu Loiseau <mathieu.loiseau@liris.cnrs.fr>
Date: Fri, 24 Mar 2023 15:17:24 +0100
Subject: [PATCH] With log sqlite db

---
 wikstraklog.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 wikstraktor.py |  7 +++++--
 2 files changed, 53 insertions(+), 2 deletions(-)
 create mode 100755 wikstraklog.py

diff --git a/wikstraklog.py b/wikstraklog.py
new file mode 100755
index 0000000..239ee01
--- /dev/null
+++ b/wikstraklog.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python3
+import sqlite3
+
+class Wikstraklog:
+    table_name = "Wikstraklog"
+    def __init__(self, wikstraktor_version, word_language, wiki_language, file="wikstraktor.sqlite"):
+        self.__connector__ = sqlite3.connect(file)
+        self.__cursor__ = self.__connector__.cursor()
+        if self.__execute__(f"SELECT name FROM sqlite_master WHERE type='table' AND name='{Wikstraklog.table_name}';").fetchone() is None :
+            self.__execute__(f"""CREATE TABLE "{Wikstraklog.table_name}" (
+	"Date"	DATETIME	DEFAULT CURRENT_TIMESTAMP,
+	"Wikstraktor_version"	TEXT NOT NULL,
+	"Word_language"	TEXT NOT NULL,
+	"Wiki_language"	TEXT NOT NULL,
+	"Word_form"	TEXT NOT NULL,
+	"Wiki_permanent_id"	INTEGER NOT NULL,
+	"Caller_method"	TEXT,
+	"Content"	TEXT
+);""")
+        self.wx_v = wikstraktor_version
+        self.w_l = word_language
+        self.wk_l = wiki_language
+
+    def set_context(self, word, permanentId):
+        self.cur_w = word
+        self.cur_pid = permanentId
+
+    def __execute__(self, query, params = None):
+        if params == None:
+            res = self.__cursor__.execute(query)
+        else:
+            res = self.__cursor__.execute(query, params)
+        self.__connector__.commit()
+        return res
+
+    def add_log(self, caller, content, word=None, permanentId=None):
+        if word == None:
+            word = self.cur_w
+        if permanentId == None:
+            permanentId = self.cur_pid
+        res = self.__execute__(f"INSERT INTO `{Wikstraklog.table_name}` (`Wikstraktor_version`, `Word_language`, `Wiki_language`, `Word_form`, `Wiki_permanent_id`, `Caller_method`, `Content`) VALUES (?, ?, ?, ?, ?, ?, ?)", (self.wx_v, self.w_l, self.wk_l, word, permanentId, caller, str(content)))
+        return res
+
+if __name__ == "__main__":
+    from wikstraktor_version import version as the_version
+    log = Wikstraklog(the_version, "en", "fr")
+    log.set_context("blue", 123456789)
+    log.add_log("exampleMethod", "no relevant content")
diff --git a/wikstraktor.py b/wikstraktor.py
index b567c94..d7d8d1e 100755
--- a/wikstraktor.py
+++ b/wikstraktor.py
@@ -3,6 +3,8 @@ import pywikibot
 import wikitextparser
 import importlib
 import json
+from wikstraktor_version import version as the_version
+from wikstraklog import Wikstraklog
 
 #ICITE : fr marche pas, en prend des trucs vides à virer (cf. yellow… def & example)
 
@@ -447,8 +449,8 @@ class Wikstraktor:
 		try:
 			m_name = f"{wiki_language}_{entry_language}".capitalize()
 			instance = getattr(importlib.import_module(f"parsers.{m_name.lower()}"), f"{m_name}_straktor")()
-			from wikstraktor_version import version as v
-			instance.version = v
+			instance.version = the_version
+			instance.log = Wikstraklog(the_version, entry_language, wiki_language)
 		except ModuleNotFoundError:
 			print(f"parsers.{m_name.lower()} module not found or {m_name}_straktor not found in module")
 			instance = None
@@ -490,6 +492,7 @@ class Wikstraktor:
 
 	def parse(self, entry, v_id, sections):
 		self.parserContext = ParserContext(entry, self.entry_language, self.wiki_language, v_id, self.version)
+		self.log.set_context(entry, v_id)
 		for s in sections:
 			if s.title != None :
 				#handle wiki context
-- 
GitLab