modulitiz-micro 2.26.0__py311-none-any.whl → 2.27.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 (102) hide show
  1. modulitiz_micro/ModuloBase64.py +61 -61
  2. modulitiz_micro/ModuloColorText.py +35 -35
  3. modulitiz_micro/ModuloDate.py +295 -295
  4. modulitiz_micro/ModuloFunzioni.py +58 -58
  5. modulitiz_micro/ModuloListe.py +150 -150
  6. modulitiz_micro/ModuloMeteo.py +72 -72
  7. modulitiz_micro/ModuloNumeri.py +130 -130
  8. modulitiz_micro/ModuloPyinstaller.py +29 -29
  9. modulitiz_micro/ModuloSeriale.py +61 -61
  10. modulitiz_micro/ModuloStatistiche.py +31 -31
  11. modulitiz_micro/ModuloStringhe.py +180 -180
  12. modulitiz_micro/ModuloTarghe.py +46 -46
  13. modulitiz_micro/android/ModuloAndroid.py +18 -18
  14. modulitiz_micro/android/ModuloAndroidAdb.py +48 -48
  15. modulitiz_micro/android/ModuloAndroidSim.py +130 -130
  16. modulitiz_micro/android/beans/SmsBean.py +12 -12
  17. modulitiz_micro/android/enums/AndroidSmsTypeEnum.py +17 -17
  18. modulitiz_micro/database/AbstractDatabaseService.py +13 -13
  19. modulitiz_micro/database/AbstractSql.py +49 -49
  20. modulitiz_micro/database/ModuloSqlOracle.py +19 -19
  21. modulitiz_micro/database/ModuloSqlServer.py +50 -50
  22. modulitiz_micro/database/eccezioni/EccezioneDbNoData.py +6 -6
  23. modulitiz_micro/database/mysql/AbstractBasicMysql.py +114 -114
  24. modulitiz_micro/database/mysql/ModuloMysql.py +151 -151
  25. modulitiz_micro/database/mysql/MysqlCommonConverter.py +47 -47
  26. modulitiz_micro/database/mysql/eccezioni/EccezioneMysqlOffline.py +6 -6
  27. modulitiz_micro/database/sqlite/AbstractBasicSQLite.py +114 -114
  28. modulitiz_micro/database/sqlite/ModuloSQLite.py +82 -82
  29. modulitiz_micro/eccezioni/EccezioneBase.py +7 -7
  30. modulitiz_micro/eccezioni/EccezioneCtrlC.py +7 -7
  31. modulitiz_micro/eccezioni/EccezioneRuntime.py +7 -7
  32. modulitiz_micro/eccezioni/EccezioneScheduler.py +7 -7
  33. modulitiz_micro/eccezioni/EccezioneSoNonSupportato.py +7 -7
  34. modulitiz_micro/eccezioni/http/EccezioneHttp.py +8 -8
  35. modulitiz_micro/eccezioni/http/EccezioneHttp404.py +7 -7
  36. modulitiz_micro/eccezioni/http/EccezioneHttpGeneric.py +7 -7
  37. modulitiz_micro/files/ModuloFiles.py +173 -173
  38. modulitiz_micro/files/ModuloLogging.py +69 -69
  39. modulitiz_micro/files/ModuloZip.py +42 -42
  40. modulitiz_micro/files/cache/CacheBean.py +5 -5
  41. modulitiz_micro/files/cache/CacheRam.py +29 -29
  42. modulitiz_micro/files/cache/DatabaseCache.py +91 -91
  43. modulitiz_micro/files/cache/decorators/cacheRam.py +26 -26
  44. modulitiz_micro/files/git/ModuloGit.py +15 -15
  45. modulitiz_micro/gestionedom/GestioneDom.py +44 -44
  46. modulitiz_micro/init/AbstractBasicInit.py +27 -27
  47. modulitiz_micro/init/AbstractInit.py +11 -11
  48. modulitiz_micro/keylogger/EccezioneKeyLogger.py +7 -7
  49. modulitiz_micro/keylogger/ModuloKeylogger.py +73 -73
  50. modulitiz_micro/multithreading/ModuloThread.py +26 -26
  51. modulitiz_micro/multithreading/ModuloThreadLogger.py +8 -8
  52. modulitiz_micro/multithreading/ModuloThreadWithCallbackError.py +25 -25
  53. modulitiz_micro/nlp/ModuloNlp.py +36 -36
  54. modulitiz_micro/nlp/ModuloNlpDateAndTime.py +59 -59
  55. modulitiz_micro/rete/ModuloNetworking.py +64 -64
  56. modulitiz_micro/rete/ModuloOpenVpn.py +15 -15
  57. modulitiz_micro/rete/email/EmailBean.py +5 -0
  58. modulitiz_micro/rete/{ModuloEmail.py → email/ModuloEmail.py} +90 -69
  59. modulitiz_micro/rete/http/ModuloHttp.py +114 -114
  60. modulitiz_micro/rete/http/ModuloHttpConnectionSafe.py +91 -91
  61. modulitiz_micro/rete/http/ModuloHttpUtils.py +66 -66
  62. modulitiz_micro/rete/http/beans/HttpResponseBean.py +5 -5
  63. modulitiz_micro/rete/http/decorators/catchAndRaiseHttpExceptions.py +22 -22
  64. modulitiz_micro/rete/ntp/AbstractModuloNtp.py +73 -73
  65. modulitiz_micro/rete/ntp/ModuloNtpIt.py +8 -8
  66. modulitiz_micro/rete/socketserver/AbstractBasicGetSocketServer.py +35 -35
  67. modulitiz_micro/rete/socketserver/AbstractSocketServer.py +267 -267
  68. modulitiz_micro/rete/ssl/ModuloSsl.py +56 -56
  69. modulitiz_micro/sistema/EnvVarsEnum.py +9 -9
  70. modulitiz_micro/sistema/ModuloEnvVars.py +34 -34
  71. modulitiz_micro/sistema/ModuloSystem.py +298 -298
  72. modulitiz_micro/sistema/ModuloSystemPipe.py +67 -67
  73. modulitiz_micro/social/telegram/ModuloTelegram.py +52 -52
  74. modulitiz_micro/social/telegram/ModuloTelegramSimple.py +26 -26
  75. modulitiz_micro/util/beans/conf/AbstractBasicConfBean.py +11 -11
  76. modulitiz_micro/util/beans/conf/AbstractConfBean.py +16 -16
  77. modulitiz_micro/util/beans/fileconf/AbstractBasicFileConfBean.py +11 -11
  78. modulitiz_micro/util/beans/fileconf/AbstractFileConfBean.py +13 -13
  79. modulitiz_micro/util/beans/globalvar/AbstractBasicGlobalVarBean.py +15 -15
  80. modulitiz_micro/util/beans/globalvar/AbstractGlobalVarBean.py +34 -34
  81. modulitiz_micro/util/decorators/noAwait.py +23 -23
  82. modulitiz_micro/util/pip/AbstractModuloPip.py +41 -41
  83. modulitiz_micro/util/pip/ModuloPip.py +49 -49
  84. modulitiz_micro/util/scheduler/AbstractScheduler.py +32 -32
  85. modulitiz_micro/util/spooler/AbstractSpooler.py +14 -14
  86. modulitiz_micro/util/spooler/Spooler.py +18 -18
  87. modulitiz_micro/util/spooler/beans/QueueBean.py +8 -8
  88. modulitiz_micro/util/spooler/decorators/spooler.py +49 -49
  89. modulitiz_micro/util/spooler/eccezioni/EccezioneSpooler.py +7 -7
  90. modulitiz_micro/util/spooler/eccezioni/EccezioneSpoolerFull.py +7 -7
  91. modulitiz_micro/util/unittesting/AbstractOverrideTestUtil.py +18 -18
  92. modulitiz_micro/util/unittesting/AbstractTestUtil.py +11 -11
  93. modulitiz_micro/util/unittesting/ModuloRunUnitTest.py +25 -25
  94. modulitiz_micro/util/wheel/ModuloBuildWheel.py +118 -118
  95. modulitiz_micro/util/wheel/ModuloToml.py +40 -40
  96. modulitiz_micro/util/wheel/ModuloWheel.py +12 -12
  97. {modulitiz_micro-2.26.0.dist-info → modulitiz_micro-2.27.0.dist-info}/LICENSE +20 -20
  98. {modulitiz_micro-2.26.0.dist-info → modulitiz_micro-2.27.0.dist-info}/METADATA +63 -63
  99. modulitiz_micro-2.27.0.dist-info/RECORD +101 -0
  100. modulitiz_micro-2.26.0.dist-info/RECORD +0 -100
  101. {modulitiz_micro-2.26.0.dist-info → modulitiz_micro-2.27.0.dist-info}/WHEEL +0 -0
  102. {modulitiz_micro-2.26.0.dist-info → modulitiz_micro-2.27.0.dist-info}/top_level.txt +0 -0
