modulitiz-micro 2.31.0__py311-none-any.whl → 2.32.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.
- modulitiz_micro/ModuloBase64.py +61 -61
- modulitiz_micro/ModuloColorText.py +35 -35
- modulitiz_micro/ModuloDate.py +295 -295
- modulitiz_micro/ModuloFunzioni.py +70 -58
- modulitiz_micro/ModuloListe.py +150 -150
- modulitiz_micro/ModuloMeteo.py +72 -72
- modulitiz_micro/ModuloNumeri.py +130 -130
- modulitiz_micro/ModuloPyinstaller.py +29 -29
- modulitiz_micro/ModuloSeriale.py +61 -61
- modulitiz_micro/ModuloStatistiche.py +31 -31
- modulitiz_micro/ModuloStringhe.py +180 -180
- modulitiz_micro/ModuloTarghe.py +46 -46
- modulitiz_micro/android/ModuloAndroid.py +18 -18
- modulitiz_micro/android/ModuloAndroidAdb.py +48 -48
- modulitiz_micro/android/ModuloAndroidSim.py +130 -130
- modulitiz_micro/android/beans/SmsBean.py +12 -12
- modulitiz_micro/android/enums/AndroidSmsTypeEnum.py +17 -17
- modulitiz_micro/database/AbstractDatabaseService.py +13 -13
- modulitiz_micro/database/AbstractSql.py +69 -69
- modulitiz_micro/database/ModuloSqlOracle.py +19 -19
- modulitiz_micro/database/ModuloSqlServer.py +43 -43
- modulitiz_micro/database/eccezioni/EccezioneDbNoData.py +6 -6
- modulitiz_micro/database/mysql/AbstractBasicMysql.py +114 -114
- modulitiz_micro/database/mysql/ModuloMysql.py +163 -163
- modulitiz_micro/database/mysql/MysqlCommonConverter.py +47 -47
- modulitiz_micro/database/mysql/eccezioni/EccezioneMysqlOffline.py +6 -6
- modulitiz_micro/database/sqlite/AbstractBasicSQLite.py +114 -114
- modulitiz_micro/database/sqlite/ModuloSQLite.py +82 -82
- modulitiz_micro/eccezioni/EccezioneBase.py +7 -7
- modulitiz_micro/eccezioni/EccezioneCtrlC.py +7 -7
- modulitiz_micro/eccezioni/EccezioneRuntime.py +7 -7
- modulitiz_micro/eccezioni/EccezioneScheduler.py +7 -7
- modulitiz_micro/eccezioni/EccezioneSoNonSupportato.py +7 -7
- modulitiz_micro/eccezioni/http/EccezioneHttp.py +8 -8
- modulitiz_micro/eccezioni/http/EccezioneHttp404.py +7 -7
- modulitiz_micro/eccezioni/http/EccezioneHttpGeneric.py +7 -7
- modulitiz_micro/files/ModuloFiles.py +173 -173
- modulitiz_micro/files/ModuloLogging.py +69 -69
- modulitiz_micro/files/ModuloZip.py +42 -42
- modulitiz_micro/files/cache/CacheBean.py +5 -5
- modulitiz_micro/files/cache/CacheRam.py +29 -29
- modulitiz_micro/files/cache/DatabaseCache.py +91 -91
- modulitiz_micro/files/cache/decorators/cacheRam.py +26 -26
- modulitiz_micro/files/git/ModuloGit.py +20 -20
- modulitiz_micro/files/git/decorators/catchAndRaiseGitExceptions.py +19 -19
- modulitiz_micro/files/git/exceptions/EccezioneGit.py +7 -7
- modulitiz_micro/gestionedom/GestioneDom.py +44 -44
- modulitiz_micro/init/AbstractBasicInit.py +27 -27
- modulitiz_micro/init/AbstractInit.py +11 -11
- modulitiz_micro/keylogger/EccezioneKeyLogger.py +7 -7
- modulitiz_micro/keylogger/ModuloKeylogger.py +73 -73
- modulitiz_micro/{multithreading → multithread}/ModuloThread.py +26 -26
- modulitiz_micro/{multithreading → multithread}/ModuloThreadLogger.py +8 -8
- modulitiz_micro/{multithreading → multithread}/ModuloThreadWithCallbackError.py +25 -25
- modulitiz_micro/nlp/ModuloNlp.py +36 -36
- modulitiz_micro/nlp/ModuloNlpDateAndTime.py +59 -59
- modulitiz_micro/rete/ModuloNetworking.py +67 -67
- modulitiz_micro/rete/ModuloOpenVpn.py +15 -15
- modulitiz_micro/rete/email/EmailBean.py +5 -5
- modulitiz_micro/rete/email/ModuloEmail.py +90 -90
- modulitiz_micro/rete/http/ModuloHttp.py +115 -115
- modulitiz_micro/rete/http/ModuloHttpConnectionSafe.py +91 -91
- modulitiz_micro/rete/http/ModuloHttpUtils.py +69 -69
- modulitiz_micro/rete/http/beans/HttpResponseBean.py +5 -5
- modulitiz_micro/rete/http/decorators/catchAndRaiseHttpExceptions.py +22 -22
- modulitiz_micro/rete/ntp/AbstractModuloNtp.py +73 -73
- modulitiz_micro/rete/ntp/ModuloNtpIt.py +8 -8
- modulitiz_micro/rete/socketserver/AbstractBasicGetSocketServer.py +35 -35
- modulitiz_micro/rete/socketserver/AbstractSocketServer.py +267 -267
- modulitiz_micro/rete/ssl/ModuloSsl.py +56 -56
- modulitiz_micro/sistema/EnvVarsEnum.py +9 -9
- modulitiz_micro/sistema/ModuloEnvVars.py +34 -34
- modulitiz_micro/sistema/ModuloSystem.py +298 -298
- modulitiz_micro/sistema/ModuloSystemPipe.py +67 -67
- modulitiz_micro/social/telegram/ModuloTelegram.py +52 -52
- modulitiz_micro/social/telegram/ModuloTelegramSimple.py +26 -26
- modulitiz_micro/util/beans/conf/AbstractBasicConfBean.py +11 -11
- modulitiz_micro/util/beans/conf/AbstractConfBean.py +16 -16
- modulitiz_micro/util/beans/fileconf/AbstractBasicFileConfBean.py +11 -11
- modulitiz_micro/util/beans/fileconf/AbstractFileConfBean.py +13 -13
- modulitiz_micro/util/beans/globalvar/AbstractBasicGlobalVarBean.py +15 -15
- modulitiz_micro/util/beans/globalvar/AbstractGlobalVarBean.py +34 -34
- modulitiz_micro/util/decorators/noAwait.py +23 -23
- modulitiz_micro/util/pip/AbstractModuloPip.py +41 -41
- modulitiz_micro/util/pip/ModuloPip.py +49 -49
- modulitiz_micro/util/scheduler/AbstractScheduler.py +32 -32
- modulitiz_micro/util/spooler/AbstractSpooler.py +14 -14
- modulitiz_micro/util/spooler/Spooler.py +18 -18
- modulitiz_micro/util/spooler/beans/QueueBean.py +8 -8
- modulitiz_micro/util/spooler/decorators/spooler.py +49 -49
- modulitiz_micro/util/spooler/eccezioni/EccezioneSpooler.py +7 -7
- modulitiz_micro/util/spooler/eccezioni/EccezioneSpoolerFull.py +7 -7
- modulitiz_micro/util/unittesting/AbstractOverrideTestUtil.py +31 -31
- modulitiz_micro/util/unittesting/AbstractTestUtil.py +11 -11
- modulitiz_micro/util/unittesting/ModuloRunUnitTest.py +25 -25
- modulitiz_micro/util/wheel/ModuloBuildWheel.py +131 -121
- modulitiz_micro/util/wheel/ModuloCheckTestNamingConvention.py +86 -0
- modulitiz_micro/util/wheel/ModuloToml.py +40 -40
- modulitiz_micro/util/wheel/ModuloWheel.py +12 -12
- {modulitiz_micro-2.31.0.dist-info → modulitiz_micro-2.32.0.dist-info}/LICENSE +21 -21
- {modulitiz_micro-2.31.0.dist-info → modulitiz_micro-2.32.0.dist-info}/METADATA +64 -64
- modulitiz_micro-2.32.0.dist-info/RECORD +104 -0
- modulitiz_micro-2.31.0.dist-info/RECORD +0 -103
- {modulitiz_micro-2.31.0.dist-info → modulitiz_micro-2.32.0.dist-info}/WHEEL +0 -0
- {modulitiz_micro-2.31.0.dist-info → modulitiz_micro-2.32.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.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,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.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,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)
|
modulitiz_micro/nlp/ModuloNlp.py
CHANGED
@@ -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']
|