modulitiz-micro 2.32.0__py311-none-any.whl → 2.33.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 (105) 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 +70 -70
  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 +69 -69
  20. modulitiz_micro/database/ModuloSqlOracle.py +19 -19
  21. modulitiz_micro/database/ModuloSqlServer.py +43 -43
  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 +163 -163
  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 +28 -20
  45. modulitiz_micro/files/git/decorators/catchAndRaiseGitExceptions.py +19 -19
  46. modulitiz_micro/files/git/exceptions/EccezioneGit.py +7 -7
  47. modulitiz_micro/gestionedom/GestioneDom.py +44 -44
  48. modulitiz_micro/init/AbstractBasicInit.py +27 -27
  49. modulitiz_micro/init/AbstractInit.py +11 -11
  50. modulitiz_micro/keylogger/EccezioneKeyLogger.py +7 -7
  51. modulitiz_micro/keylogger/ModuloKeylogger.py +73 -73
  52. modulitiz_micro/multithread/ModuloThread.py +26 -26
  53. modulitiz_micro/multithread/ModuloThreadLogger.py +8 -8
  54. modulitiz_micro/multithread/ModuloThreadWithCallbackError.py +25 -25
  55. modulitiz_micro/nlp/ModuloNlp.py +36 -36
  56. modulitiz_micro/nlp/ModuloNlpDateAndTime.py +59 -59
  57. modulitiz_micro/rete/ModuloNetworking.py +67 -67
  58. modulitiz_micro/rete/ModuloOpenVpn.py +15 -15
  59. modulitiz_micro/rete/email/EmailBean.py +5 -5
  60. modulitiz_micro/rete/email/ModuloEmail.py +90 -90
  61. modulitiz_micro/rete/http/ModuloHttp.py +115 -115
  62. modulitiz_micro/rete/http/ModuloHttpConnectionSafe.py +91 -91
  63. modulitiz_micro/rete/http/ModuloHttpUtils.py +69 -69
  64. modulitiz_micro/rete/http/beans/HttpResponseBean.py +5 -5
  65. modulitiz_micro/rete/http/decorators/catchAndRaiseHttpExceptions.py +22 -22
  66. modulitiz_micro/rete/ntp/AbstractModuloNtp.py +73 -73
  67. modulitiz_micro/rete/ntp/ModuloNtpIt.py +8 -8
  68. modulitiz_micro/rete/socketserver/AbstractBasicGetSocketServer.py +35 -35
  69. modulitiz_micro/rete/socketserver/AbstractSocketServer.py +267 -267
  70. modulitiz_micro/rete/ssl/ModuloSsl.py +56 -56
  71. modulitiz_micro/sistema/EnvVarsEnum.py +9 -9
  72. modulitiz_micro/sistema/ModuloEnvVars.py +34 -34
  73. modulitiz_micro/sistema/ModuloSystem.py +298 -298
  74. modulitiz_micro/sistema/ModuloSystemPipe.py +67 -67
  75. modulitiz_micro/social/telegram/ModuloTelegram.py +52 -52
  76. modulitiz_micro/social/telegram/ModuloTelegramSimple.py +26 -26
  77. modulitiz_micro/util/beans/conf/AbstractBasicConfBean.py +11 -11
  78. modulitiz_micro/util/beans/conf/AbstractConfBean.py +16 -16
  79. modulitiz_micro/util/beans/fileconf/AbstractBasicFileConfBean.py +11 -11
  80. modulitiz_micro/util/beans/fileconf/AbstractFileConfBean.py +13 -13
  81. modulitiz_micro/util/beans/globalvar/AbstractBasicGlobalVarBean.py +15 -15
  82. modulitiz_micro/util/beans/globalvar/AbstractGlobalVarBean.py +34 -34
  83. modulitiz_micro/util/decorators/noAwait.py +23 -23
  84. modulitiz_micro/util/pip/AbstractModuloPip.py +41 -41
  85. modulitiz_micro/util/pip/ModuloPip.py +49 -49
  86. modulitiz_micro/util/scheduler/AbstractScheduler.py +32 -32
  87. modulitiz_micro/util/spooler/AbstractSpooler.py +14 -14
  88. modulitiz_micro/util/spooler/Spooler.py +18 -18
  89. modulitiz_micro/util/spooler/beans/QueueBean.py +8 -8
  90. modulitiz_micro/util/spooler/decorators/spooler.py +49 -49
  91. modulitiz_micro/util/spooler/eccezioni/EccezioneSpooler.py +7 -7
  92. modulitiz_micro/util/spooler/eccezioni/EccezioneSpoolerFull.py +7 -7
  93. modulitiz_micro/util/unittesting/AbstractOverrideTestUtil.py +31 -31
  94. modulitiz_micro/util/unittesting/AbstractTestUtil.py +11 -11
  95. modulitiz_micro/util/unittesting/ModuloRunUnitTest.py +25 -25
  96. modulitiz_micro/util/wheel/ModuloBuildWheel.py +117 -131
  97. modulitiz_micro/util/wheel/ModuloCheckTestNamingConvention.py +83 -86
  98. modulitiz_micro/util/wheel/ModuloToml.py +40 -40
  99. modulitiz_micro/util/wheel/ModuloWheel.py +12 -12
  100. {modulitiz_micro-2.32.0.dist-info → modulitiz_micro-2.33.0.dist-info}/LICENSE +21 -21
  101. {modulitiz_micro-2.32.0.dist-info → modulitiz_micro-2.33.0.dist-info}/METADATA +64 -64
  102. modulitiz_micro-2.33.0.dist-info/RECORD +104 -0
  103. modulitiz_micro-2.32.0.dist-info/RECORD +0 -104
  104. {modulitiz_micro-2.32.0.dist-info → modulitiz_micro-2.33.0.dist-info}/WHEEL +0 -0
  105. {modulitiz_micro-2.32.0.dist-info → modulitiz_micro-2.33.0.dist-info}/top_level.txt +0 -0