@@ -1,25 +1,25 @@
1
- import threading
2
-
3
-
4
- class ModuloThreadWithCallbackError(threading.Thread):
5
- """
6
- This class should always be used in preference to threading.Thread.
7
-
8
- The interface provided by this class is identical to that of threading.Thread,
9
- however, if an exception occurs in the thread the callback function is called,
10
- rather than printed to stderr.
11
-
12
- This is important in daemon style applications where stderr is redirected to /dev/null.
13
- """
14
-
15
- def __init__(self,callbackError,**kwargs):
16
- super().__init__(**kwargs)
17
- self.callbackError=callbackError
18
- self._realRun=self.run
19
- self.run=self.__wrapRun
20
-
21
- def __wrapRun(self):
22
- try:
23
- self._realRun()
24
- except Exception as ex:
25
- self.callbackError(ex)
1
+ import threading
2
+
3
+
4
+ class ModuloThreadWithCallbackError(threading.Thread):
5
+ """
6
+ This class should always be used in preference to threading.Thread.
7
+
8
+ The interface provided by this class is identical to that of threading.Thread,
9
+ however, if an exception occurs in the thread the callback function is called,
10
+ rather than printed to stderr.
11
+
12
+ This is important in daemon style applications where stderr is redirected to /dev/null.
13
+ """
14
+
15
+ def __init__(self,callbackError,**kwargs):
16
+ super().__init__(**kwargs)
17
+ self.callbackError=callbackError
18
+ self._realRun=self.run
19
+ self.run=self.__wrapRun
20
+
21
+ def __wrapRun(self):
22
+ try:
23
+ self._realRun()
24
+ except Exception as ex:
25
+ self.callbackError(ex)
@@ -1,36 +1,36 @@
1
- class ModuloNlp(object):
2
-
3
- @staticmethod
4
- def giornoRelativoToParola(giornoRel:int)->str|None:
5
- match giornoRel:
6
- case -1: return "ieri"
7
- case 0: return "oggi"
8
- case 1: return "domani"
9
- case 2: return "dopodomani"
10
- case _: return None
11
-
12
- @staticmethod
13
- def giornoRelativoToNum(giornoRel:str)->int|None:
14
- match giornoRel:
15
- case "ieri": return -1
16
- case "oggi": return 0
17
- case "domani": return 1
18
- case "dopodomani": return 2
19
- case _: return None
20
-
21
- @staticmethod
22
- def verboEssere(isPassato:bool)->str:
23
- if isPassato:
24
- return "era"
25
- return "è"
26
-
27
- @staticmethod
28
- def articolo(isDeterminativo:bool,isMaschile:bool)->str:
29
- if isDeterminativo:
30
- if isMaschile:
31
- return "il"
32
- return "la"
33
- if isMaschile:
34
- return "un"
35
- return "una"
36
-
1
+ class ModuloNlp(object):
2
+
3
+ @staticmethod
4
+ def giornoRelativoToParola(giornoRel:int)->str|None:
5
+ match giornoRel:
6
+ case -1: return "ieri"
7
+ case 0: return "oggi"
8
+ case 1: return "domani"
9
+ case 2: return "dopodomani"
10
+ case _: return None
11
+
12
+ @staticmethod
13
+ def giornoRelativoToNum(giornoRel:str)->int|None:
14
+ match giornoRel:
15
+ case "ieri": return -1
16
+ case "oggi": return 0
17
+ case "domani": return 1
18
+ case "dopodomani": return 2
19
+ case _: return None
20
+
21
+ @staticmethod
22
+ def verboEssere(isPassato:bool)->str:
23
+ if isPassato:
24
+ return "era"
25
+ return "è"
26
+
27
+ @staticmethod
28
+ def articolo(isDeterminativo:bool,isMaschile:bool)->str:
29
+ if isDeterminativo:
30
+ if isMaschile:
31
+ return "il"
32
+ return "la"
33
+ if isMaschile:
34
+ return "un"
35
+ return "una"
36
+
@@ -1,59 +1,59 @@
1
- from modulitiz_micro.ModuloDate import ModuloDate
2
- from modulitiz_micro.ModuloNumeri import ModuloNumeri
3
- from modulitiz_micro.nlp.ModuloNlp import ModuloNlp
4
-
5
-
6
- class ModuloNlpDateAndTime(object):
7
- @staticmethod
8
- def dateToString(data,anno:str)->str:
9
- dataStr=ModuloDate.dateToString(data,"%w %A %d %B")
10
- numGiornoSett,giornoSett,giorno,mese=dataStr.split(" ")
11
- # sistemo grammaticalmente gli articoli, verbi, ...
12
- numGiornoSett=int(numGiornoSett)
13
- giorno=int(giorno)
14
- articoloGiornoMese="il "
15
- giornoParola=giorno
16
- if giorno in (1,8,11):
17
- articoloGiornoMese="l'"
18
- giornoParola=ModuloNumeri.numberToWord(giorno)
19
- verbo=ModuloNlp.verboEssere(data<ModuloDate.now())
20
- articoloGiornoSett=ModuloNlp.articolo(False,numGiornoSett!=0)
21
- output=f"{articoloGiornoMese}{giornoParola} {mese}{anno} {verbo} {articoloGiornoSett} {giornoSett}"
22
- output=output.lower()
23
- return output
24
-
25
- @classmethod
26
- def minutesToTimeRelative(cls,minutes:int,arrotonda:bool)->str:
27
- prefixTempo=""
28
- minutes,hoursDiff,hoursWord=cls.__minutesToHours(minutes)
29
- # minuti
30
- minutesWord=minutes
31
- if minutes==1:
32
- minutesWord="un"
33
- elif 10<minutes<60:
34
- if arrotonda is True and minutes%10!=0:
35
- prefixTempo=" circa"
36
- minutes=round(minutes,-1)
37
- minutesWord=minutes
38
- output="Fino a"+prefixTempo
39
- if hoursDiff>0:
40
- output+=" %s or%s"%(hoursWord,("a" if hoursDiff==1 else "e"))
41
- if minutes>0:
42
- output+=" e"
43
- if minutes>0:
44
- output+=" %s minut%s"%(minutesWord,("o" if minutes==1 else "i"))
45
- return output
46
-
47
- @staticmethod
48
- def __minutesToHours(minutes:int)->tuple:
49
- hoursDiff=0
50
- hoursWord=""
51
- if minutes<60:
52
- return minutes,hoursDiff,hoursWord
53
- hoursDiff=minutes//60
54
- minutes=minutes%60
55
- if hoursDiff==1:
56
- hoursWord="un"
57
- else:
58
- hoursWord=hoursDiff
59
- return minutes,hoursDiff,hoursWord
1
+ from modulitiz_micro.ModuloDate import ModuloDate
2
+ from modulitiz_micro.ModuloNumeri import ModuloNumeri
3
+ from modulitiz_micro.nlp.ModuloNlp import ModuloNlp
4
+
5
+
6
+ class ModuloNlpDateAndTime(object):
7
+ @staticmethod
8
+ def dateToString(data,anno:str)->str:
9
+ dataStr=ModuloDate.dateToString(data,"%w %A %d %B")
10
+ numGiornoSett,giornoSett,giorno,mese=dataStr.split(" ")
11
+ # sistemo grammaticalmente gli articoli, verbi, ...
12
+ numGiornoSett=int(numGiornoSett)
13
+ giorno=int(giorno)
14
+ articoloGiornoMese="il "
15
+ giornoParola=giorno
16
+ if giorno in (1,8,11):
17
+ articoloGiornoMese="l'"
18
+ giornoParola=ModuloNumeri.numberToWord(giorno)
19
+ verbo=ModuloNlp.verboEssere(data<ModuloDate.now())
20
+ articoloGiornoSett=ModuloNlp.articolo(False,numGiornoSett!=0)
21
+ output=f"{articoloGiornoMese}{giornoParola} {mese}{anno} {verbo} {articoloGiornoSett} {giornoSett}"
22
+ output=output.lower()
23
+ return output
24
+
25
+ @classmethod
26
+ def minutesToTimeRelative(cls,minutes:int,arrotonda:bool)->str:
27
+ prefixTempo=""
28
+ minutes,hoursDiff,hoursWord=cls.__minutesToHours(minutes)
29
+ # minuti
30
+ minutesWord=minutes
31
+ if minutes==1:
32
+ minutesWord="un"
33
+ elif 10<minutes<60:
34
+ if arrotonda is True and minutes%10!=0:
35
+ prefixTempo=" circa"
36
+ minutes=round(minutes,-1)
37
+ minutesWord=minutes
38
+ output="Fino a"+prefixTempo
39
+ if hoursDiff>0:
40
+ output+=" %s or%s"%(hoursWord,("a" if hoursDiff==1 else "e"))
41
+ if minutes>0:
42
+ output+=" e"
43
+ if minutes>0:
44
+ output+=" %s minut%s"%(minutesWord,("o" if minutes==1 else "i"))
45
+ return output
46
+
47
+ @staticmethod
48
+ def __minutesToHours(minutes:int)->tuple:
49
+ hoursDiff=0
50
+ hoursWord=""
51
+ if minutes<60:
52
+ return minutes,hoursDiff,hoursWord
53
+ hoursDiff=minutes//60
54
+ minutes=minutes%60
55
+ if hoursDiff==1:
56
+ hoursWord="un"
57
+ else:
58
+ hoursWord=hoursDiff
59
+ return minutes,hoursDiff,hoursWord
@@ -1,64 +1,64 @@
1
- import os
2
- import socket
3
- from contextlib import closing
4
- from uuid import getnode
5
-
6
- from _socket import gaierror
7
-
8
- from modulitiz_micro.ModuloListe import ModuloListe
9
- from modulitiz_micro.ModuloStringhe import ModuloStringhe
10
- from modulitiz_micro.eccezioni.EccezioneRuntime import EccezioneRuntime
11
- from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
12
-
13
-
14
- class ModuloNetworking(object):
15
- @staticmethod
16
- def getMacAddress()->str:
17
- mac=("%012X" % getnode())
18
- return mac
19
-
20
- @staticmethod
21
- def getIp()->str|None:
22
- sockObj = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
23
- sockObj.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
24
- # doesn't even have to be reachable
25
- try:
26
- sockObj.connect(('255.255.255.255', 1))
27
- indirizzoIp = sockObj.getsockname()[0]
28
- except gaierror:
29
- indirizzoIp = None
30
- finally:
31
- sockObj.close()
32
- return indirizzoIp
33
-
34
- @staticmethod
35
- def isHttpPortOpen(host:str|None,port:int)->bool:
36
- # controllo host
37
- if host is None:
38
- host="127.0.0.1"
39
- # controllo porta
40
- with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
41
- if sock.connect_ex((host, port)) == 0:
42
- return True
43
- return False
44
-
45
- @staticmethod
46
- def checkPing(indirizzoIp:str)->bool:
47
- # costruisco il comando a seconda del sistema operativo
48
- comando="ping "
49
- if ModuloSystem.isWindows():
50
- comando+="-n"
51
- elif os.name=='posix':
52
- comando+="-c"
53
- else:
54
- raise EccezioneRuntime("Tipologia del sistema operativo non riconosciuta: "+os.name)
55
- comando+=" 1 " + indirizzoIp
56
- # eseguo il comando
57
- outputComando=ModuloStringhe.normalizzaEol(ModuloSystem.systemCallReturnOutput(comando,None))
58
- righe=outputComando.split("\n")
59
- righe=ModuloListe.eliminaElementiVuoti(righe)
60
- for riga in righe:
61
- if ModuloStringhe.contains(riga, "%"):
62
- numPacchettiPersi=int(riga.split("=")[1].split("(")[0].strip())
63
- return numPacchettiPersi==0
64
- return False
1
+ import os
2
+ import socket
3
+ from contextlib import closing
4
+ from uuid import getnode
5
+
6
+ from _socket import gaierror
7
+
8
+ from modulitiz_micro.ModuloListe import ModuloListe
9
+ from modulitiz_micro.ModuloStringhe import ModuloStringhe
10
+ from modulitiz_micro.eccezioni.EccezioneRuntime import EccezioneRuntime
11
+ from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
12
+
13
+
14
+ class ModuloNetworking(object):
15
+ @staticmethod
16
+ def getMacAddress()->str:
17
+ mac=("%012X" % getnode())
18
+ return mac
19
+
20
+ @staticmethod
21
+ def getIp()->str|None:
22
+ sockObj = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
23
+ sockObj.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
24
+ # doesn't even have to be reachable
25
+ try:
26
+ sockObj.connect(('255.255.255.255', 1))
27
+ indirizzoIp = sockObj.getsockname()[0]
28
+ except gaierror:
29
+ indirizzoIp = None
30
+ finally:
31
+ sockObj.close()
32
+ return indirizzoIp
33
+
34
+ @staticmethod
35
+ def isHttpPortOpen(host:str|None,port:int)->bool:
36
+ # controllo host
37
+ if host is None:
38
+ host="127.0.0.1"
39
+ # controllo porta
40
+ with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
41
+ if sock.connect_ex((host, port)) == 0:
42
+ return True
43
+ return False
44
+
45
+ @staticmethod
46
+ def checkPing(indirizzoIp:str)->bool:
47
+ # costruisco il comando a seconda del sistema operativo
48
+ comando="ping "
49
+ if ModuloSystem.isWindows():
50
+ comando+="-n"
51
+ elif os.name=='posix':
52
+ comando+="-c"
53
+ else:
54
+ raise EccezioneRuntime("Tipologia del sistema operativo non riconosciuta: "+os.name)
55
+ comando+=" 1 " + indirizzoIp
56
+ # eseguo il comando
57
+ outputComando=ModuloStringhe.normalizzaEol(ModuloSystem.systemCallReturnOutput(comando,None))
58
+ righe=outputComando.split("\n")
59
+ righe=ModuloListe.eliminaElementiVuoti(righe)
60
+ for riga in righe:
61
+ if ModuloStringhe.contains(riga, "%"):
62
+ numPacchettiPersi=int(riga.split("=")[1].split("(")[0].strip())
63
+ return numPacchettiPersi==0
64
+ return False
@@ -1,15 +1,15 @@
1
- from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
2
-
3
-
4
- class ModuloOpenVpn(object):
5
- def __init__(self,percorsoOpenVpn:str):
6
- self.__percorsoOpenVpn=percorsoOpenVpn
7
-
8
- def startVpn(self,isOpenVpnAlreadyRunning:bool,filenameOvpn:str):
9
- """
10
- Send a command to start vpn to a new or already running instance of the GUI.
11
- https://community.openvpn.net/openvpn/wiki/OpenVPN-GUI-New#gui-help
12
- """
13
- subCmd="--command connect" if isOpenVpnAlreadyRunning else "--connect"
14
- cmd=r'start "" "{}" {} {}.ovpn'.format(self.__percorsoOpenVpn,subCmd,filenameOvpn)
15
- ModuloSystem.systemCallWaitAndClose(cmd,False)
1
+ from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
2
+
3
+
4
+ class ModuloOpenVpn(object):
5
+ def __init__(self,percorsoOpenVpn:str):
6
+ self.__percorsoOpenVpn=percorsoOpenVpn
7
+
8
+ def startVpn(self,isOpenVpnAlreadyRunning:bool,filenameOvpn:str):
9
+ """
10
+ Send a command to start vpn to a new or already running instance of the GUI.
11
+ https://community.openvpn.net/openvpn/wiki/OpenVPN-GUI-New#gui-help
12
+ """
13
+ subCmd="--command connect" if isOpenVpnAlreadyRunning else "--connect"
14
+ cmd=r'start "" "{}" {} {}.ovpn'.format(self.__percorsoOpenVpn,subCmd,filenameOvpn)
15
+ ModuloSystem.systemCallWaitAndClose(cmd,False)
@@ -0,0 +1,5 @@
1
+ class EmailBean(object):
2
+ def __init__(self,dizionario:dict):
3
+ self.destinatario:str=dizionario['destinatario']
4
+ self.user:str=dizionario['user']
5
+ self.password:str=dizionario['password']
@@ -1,69 +1,90 @@
1
- import smtplib
2
-
3
- from modulitiz_micro.ModuloDate import ModuloDate
4
- from modulitiz_micro.ModuloListe import ModuloListe
5
- from modulitiz_micro.ModuloStringhe import ModuloStringhe
6
-
7
-
8
- class ModuloEmail(object):
9
- SERVER_GOOGLE_INVIO=('smtp.gmail.com',smtplib.SMTP_SSL_PORT)
10
- SERVER_VIRGILIO_INVIO=('out.virgilio.it',smtplib.SMTP_SSL_PORT)
11
-
12
- def __init__(self,credenzialiServer:tuple,isDebug:bool=False):
13
- self.credenzialiServer=credenzialiServer
14
- self.isDebug=isDebug
15
- self.connEmail=None
16
- self.utente=None
17
- self.isLogged=False
18
-
19
- def login(self,utente:str|None=None,password:str|None=None):
20
- if self.isLogged:
21
- return
22
- self.connEmail=smtplib.SMTP_SSL(*self.credenzialiServer)
23
- if self.isDebug:
24
- self.connEmail.set_debuglevel(1)
25
- # se serve setto l'autenticazione
26
- if utente is not None and password is not None:
27
- self.utente=utente
28
- self.connEmail.login(utente,password)
29
- self.isLogged=True
30
-
31
- def inviaEmail(self, mittente:str|None,destinatari, oggetto:str, messaggio:str,
32
- isHtml:bool, dataInvio=ModuloDate.now(), cc=None, ccn=None)->dict:
33
- # controllo i parametri
34
- dataInvio=ModuloDate.dateToString(dataInvio)
35
- if isinstance(destinatari, str):
36
- destinatari=[destinatari]
37
- if mittente is None:
38
- mittente=self.utente
39
- domain=self.utente.split("@")[-1]
40
- messageId=f"{ModuloDate.getSecs()}@{domain}"
41
- # creo il messaggio
42
- message=f"""Date: {dataInvio}
43
- From: {mittente}
44
- Subject: {oggetto}
45
- To: {", ".join(destinatari)}
46
- Message-ID: <{messageId}>
47
- """
48
- if not ModuloListe.isEmpty(cc):
49
- message+=("Cc: "+", ".join(cc))+"\n"
50
- if not ModuloListe.isEmpty(ccn):
51
- message+=("Bcc: "+", ".join(ccn))+"\n"
52
- message+="Content-Type: text/html;\n"
53
- # converto il messaggio in formato html
54
- if not isHtml:
55
- messaggio=ModuloStringhe.normalizzaEol(messaggio).replace("\n","<br/>\n")
56
- messaggio=messaggio.encode(ModuloStringhe.CODIFICA_ASCII,"xmlcharrefreplace").decode(ModuloStringhe.CODIFICA_UTF8)
57
- message+="\n"+messaggio
58
- # invio la mail
59
- try:
60
- return self.connEmail.sendmail(mittente,destinatari,message)
61
- except smtplib.SMTPServerDisconnected as ex:
62
- return {"":str(ex)}
63
-
64
- def close(self):
65
- if self.connEmail is None:
66
- return
67
- self.connEmail.quit()
68
- self.connEmail=None
69
- self.isLogged=False
1
+ import smtplib
2
+
3
+ from modulitiz_micro.ModuloDate import ModuloDate
4
+ from modulitiz_micro.ModuloListe import ModuloListe
5
+ from modulitiz_micro.ModuloStringhe import ModuloStringhe
6
+
7
+
8
+ class ModuloEmail(object):
9
+ SERVER_GOOGLE_INVIO=('smtp.gmail.com',smtplib.SMTP_SSL_PORT)
10
+ SERVER_VIRGILIO_INVIO=('out.virgilio.it',smtplib.SMTP_SSL_PORT)
11
+
12
+ def __init__(self,credenzialiServer:tuple,user:str|None,password:str|None,isDebug:bool=False):
13
+ self.credenzialiServer=credenzialiServer
14
+ self.isDebug=isDebug
15
+ self.connEmail=None
16
+ self.user=user
17
+ self.password=password
18
+ self.isLogged=False
19
+
20
+ def login(self,user:str|None=None,password:str|None=None):
21
+ if self.isLogged:
22
+ return
23
+ # controllo se usare le credenziali dei parametri o quelle della classe
24
+ if user is not None:
25
+ self.user=user
26
+ if password is not None:
27
+ self.password=password
28
+ # mi collego
29
+ self.connEmail=smtplib.SMTP_SSL(*self.credenzialiServer)
30
+ if self.isDebug:
31
+ self.connEmail.set_debuglevel(1)
32
+ # se serve setto l'autenticazione
33
+ if self.user is not None and self.password is not None:
34
+ self.connEmail.login(self.user,self.password)
35
+ self.isLogged=True
36
+
37
+ def sendWithLoginAndClose(self,destinatari:str|list|tuple, oggetto:str, messaggio:str,
38
+ isHtml:bool)->dict:
39
+ # controllo se gia' loggato
40
+ if self.isLogged is False:
41
+ self.login(self.user,self.password)
42
+ # invio email
43
+ try:
44
+ errors=self.send(None,destinatari,oggetto,messaggio,isHtml)
45
+ except Exception as ex:
46
+ self.close()
47
+ raise ex
48
+ # chiudo la connessione
49
+ self.close()
50
+ return errors
51
+
52
+ def send(self, mittente:str|None,destinatari:str|list|tuple, oggetto:str, messaggio:str,
53
+ isHtml:bool, dataInvio=ModuloDate.now(), cc=None, ccn=None)->dict:
54
+ # controllo i parametri
55
+ dataInvio=ModuloDate.dateToString(dataInvio)
56
+ if isinstance(destinatari, str):
57
+ destinatari=[destinatari]
58
+ if mittente is None:
59
+ mittente=self.user
60
+ domain=self.user.split("@")[-1]
61
+ messageId=f"{ModuloDate.getSecs()}@{domain}"
62
+ # creo il messaggio
63
+ message=f"""Date: {dataInvio}
64
+ From: {mittente}
65
+ Subject: {oggetto}
66
+ To: {", ".join(destinatari)}
67
+ Message-ID: <{messageId}>
68
+ """
69
+ if not ModuloListe.isEmpty(cc):
70
+ message+=("Cc: "+", ".join(cc))+"\n"
71
+ if not ModuloListe.isEmpty(ccn):
72
+ message+=("Bcc: "+", ".join(ccn))+"\n"
73
+ message+="Content-Type: text/html;\n"
74
+ # converto il messaggio in formato html
75
+ if not isHtml:
76
+ messaggio=ModuloStringhe.normalizzaEol(messaggio).replace("\n","<br/>\n")
77
+ messaggio=messaggio.encode(ModuloStringhe.CODIFICA_ASCII,"xmlcharrefreplace").decode(ModuloStringhe.CODIFICA_UTF8)
78
+ message+="\n"+messaggio
79
+ # invio la mail
80
+ try:
81
+ return self.connEmail.sendmail(mittente,destinatari,message)
82
+ except smtplib.SMTPServerDisconnected as ex:
83
+ return {"":str(ex)}
84
+
85
+ def close(self):
86
+ if self.connEmail is None:
87
+ return
88
+ self.connEmail.quit()
89
+ self.connEmail=None
90
+ self.isLogged=False