modulitiz-micro 2.41.0__py311-none-any.whl → 2.42.0__py311-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.
Files changed (107) hide show
  1. modulitiz_micro/ModuloMeteo.py +72 -72
  2. modulitiz_micro/ModuloSeriale.py +70 -70
  3. modulitiz_micro/ModuloTarghe.py +47 -46
  4. modulitiz_micro/database/AbstractDatabaseService.py +13 -13
  5. modulitiz_micro/database/AbstractSql.py +69 -69
  6. modulitiz_micro/database/ModuloSqlOracle.py +19 -19
  7. modulitiz_micro/database/ModuloSqlServer.py +43 -43
  8. modulitiz_micro/database/eccezioni/EccezioneDbNoData.py +6 -6
  9. modulitiz_micro/database/mysql/AbstractBasicMysql.py +114 -114
  10. modulitiz_micro/database/mysql/ModuloMysql.py +163 -163
  11. modulitiz_micro/database/mysql/MysqlCommonConverter.py +47 -47
  12. modulitiz_micro/database/mysql/eccezioni/EccezioneMysqlOffline.py +6 -6
  13. modulitiz_micro/database/sqlite/AbstractBasicSQLite.py +114 -114
  14. modulitiz_micro/database/sqlite/ModuloSQLite.py +82 -82
  15. modulitiz_micro/eccezioni/EccezioneCtrlC.py +7 -7
  16. modulitiz_micro/eccezioni/EccezioneScheduler.py +7 -7
  17. modulitiz_micro/eccezioni/http/EccezioneHttp.py +8 -8
  18. modulitiz_micro/eccezioni/http/EccezioneHttp404.py +7 -7
  19. modulitiz_micro/eccezioni/http/EccezioneHttpGeneric.py +7 -7
  20. modulitiz_micro/files/cache/DatabaseCache.py +91 -91
  21. modulitiz_micro/files/cache/decorators/cacheRam.py +26 -26
  22. modulitiz_micro/files/git/ModuloGit.py +28 -28
  23. modulitiz_micro/files/git/decorators/catchAndRaiseGitExceptions.py +19 -19
  24. modulitiz_micro/files/git/exceptions/EccezioneGit.py +7 -7
  25. modulitiz_micro/gestionedom/GestioneDom.py +44 -44
  26. modulitiz_micro/iot/ModuleIotDevice.py +4 -4
  27. modulitiz_micro/keylogger/EccezioneKeyLogger.py +7 -7
  28. modulitiz_micro/keylogger/ModuloKeylogger.py +73 -73
  29. modulitiz_micro/rete/ModuloNetworking.py +72 -72
  30. modulitiz_micro/rete/ModuloOpenVpn.py +15 -15
  31. modulitiz_micro/rete/email/EmailBean.py +5 -5
  32. modulitiz_micro/rete/email/ModuloEmail.py +90 -90
  33. modulitiz_micro/rete/http/ModuloHttp.py +119 -119
  34. modulitiz_micro/rete/http/ModuloHttpConnectionSafe.py +91 -91
  35. modulitiz_micro/rete/http/ModuloHttpUtils.py +69 -69
  36. modulitiz_micro/rete/http/beans/HttpResponseBean.py +5 -5
  37. modulitiz_micro/rete/http/decorators/catchAndRaiseHttpExceptions.py +22 -22
  38. modulitiz_micro/rete/ntp/AbstractModuloNtp.py +73 -73
  39. modulitiz_micro/rete/ntp/ModuloNtpIt.py +8 -8
  40. modulitiz_micro/rete/socketserver/AbstractBasicGetSocketServer.py +35 -35
  41. modulitiz_micro/rete/socketserver/AbstractSocketServer.py +267 -267
  42. modulitiz_micro/rete/ssl/ModuloSsl.py +56 -56
  43. modulitiz_micro/sistema/ModuloEnvVars.py +34 -34
  44. modulitiz_micro/sistema/ModuloSystemPipe.py +67 -67
  45. modulitiz_micro/social/telegram/AbstractModuloTelegram.py +53 -53
  46. modulitiz_micro/social/telegram/ModuloTelegramSimple.py +26 -26
  47. modulitiz_micro/util/beans/globalvar/AbstractBasicGlobalVarBean.py +15 -15
  48. modulitiz_micro/util/scheduler/ModuleScheduler.py +26 -26
  49. {modulitiz_micro-2.41.0.dist-info → modulitiz_micro-2.42.0.dist-info}/METADATA +58 -66
  50. modulitiz_micro-2.42.0.dist-info/RECORD +56 -0
  51. {modulitiz_micro-2.41.0.dist-info → modulitiz_micro-2.42.0.dist-info}/WHEEL +1 -1
  52. {modulitiz_micro-2.41.0.dist-info → modulitiz_micro-2.42.0.dist-info/licenses}/LICENSE +21 -21
  53. modulitiz_micro/ModuleEnum.py +0 -8
  54. modulitiz_micro/ModuloBase64.py +0 -61
  55. modulitiz_micro/ModuloColorText.py +0 -35
  56. modulitiz_micro/ModuloDate.py +0 -327
  57. modulitiz_micro/ModuloFunzioni.py +0 -71
  58. modulitiz_micro/ModuloListe.py +0 -150
  59. modulitiz_micro/ModuloNumeri.py +0 -127
  60. modulitiz_micro/ModuloPyinstaller.py +0 -29
  61. modulitiz_micro/ModuloStatistiche.py +0 -31
  62. modulitiz_micro/ModuloStringhe.py +0 -180
  63. modulitiz_micro/android/ModuloAndroid.py +0 -18
  64. modulitiz_micro/android/ModuloAndroidAdb.py +0 -48
  65. modulitiz_micro/android/ModuloAndroidSim.py +0 -130
  66. modulitiz_micro/android/beans/SmsBean.py +0 -12
  67. modulitiz_micro/android/enums/AndroidSmsTypeEnum.py +0 -17
  68. modulitiz_micro/eccezioni/EccezioneBase.py +0 -7
  69. modulitiz_micro/eccezioni/EccezioneRuntime.py +0 -7
  70. modulitiz_micro/eccezioni/EccezioneSoNonSupportato.py +0 -7
  71. modulitiz_micro/files/ModuloFiles.py +0 -173
  72. modulitiz_micro/files/ModuloLogging.py +0 -69
  73. modulitiz_micro/files/ModuloZip.py +0 -42
  74. modulitiz_micro/files/cache/CacheBean.py +0 -5
  75. modulitiz_micro/files/cache/CacheRam.py +0 -29
  76. modulitiz_micro/init/AbstractBasicInit.py +0 -27
  77. modulitiz_micro/init/AbstractInit.py +0 -11
  78. modulitiz_micro/multithread/ModuloThread.py +0 -26
  79. modulitiz_micro/multithread/ModuloThreadLogger.py +0 -8
  80. modulitiz_micro/multithread/ModuloThreadWithCallbackError.py +0 -25
  81. modulitiz_micro/nlp/ModuloNlp.py +0 -36
  82. modulitiz_micro/nlp/ModuloNlpDateAndTime.py +0 -59
  83. modulitiz_micro/sistema/EnvVarsEnum.py +0 -9
  84. modulitiz_micro/sistema/ModuloSystem.py +0 -298
  85. modulitiz_micro/util/beans/conf/AbstractBasicConfBean.py +0 -11
  86. modulitiz_micro/util/beans/conf/AbstractConfBean.py +0 -16
  87. modulitiz_micro/util/beans/fileconf/AbstractBasicFileConfBean.py +0 -11
  88. modulitiz_micro/util/beans/fileconf/AbstractFileConfBean.py +0 -13
  89. modulitiz_micro/util/beans/globalvar/AbstractGlobalVarBean.py +0 -34
  90. modulitiz_micro/util/decorators/noAwait.py +0 -23
  91. modulitiz_micro/util/pip/AbstractModuloPip.py +0 -41
  92. modulitiz_micro/util/pip/ModuloPip.py +0 -49
  93. modulitiz_micro/util/spooler/AbstractSpooler.py +0 -14
  94. modulitiz_micro/util/spooler/Spooler.py +0 -18
  95. modulitiz_micro/util/spooler/beans/QueueBean.py +0 -8
  96. modulitiz_micro/util/spooler/decorators/spooler.py +0 -49
  97. modulitiz_micro/util/spooler/eccezioni/EccezioneSpooler.py +0 -7
  98. modulitiz_micro/util/spooler/eccezioni/EccezioneSpoolerFull.py +0 -7
  99. modulitiz_micro/util/unittesting/AbstractOverrideTestUtil.py +0 -31
  100. modulitiz_micro/util/unittesting/AbstractTestUtil.py +0 -11
  101. modulitiz_micro/util/unittesting/ModuloRunUnitTest.py +0 -25
  102. modulitiz_micro/util/wheel/ModuloBuildWheel.py +0 -118
  103. modulitiz_micro/util/wheel/ModuloCheckTestNamingConvention.py +0 -89
  104. modulitiz_micro/util/wheel/ModuloToml.py +0 -40
  105. modulitiz_micro/util/wheel/ModuloWheel.py +0 -12
  106. modulitiz_micro-2.41.0.dist-info/RECORD +0 -109
  107. {modulitiz_micro-2.41.0.dist-info → modulitiz_micro-2.42.0.dist-info}/top_level.txt +0 -0