@@ -1,26 +1,26 @@
1
- import threading
2
-
3
- from modulitiz_micro.files.ModuloLogging import ModuloLogging
4
- from modulitiz_micro.multithreading.ModuloThreadLogger import ModuloThreadLogger
5
- from modulitiz_micro.multithreading.ModuloThreadWithCallbackError import ModuloThreadWithCallbackError
6
-
7
-
8
- class ModuloThread(object):
9
- @staticmethod
10
- def startDaemon(logger:ModuloLogging,funzione,args:tuple)->ModuloThreadLogger:
11
- d=ModuloThreadLogger(logger,name='th__'+funzione.__name__,target=funzione,args=args,daemon=True)
12
- d.start()
13
- return d
14
- @staticmethod
15
- def startDaemonWithCallbackError(callbackError,funzione,args:tuple)->ModuloThreadWithCallbackError:
16
- d=ModuloThreadWithCallbackError(callbackError,name='th__'+funzione.__name__,target=funzione,args=args,daemon=True)
17
- d.start()
18
- return d
19
-
20
- @staticmethod
21
- def numeroThreadsAttivi()->int:
22
- """
23
- Non e' incluso il main, ovviamente.
24
- Se usi pydev debugger devi sottrarre altri 2 o 3 threads
25
- """
26
- return threading.active_count()-1
1
+ import threading
2
+
3
+ from modulitiz_micro.files.ModuloLogging import ModuloLogging
4
+ from modulitiz_micro.multithread.ModuloThreadLogger import ModuloThreadLogger
5
+ from modulitiz_micro.multithread.ModuloThreadWithCallbackError import ModuloThreadWithCallbackError
6
+
7
+
8
+ class ModuloThread(object):
9
+ @staticmethod
10
+ def startDaemon(logger:ModuloLogging,funzione,args:tuple)->ModuloThreadLogger:
11
+ d=ModuloThreadLogger(logger,name='th__'+funzione.__name__,target=funzione,args=args,daemon=True)
12
+ d.start()
13
+ return d
14
+ @staticmethod
15
+ def startDaemonWithCallbackError(callbackError,funzione,args:tuple)->ModuloThreadWithCallbackError:
16
+ d=ModuloThreadWithCallbackError(callbackError,name='th__'+funzione.__name__,target=funzione,args=args,daemon=True)
17
+ d.start()
18
+ return d
19
+
20
+ @staticmethod
21
+ def numeroThreadsAttivi()->int:
22
+ """
23
+ Non e' incluso il main, ovviamente.
24
+ Se usi pydev debugger devi sottrarre altri 2 o 3 threads
25
+ """
26
+ return threading.active_count()-1
@@ -1,8 +1,8 @@
1
- from modulitiz_micro.files.ModuloLogging import ModuloLogging
2
- from modulitiz_micro.multithreading.ModuloThreadWithCallbackError import ModuloThreadWithCallbackError
3
-
4
-
5
- class ModuloThreadLogger(ModuloThreadWithCallbackError):
6
-
7
- def __init__(self,logger:ModuloLogging,**kwargs):
8
- super().__init__(lambda ex:logger.exception('Eccezione nel thread:'),**kwargs)
1
+ from modulitiz_micro.files.ModuloLogging import ModuloLogging
2
+ from modulitiz_micro.multithread.ModuloThreadWithCallbackError import ModuloThreadWithCallbackError
3
+
4
+
5
+ class ModuloThreadLogger(ModuloThreadWithCallbackError):
6
+
7
+ def __init__(self,logger:ModuloLogging,**kwargs):
8
+ super().__init__(lambda ex:logger.exception('Eccezione nel thread:'),**kwargs)
@@ -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,67 +1,67 @@
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 getLocalIp()->str|None:
22
- """
23
- Returns private local IP address.
24
- """
25
- sockObj = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
26
- sockObj.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
27
- try:
28
- # doesn't even have to be reachable
29
- sockObj.connect(('255.255.255.255', 1))
30
- indirizzoIp = sockObj.getsockname()[0]
31
- except gaierror:
32
- indirizzoIp = None
33
- finally:
34
- sockObj.close()
35
- return indirizzoIp
36
-
37
- @staticmethod
38
- def isHttpPortOpen(host:str|None,port:int)->bool:
39
- # controllo host
40
- if host is None:
41
- host="127.0.0.1"
42
- # controllo porta
43
- with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
44
- if sock.connect_ex((host, port)) == 0:
45
- return True
46
- return False
47
-
48
- @staticmethod
49
- def checkPing(indirizzoIp:str)->bool:
50
- # costruisco il comando a seconda del sistema operativo
51
- comando="ping "
52
- if ModuloSystem.isWindows():
53
- comando+="-n"
54
- elif os.name=='posix':
55
- comando+="-c"
56
- else:
57
- raise EccezioneRuntime("Tipologia del sistema operativo non riconosciuta: "+os.name)
58
- comando+=" 1 " + indirizzoIp
59
- # eseguo il comando
60
- outputComando=ModuloStringhe.normalizzaEol(ModuloSystem.systemCallReturnOutput(comando,None))
61
- righe=outputComando.split("\n")
62
- righe=ModuloListe.eliminaElementiVuoti(righe)
63
- for riga in righe:
64
- if ModuloStringhe.contains(riga, "%"):
65
- numPacchettiPersi=int(riga.split("=")[1].split("(")[0].strip())
66
- return numPacchettiPersi==0
67
- 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 getLocalIp()->str|None:
22
+ """
23
+ Returns private local IP address.
24
+ """
25
+ sockObj = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
26
+ sockObj.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
27
+ try:
28
+ # doesn't even have to be reachable
29
+ sockObj.connect(('255.255.255.255', 1))
30
+ indirizzoIp = sockObj.getsockname()[0]
31
+ except gaierror:
32
+ indirizzoIp = None
33
+ finally:
34
+ sockObj.close()
35
+ return indirizzoIp
36
+
37
+ @staticmethod
38
+ def isHttpPortOpen(host:str|None,port:int)->bool:
39
+ # controllo host
40
+ if host is None:
41
+ host="127.0.0.1"
42
+ # controllo porta
43
+ with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
44
+ if sock.connect_ex((host, port)) == 0:
45
+ return True
46
+ return False
47
+
48
+ @staticmethod
49
+ def checkPing(indirizzoIp:str)->bool:
50
+ # costruisco il comando a seconda del sistema operativo
51
+ comando="ping "
52
+ if ModuloSystem.isWindows():
53
+ comando+="-n"
54
+ elif os.name=='posix':
55
+ comando+="-c"
56
+ else:
57
+ raise EccezioneRuntime("Tipologia del sistema operativo non riconosciuta: "+os.name)
58
+ comando+=" 1 " + indirizzoIp
59
+ # eseguo il comando
60
+ outputComando=ModuloStringhe.normalizzaEol(ModuloSystem.systemCallReturnOutput(comando,None))
61
+ righe=outputComando.split("\n")
62
+ righe=ModuloListe.eliminaElementiVuoti(righe)
63
+ for riga in righe:
64
+ if ModuloStringhe.contains(riga, "%"):
65
+ numPacchettiPersi=int(riga.split("=")[1].split("(")[0].strip())
66
+ return numPacchettiPersi==0
67
+ 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)
@@ -1,5 +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
+ 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']