@@ -1,72 +1,72 @@
1
- import json
2
-
3
- from modulitiz_micro.ModuloDate import ModuloDate
4
- from modulitiz_micro.ModuloListe import ModuloListe
5
- from modulitiz_micro.eccezioni.http.EccezioneHttpGeneric import EccezioneHttpGeneric
6
- from modulitiz_micro.files.ModuloLogging import ModuloLogging
7
- from modulitiz_micro.rete.http.ModuloHttp import ModuloHttp
8
- from modulitiz_micro.rete.http.ModuloHttpUtils import ModuloHttpUtils
9
-
10
-
11
- class ModuloMeteo(object):
12
- """
13
- Utility di gestione delle previsioni meteo.
14
- """
15
- OPZIONI="lang=it&units=metric"
16
- KEY="appid=e28cd365c35c12e3ed8f2d84e04398c9"
17
-
18
- __URL_BASE="https://api.openweathermap.org"
19
- URL_ATTUALE=__URL_BASE+f"/data/2.5/weather?{OPZIONI}&{KEY}&q="
20
- URL_PREVISIONE=__URL_BASE+f"/data/2.5/forecast?{OPZIONI}&{KEY}&q="
21
-
22
- def __init__(self,logger:ModuloLogging):
23
- self.__logger=logger
24
-
25
- def getPrevisionePioggiaFinoADomani(self,citta:str,codStato:str)->list|None:
26
- """
27
- Chiede le previsioni fino al giorno dopo e mostra solo i risultati che dicono che pioverà.
28
- """
29
- adesso=ModuloDate.now()
30
- domani=ModuloDate.setEndOfDay(ModuloDate.plusMinusDays(adesso,1))
31
- oreDiff=ModuloDate.hoursDiff(domani, adesso)
32
- elementi=self.__getPrevisioni(citta, codStato,True,None,oreDiff)
33
- if elementi is None:
34
- return None
35
- # filtro gli elementi
36
- lista=[]
37
- for elem in elementi:
38
- if ModuloListe.collectionSafeGet(elem,'rain') is not None:
39
- lista.append(elem)
40
- return lista
41
-
42
- def __getPrevisioni(self,citta:str,codStato:str,includiPrimaPrevisione:bool,stepHours:int|None,maxHours:int)->list|None:
43
- cittaEStato=citta+","+codStato
44
- url=self.URL_PREVISIONE+ModuloHttpUtils.encodeUrl(cittaEStato)
45
- http=ModuloHttp(url,self.__logger,False)
46
- try:
47
- response=http.doGet(0,False)
48
- except EccezioneHttpGeneric:
49
- return None
50
- responseObj=json.loads(response.responseBody)
51
- lista=responseObj['list']
52
- maxLista=len(lista)
53
- # calcolo gli indici
54
- if maxHours is not None:
55
- maxInd=int(maxHours/3)+1
56
- if maxInd>=maxLista:
57
- maxInd=maxLista-1
58
- else:
59
- maxInd=maxLista-1
60
- if stepHours is None:
61
- step=1
62
- else:
63
- step=int(stepHours/3)
64
- inds=list(range(4,maxInd,step))
65
- if includiPrimaPrevisione:
66
- inds.insert(0,1)
67
- # processo il json
68
- output=[]
69
- for ind in inds:
70
- elem=lista[ind]
71
- output.append(elem)
72
- return output
1
+ import json
2
+
3
+ from modulitiz_nano.ModuloDate import ModuloDate
4
+ from modulitiz_nano.ModuloListe import ModuloListe
5
+ from modulitiz_micro.eccezioni.http.EccezioneHttpGeneric import EccezioneHttpGeneric
6
+ from modulitiz_nano.files.ModuloLogging import ModuloLogging
7
+ from modulitiz_micro.rete.http.ModuloHttp import ModuloHttp
8
+ from modulitiz_micro.rete.http.ModuloHttpUtils import ModuloHttpUtils
9
+
10
+
11
+ class ModuloMeteo(object):
12
+ """
13
+ Utility di gestione delle previsioni meteo.
14
+ """
15
+ OPZIONI="lang=it&units=metric"
16
+ KEY="appid=e28cd365c35c12e3ed8f2d84e04398c9"
17
+
18
+ __URL_BASE="https://api.openweathermap.org"
19
+ URL_ATTUALE=__URL_BASE+f"/data/2.5/weather?{OPZIONI}&{KEY}&q="
20
+ URL_PREVISIONE=__URL_BASE+f"/data/2.5/forecast?{OPZIONI}&{KEY}&q="
21
+
22
+ def __init__(self,logger:ModuloLogging):
23
+ self.__logger=logger
24
+
25
+ def getPrevisionePioggiaFinoADomani(self,citta:str,codStato:str)->list|None:
26
+ """
27
+ Chiede le previsioni fino al giorno dopo e mostra solo i risultati che dicono che pioverà.
28
+ """
29
+ adesso=ModuloDate.now()
30
+ domani=ModuloDate.setEndOfDay(ModuloDate.plusMinusDays(adesso,1))
31
+ oreDiff=ModuloDate.hoursDiff(domani, adesso)
32
+ elementi=self.__getPrevisioni(citta, codStato,True,None,oreDiff)
33
+ if elementi is None:
34
+ return None
35
+ # filtro gli elementi
36
+ lista=[]
37
+ for elem in elementi:
38
+ if ModuloListe.collectionSafeGet(elem,'rain') is not None:
39
+ lista.append(elem)
40
+ return lista
41
+
42
+ def __getPrevisioni(self,citta:str,codStato:str,includiPrimaPrevisione:bool,stepHours:int|None,maxHours:int)->list|None:
43
+ cittaEStato=citta+","+codStato
44
+ url=self.URL_PREVISIONE+ModuloHttpUtils.encodeUrl(cittaEStato)
45
+ http=ModuloHttp(url,self.__logger,False)
46
+ try:
47
+ response=http.doGet(0,False)
48
+ except EccezioneHttpGeneric:
49
+ return None
50
+ responseObj=json.loads(response.responseBody)
51
+ lista=responseObj['list']
52
+ maxLista=len(lista)
53
+ # calcolo gli indici
54
+ if maxHours is not None:
55
+ maxInd=int(maxHours/3)+1
56
+ if maxInd>=maxLista:
57
+ maxInd=maxLista-1
58
+ else:
59
+ maxInd=maxLista-1
60
+ if stepHours is None:
61
+ step=1
62
+ else:
63
+ step=int(stepHours/3)
64
+ inds=list(range(4,maxInd,step))
65
+ if includiPrimaPrevisione:
66
+ inds.insert(0,1)
67
+ # processo il json
68
+ output=[]
69
+ for ind in inds:
70
+ elem=lista[ind]
71
+ output.append(elem)
72
+ return output
@@ -1,70 +1,70 @@
1
- import serial
2
-
3
- from modulitiz_micro.ModuloStringhe import ModuloStringhe
4
- from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
5
-
6
-
7
- class ModuloSeriale(object):
8
- """
9
- Utility di gestione dela connessione seriale RS232
10
- """
11
-
12
- COM_PORTS=[]
13
-
14
- def __init__(self):
15
- self.connessione=None
16
-
17
- @classmethod
18
- def populate(cls):
19
- """
20
- Popola le variabili di classe.
21
- """
22
- if ModuloSystem.isWindows():
23
- COM_PORTS=cls.__generaElencoPorte("COM",1)
24
- else:
25
- COM_PORTS=cls.__generaElencoPorte("/dev/tty",0)
26
- COM_PORTS.extend(cls.__generaElencoPorte("/dev/ttyS",0))
27
- COM_PORTS.extend(cls.__generaElencoPorte("/dev/ttyUSB",0))
28
- cls.COM_PORTS=COM_PORTS
29
-
30
- def apriPrimaPortaDisponibile(self):
31
- """
32
- Prova ad aprire la prima porta disponibile che trova.
33
- """
34
- for porta in self.COM_PORTS:
35
- try:
36
- connessioneSeriale=serial.Serial(port=porta, baudrate=9600, rtscts=True, dsrdtr=True, exclusive=True)
37
- connessioneSeriale.dtr=True
38
- connessioneSeriale.dtr=False
39
- self.connessione=connessioneSeriale
40
- return
41
- except serial.SerialException:
42
- pass
43
-
44
- def isOpen(self)->bool:
45
- """
46
- Controlla se la connessione alla porta è aperta.
47
- """
48
- return self.connessione is not None and self.connessione.isOpen()
49
-
50
- def read(self, port: str,baudrate: int,exitCallback):
51
- """
52
- Reads serial strings and prints it to standard output.
53
- """
54
- self.connessione=serial.Serial(port,baudrate,timeout=1)
55
- while not exitCallback():
56
- print(self.connessione.readline().decode(ModuloStringhe.CODIFICA_UTF8,"replace"),end="")
57
- self.close()
58
-
59
- def close(self):
60
- """
61
- Chiude la connessione alla porta.
62
- """
63
- if not self.isOpen():
64
- return
65
- self.connessione.close()
66
- self.connessione=None
67
-
68
- @staticmethod
69
- def __generaElencoPorte(prefisso:str,inizio:int)->list:
70
- return [prefisso+str(i) for i in range(inizio,16)]
1
+ import serial
2
+
3
+ from modulitiz_nano.ModuloStringhe import ModuloStringhe
4
+ from modulitiz_nano.sistema.ModuloSystem import ModuloSystem
5
+
6
+
7
+ class ModuloSeriale(object):
8
+ """
9
+ Utility di gestione dela connessione seriale RS232
10
+ """
11
+
12
+ COM_PORTS=[]
13
+
14
+ def __init__(self):
15
+ self.connessione=None
16
+
17
+ @classmethod
18
+ def populate(cls):
19
+ """
20
+ Popola le variabili di classe.
21
+ """
22
+ if ModuloSystem.isWindows():
23
+ COM_PORTS=cls.__generaElencoPorte("COM",1)
24
+ else:
25
+ COM_PORTS=cls.__generaElencoPorte("/dev/tty",0)
26
+ COM_PORTS.extend(cls.__generaElencoPorte("/dev/ttyS",0))
27
+ COM_PORTS.extend(cls.__generaElencoPorte("/dev/ttyUSB",0))
28
+ cls.COM_PORTS=COM_PORTS
29
+
30
+ def apriPrimaPortaDisponibile(self):
31
+ """
32
+ Prova ad aprire la prima porta disponibile che trova.
33
+ """
34
+ for porta in self.COM_PORTS:
35
+ try:
36
+ connessioneSeriale=serial.Serial(port=porta, baudrate=9600, rtscts=True, dsrdtr=True, exclusive=True)
37
+ connessioneSeriale.dtr=True
38
+ connessioneSeriale.dtr=False
39
+ self.connessione=connessioneSeriale
40
+ return
41
+ except OSError:
42
+ pass
43
+
44
+ def isOpen(self)->bool:
45
+ """
46
+ Controlla se la connessione alla porta è aperta.
47
+ """
48
+ return self.connessione is not None and self.connessione.isOpen()
49
+
50
+ def read(self, port: str,baudrate: int,exitCallback):
51
+ """
52
+ Reads serial strings and prints it to standard output.
53
+ """
54
+ self.connessione=serial.Serial(port,baudrate,timeout=1)
55
+ while not exitCallback():
56
+ print(self.connessione.readline().decode(ModuloStringhe.CODIFICA_UTF8,"replace"),end="")
57
+ self.close()
58
+
59
+ def close(self):
60
+ """
61
+ Chiude la connessione alla porta.
62
+ """
63
+ if not self.isOpen():
64
+ return
65
+ self.connessione.close()
66
+ self.connessione=None
67
+
68
+ @staticmethod
69
+ def __generaElencoPorte(prefisso:str,inizio:int)->list:
70
+ return [prefisso+str(i) for i in range(inizio,16)]
@@ -1,46 +1,47 @@
1
- from modulitiz_micro.ModuloNumeri import ModuloNumeri
2
- from modulitiz_micro.ModuloStringhe import ModuloStringhe
3
- from modulitiz_micro.gestionedom.GestioneDom import GestioneDom
4
- from modulitiz_micro.rete.http.ModuloHttp import ModuloHttp
5
-
6
-
7
- class ModuloTarghe(object):
8
- """
9
- Utility di gestione delle targhe delle auto.
10
- """
11
-
12
- URL="https://autokar.it/targhe"
13
-
14
- @classmethod
15
- def getAnno(cls,targa:str)->int|None:
16
- """
17
- Cerca la targa e restituisce approssimativamente l'anno di immatricolazione.
18
- :param targa: la targa dell'auto da cercare.
19
- """
20
- http=ModuloHttp(cls.URL,None,False)
21
- responseBody=http.doGet(3,True).responseBody.decode(ModuloStringhe.CODIFICA_LATIN1)
22
- gestioneDom=GestioneDom(None,responseBody)
23
- elementi=gestioneDom.selector(".entry-content p")
24
- targaIniziale=targa[:2]
25
- for elem in elementi:
26
- anno=cls.__getAnno(elem,targaIniziale)
27
- if anno is not None:
28
- return anno
29
-
30
- @classmethod
31
- def __getAnno(cls,tag,targaIniziale:str)->int|None:
32
- elementi=tag.contents
33
- if len(elementi)!=2:
34
- return None
35
- try:
36
- testo=elementi[0].contents[0]
37
- except AttributeError:
38
- return None
39
- if targaIniziale!=testo:
40
- return None
41
- annoStr=elementi[1].strip()
42
- anno=ModuloNumeri.strToInt(annoStr)
43
- if anno is not None:
44
- return anno
45
- anno=int(annoStr.split(" ")[0])
46
- return anno
1
+ from modulitiz_nano.ModuloNumeri import ModuloNumeri
2
+ from modulitiz_nano.ModuloStringhe import ModuloStringhe
3
+ from modulitiz_micro.gestionedom.GestioneDom import GestioneDom
4
+ from modulitiz_micro.rete.http.ModuloHttp import ModuloHttp
5
+
6
+
7
+ class ModuloTarghe(object):
8
+ """
9
+ Utility di gestione delle targhe delle auto.
10
+ """
11
+
12
+ URL="https://autokar.it/targhe"
13
+
14
+ @classmethod
15
+ def getAnno(cls,targa:str)->int|None:
16
+ """
17
+ Cerca la targa e restituisce approssimativamente l'anno di immatricolazione.
18
+ :param targa: la targa dell'auto da cercare.
19
+ """
20
+ http=ModuloHttp(cls.URL,None,False)
21
+ responseBody=http.doGet(3,True).responseBody.decode(ModuloStringhe.CODIFICA_LATIN1)
22
+ gestioneDom=GestioneDom(None,responseBody)
23
+ elementi=gestioneDom.selector(".entry-content p")
24
+ targaIniziale=targa[:2]
25
+ for elem in elementi:
26
+ anno=cls.__getAnno(elem,targaIniziale)
27
+ if anno is not None:
28
+ return anno
29
+ return None
30
+
31
+ @classmethod
32
+ def __getAnno(cls,tag,targaIniziale:str)->int|None:
33
+ elementi=tag.contents
34
+ if len(elementi)!=2:
35
+ return None
36
+ try:
37
+ testo=elementi[0].contents[0]
38
+ except AttributeError:
39
+ return None
40
+ if targaIniziale!=testo:
41
+ return None
42
+ annoStr=elementi[1].strip()
43
+ anno=ModuloNumeri.strToInt(annoStr)
44
+ if anno is not None:
45
+ return anno
46
+ anno=int(annoStr.split(" ")[0])
47
+ return anno
@@ -1,13 +1,13 @@
1
- import threading
2
- from abc import ABC
3
-
4
- from modulitiz_micro.files.ModuloLogging import ModuloLogging
5
-
6
-
7
- class AbstractDatabaseService(ABC):
8
-
9
- def __init__(self,logger:ModuloLogging):
10
- self._logger=logger
11
- self.lock=threading.Lock()
12
-
13
- self.database=None
1
+ import threading
2
+ from abc import ABC
3
+
4
+ from modulitiz_nano.files.ModuloLogging import ModuloLogging
5
+
6
+
7
+ class AbstractDatabaseService(ABC):
8
+
9
+ def __init__(self,logger:ModuloLogging):
10
+ self._logger=logger
11
+ self.lock=threading.Lock()
12
+
13
+ self.database=None
@@ -1,69 +1,69 @@
1
- import threading
2
- from abc import ABC
3
-
4
- from modulitiz_micro.ModuloStringhe import ModuloStringhe
5
-
6
-
7
- class AbstractSql(ABC):
8
- def __init__(self):
9
- self.connDb=None
10
- self.lock=threading.Lock()
11
-
12
- def commit(self):
13
- """
14
- Use to make modifications permanents.
15
- """
16
- with self.lock:
17
- self.commitNoLock()
18
-
19
- def commitNoLock(self):
20
- """
21
- Use only if lock is made externally.
22
- """
23
- self.connDb.commit()
24
-
25
- def rollback(self):
26
- """
27
- Undo last uncommitted operations.
28
- """
29
- with self.lock:
30
- self.connDb.rollback()
31
-
32
- def initCursor(self):
33
- """
34
- Creates cursor objects, it's needed to read/write database.
35
- """
36
- with self.lock:
37
- cursoreDb=self.connDb.cursor()
38
- return cursoreDb
39
-
40
- def fetchOne(self,cursoreDb):
41
- """
42
- Retrieve first row of query
43
- """
44
- with cursoreDb:
45
- with self.lock:
46
- result=cursoreDb.fetchone()
47
- if not result:
48
- return None
49
- return result[0]
50
-
51
- def count(self,cursoreDb)->int:
52
- with cursoreDb:
53
- with self.lock:
54
- result=cursoreDb.fetchone()
55
- if not result:
56
- return 0
57
- return result[0]
58
-
59
- def close(self):
60
- with self.lock:
61
- if self.connDb is not None:
62
- self.connDb.close()
63
- self.connDb=None
64
-
65
- @staticmethod
66
- def ifEmptyThenNull(testo:str|None)->str|None:
67
- if ModuloStringhe.isEmpty(testo) or testo=="NULL":
68
- return None
69
- return testo
1
+ import threading
2
+ from abc import ABC
3
+
4
+ from modulitiz_nano.ModuloStringhe import ModuloStringhe
5
+
6
+
7
+ class AbstractSql(ABC):
8
+ def __init__(self):
9
+ self.connDb=None
10
+ self.lock=threading.Lock()
11
+
12
+ def commit(self):
13
+ """
14
+ Use to make modifications permanents.
15
+ """
16
+ with self.lock:
17
+ self.commitNoLock()
18
+
19
+ def commitNoLock(self):
20
+ """
21
+ Use only if lock is made externally.
22
+ """
23
+ self.connDb.commit()
24
+
25
+ def rollback(self):
26
+ """
27
+ Undo last uncommitted operations.
28
+ """
29
+ with self.lock:
30
+ self.connDb.rollback()
31
+
32
+ def initCursor(self):
33
+ """
34
+ Creates cursor objects, it's needed to read/write database.
35
+ """
36
+ with self.lock:
37
+ cursoreDb=self.connDb.cursor()
38
+ return cursoreDb
39
+
40
+ def fetchOne(self,cursoreDb):
41
+ """
42
+ Retrieve first row of query
43
+ """
44
+ with cursoreDb:
45
+ with self.lock:
46
+ result=cursoreDb.fetchone()
47
+ if not result:
48
+ return None
49
+ return result[0]
50
+
51
+ def count(self,cursoreDb)->int:
52
+ with cursoreDb:
53
+ with self.lock:
54
+ result=cursoreDb.fetchone()
55
+ if not result:
56
+ return 0
57
+ return result[0]
58
+
59
+ def close(self):
60
+ with self.lock:
61
+ if self.connDb is not None:
62
+ self.connDb.close()
63
+ self.connDb=None
64
+
65
+ @staticmethod
66
+ def ifEmptyThenNull(testo:str|None)->str|None:
67
+ if ModuloStringhe.isEmpty(testo) or testo=="NULL":
68
+ return None
69
+ return testo
@@ -1,19 +1,19 @@
1
- import oracledb
2
-
3
- from modulitiz_micro.database.ModuloSqlServer import ModuloSqlServer
4
-
5
-
6
- class ModuloSqlOracle(ModuloSqlServer):
7
- DEFAULT_PORTA=1521
8
-
9
- def __init__(self,porta:int|None,*args,**kwargs):
10
- super().__init__(*args,**kwargs)
11
- if porta is None:
12
- porta=self.DEFAULT_PORTA
13
- self.porta=porta
14
-
15
- def connessione(self):
16
- dsn="{}/{}@{}:{}/xe".format(self.username,self.password,self.host,self.porta)
17
- self.connDb=oracledb.connect(dsn)
18
- self.connDb=dsn
19
-
1
+ import oracledb
2
+
3
+ from modulitiz_micro.database.ModuloSqlServer import ModuloSqlServer
4
+
5
+
6
+ class ModuloSqlOracle(ModuloSqlServer):
7
+ DEFAULT_PORTA=1521
8
+
9
+ def __init__(self,porta:int|None,*args,**kwargs):
10
+ super().__init__(*args,**kwargs)
11
+ if porta is None:
12
+ porta=self.DEFAULT_PORTA
13
+ self.porta=porta
14
+
15
+ def connessione(self):
16
+ dsn="{}/{}@{}:{}/xe".format(self.username,self.password,self.host,self.porta)
17
+ self.connDb=oracledb.connect(dsn)
18
+ self.connDb=dsn
19
+
@@ -1,43 +1,43 @@
1
- import pypyodbc
2
-
3
- from modulitiz_micro.database.AbstractSql import AbstractSql
4
-
5
-
6
- class ModuloSqlServer(AbstractSql):
7
- ERROR_CODE__UNIQUE_INDEX=23000
8
-
9
- def __init__(self,host:str,nome_db:str,username:str,password:str):
10
- super().__init__()
11
- self.host=host
12
- self.nome_db=nome_db
13
- self.username=username
14
- self.password=password
15
-
16
- def connessione(self):
17
- connDb=pypyodbc.connect("Driver={SQL Server};Server="+self.host+";Database="+self.nome_db+";uid="+self.username+";pwd="+self.password+";")
18
- self.connDb=connDb
19
-
20
- def select(self,sql:str,params:list):
21
- with self.initCursor() as cursoreDb:
22
- cursoreDb.execute(sql,params)
23
- results=list(cursoreDb)
24
- return results
25
-
26
- def select_count(self,cursoreDb,sql:str,params:list)->int:
27
- with cursoreDb:
28
- cursoreDb.execute(sql,params)
29
- output=self.count(cursoreDb)
30
- return output
31
-
32
- def modifica(self,cursoreDb,sql:str,params:list,ignore_unique_index:bool):
33
- """
34
- Use it for data modifications like: insert, update, delete
35
- """
36
- try:
37
- cursoreDb.execute(sql,params)
38
- except pypyodbc.IntegrityError as ie:
39
- if ignore_unique_index:
40
- error_code=int(ie.value[0])
41
- if error_code!=self.ERROR_CODE__UNIQUE_INDEX:
42
- raise ie
43
-
1
+ import pypyodbc
2
+
3
+ from modulitiz_micro.database.AbstractSql import AbstractSql
4
+
5
+
6
+ class ModuloSqlServer(AbstractSql):
7
+ ERROR_CODE__UNIQUE_INDEX=23000
8
+
9
+ def __init__(self,host:str,nome_db:str,username:str,password:str):
10
+ super().__init__()
11
+ self.host=host
12
+ self.nome_db=nome_db
13
+ self.username=username
14
+ self.password=password
15
+
16
+ def connessione(self):
17
+ connDb=pypyodbc.connect("Driver={SQL Server};Server="+self.host+";Database="+self.nome_db+";uid="+self.username+";pwd="+self.password+";")
18
+ self.connDb=connDb
19
+
20
+ def select(self,sql:str,params:list):
21
+ with self.initCursor() as cursoreDb:
22
+ cursoreDb.execute(sql,params)
23
+ results=list(cursoreDb)
24
+ return results
25
+
26
+ def select_count(self,cursoreDb,sql:str,params:list)->int:
27
+ with cursoreDb:
28
+ cursoreDb.execute(sql,params)
29
+ output=self.count(cursoreDb)
30
+ return output
31
+
32
+ def modifica(self,cursoreDb,sql:str,params:list,ignore_unique_index:bool):
33
+ """
34
+ Use it for data modifications like: insert, update, delete
35
+ """
36
+ try:
37
+ cursoreDb.execute(sql,params)
38
+ except pypyodbc.IntegrityError as ie:
39
+ if ignore_unique_index:
40
+ error_code=int(ie.value[0])
41
+ if error_code!=self.ERROR_CODE__UNIQUE_INDEX:
42
+ raise ie
43
+