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.
- modulitiz_micro/ModuloBase64.py +61 -61
- modulitiz_micro/ModuloColorText.py +35 -35
- modulitiz_micro/ModuloDate.py +295 -295
- modulitiz_micro/ModuloFunzioni.py +58 -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 +49 -49
- modulitiz_micro/database/ModuloSqlOracle.py +19 -19
- modulitiz_micro/database/ModuloSqlServer.py +50 -50
- modulitiz_micro/database/eccezioni/EccezioneDbNoData.py +6 -6
- modulitiz_micro/database/mysql/AbstractBasicMysql.py +114 -114
- modulitiz_micro/database/mysql/ModuloMysql.py +151 -151
- 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 +15 -15
- 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/ModuloThread.py +26 -26
- modulitiz_micro/multithreading/ModuloThreadLogger.py +8 -8
- modulitiz_micro/multithreading/ModuloThreadWithCallbackError.py +25 -25
- modulitiz_micro/nlp/ModuloNlp.py +36 -36
- modulitiz_micro/nlp/ModuloNlpDateAndTime.py +59 -59
- modulitiz_micro/rete/ModuloNetworking.py +64 -64
- modulitiz_micro/rete/ModuloOpenVpn.py +15 -15
- modulitiz_micro/rete/email/EmailBean.py +5 -0
- modulitiz_micro/rete/{ModuloEmail.py → email/ModuloEmail.py} +90 -69
- modulitiz_micro/rete/http/ModuloHttp.py +114 -114
- modulitiz_micro/rete/http/ModuloHttpConnectionSafe.py +91 -91
- modulitiz_micro/rete/http/ModuloHttpUtils.py +66 -66
- 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 +18 -18
- modulitiz_micro/util/unittesting/AbstractTestUtil.py +11 -11
- modulitiz_micro/util/unittesting/ModuloRunUnitTest.py +25 -25
- modulitiz_micro/util/wheel/ModuloBuildWheel.py +118 -118
- modulitiz_micro/util/wheel/ModuloToml.py +40 -40
- modulitiz_micro/util/wheel/ModuloWheel.py +12 -12
- {modulitiz_micro-2.26.0.dist-info → modulitiz_micro-2.27.0.dist-info}/LICENSE +20 -20
- {modulitiz_micro-2.26.0.dist-info → modulitiz_micro-2.27.0.dist-info}/METADATA +63 -63
- modulitiz_micro-2.27.0.dist-info/RECORD +101 -0
- modulitiz_micro-2.26.0.dist-info/RECORD +0 -100
- {modulitiz_micro-2.26.0.dist-info → modulitiz_micro-2.27.0.dist-info}/WHEEL +0 -0
- {modulitiz_micro-2.26.0.dist-info → modulitiz_micro-2.27.0.dist-info}/top_level.txt +0 -0
modulitiz_micro/ModuloNumeri.py
CHANGED
@@ -1,130 +1,130 @@
|
|
1
|
-
class ModuloNumeri(object):
|
2
|
-
"""
|
3
|
-
Utility di gestione dei numeri, sia interi (senza virgola) che floating-point (con decimali) che con o senza segno.
|
4
|
-
"""
|
5
|
-
|
6
|
-
UNO_DIVISO_1024=0.0009765625
|
7
|
-
|
8
|
-
NUMERI_CARDINALI={
|
9
|
-
0:"zero",
|
10
|
-
1:"uno",
|
11
|
-
2:"due",
|
12
|
-
3:"tre",
|
13
|
-
4:"quattro",
|
14
|
-
5:"cinque",
|
15
|
-
6:"sei",
|
16
|
-
7:"sette",
|
17
|
-
8:"otto",
|
18
|
-
9:"nove",
|
19
|
-
10:"dieci",
|
20
|
-
11:"undici"
|
21
|
-
}
|
22
|
-
|
23
|
-
NUMERI_ORDINALI={
|
24
|
-
"primo":1,
|
25
|
-
}
|
26
|
-
|
27
|
-
@staticmethod
|
28
|
-
def isInt(valore)->bool:
|
29
|
-
"""
|
30
|
-
Determina se un valore può essere considerato un numero intero.
|
31
|
-
"""
|
32
|
-
try:
|
33
|
-
int(valore)
|
34
|
-
return True
|
35
|
-
except ValueError:
|
36
|
-
return False
|
37
|
-
|
38
|
-
@staticmethod
|
39
|
-
def isFloat(valore)->bool:
|
40
|
-
"""
|
41
|
-
Determina se un valore può essere considerato un numero con la virgola.
|
42
|
-
"""
|
43
|
-
try:
|
44
|
-
float(valore)
|
45
|
-
return True
|
46
|
-
except ValueError:
|
47
|
-
return False
|
48
|
-
|
49
|
-
@staticmethod
|
50
|
-
def strToInt(valore:str)->int|None:
|
51
|
-
"""
|
52
|
-
Converte una stringa in numero intero.
|
53
|
-
"""
|
54
|
-
try:
|
55
|
-
ris=int(valore)
|
56
|
-
return ris
|
57
|
-
except ValueError:
|
58
|
-
return None
|
59
|
-
|
60
|
-
@staticmethod
|
61
|
-
def intToBool(valore:int)->bool:
|
62
|
-
"""
|
63
|
-
Converte un numero intero in valore booleano (o binario).
|
64
|
-
"""
|
65
|
-
if int(valore)==1:
|
66
|
-
return True
|
67
|
-
return False
|
68
|
-
|
69
|
-
@staticmethod
|
70
|
-
def boolToInt(valore:bool)->int:
|
71
|
-
"""
|
72
|
-
Converte un valore booleano (o binario) in numero intero.
|
73
|
-
"""
|
74
|
-
return int(valore)
|
75
|
-
|
76
|
-
@classmethod
|
77
|
-
def byteToKilobyte(cls,byte:int)->int:
|
78
|
-
"""
|
79
|
-
Converte un numero di byte in KB
|
80
|
-
"""
|
81
|
-
return int(byte*cls.UNO_DIVISO_1024)
|
82
|
-
@classmethod
|
83
|
-
def byteToMegabyte(cls,byte:int)->int:
|
84
|
-
"""
|
85
|
-
Converte un numero di byte in MB
|
86
|
-
"""
|
87
|
-
return int(cls.byteToKilobyte(byte)*cls.UNO_DIVISO_1024)
|
88
|
-
|
89
|
-
@classmethod
|
90
|
-
def versionStrToInt(cls,testo:str)->int:
|
91
|
-
"""
|
92
|
-
Converte la stringa di una versione in intero.
|
93
|
-
NB: la versione andrebbe sempre trattata come una stringa.
|
94
|
-
"""
|
95
|
-
arr=testo.split(".")
|
96
|
-
testoPadded="".join([x.ljust(4,"0") for x in arr])
|
97
|
-
return cls.strToInt(testoPadded)
|
98
|
-
|
99
|
-
@staticmethod
|
100
|
-
def humanFormat(num: int) -> str:
|
101
|
-
"""
|
102
|
-
Formatta un numero in modo che sia più leggibile.
|
103
|
-
"""
|
104
|
-
magnitude=0
|
105
|
-
while abs(num)>=1000:
|
106
|
-
magnitude+=1
|
107
|
-
num/=1000.0
|
108
|
-
return '%.2f%s'%(num,['','K','M','G','T','P'][magnitude])
|
109
|
-
|
110
|
-
@staticmethod
|
111
|
-
def decimalNumbersTruncate(value:float,decimals:int)->float:
|
112
|
-
"""
|
113
|
-
Rimuove la quantità di decimali voluta da un valore.
|
114
|
-
Il valore 1.234 se viene troncato a 2 decimali diventa 1.23
|
115
|
-
"""
|
116
|
-
factor=10**decimals
|
117
|
-
return int(value*factor)/factor
|
118
|
-
|
119
|
-
@classmethod
|
120
|
-
def numberToWord(cls,numero:int)->str:
|
121
|
-
"""
|
122
|
-
Converte un numero in parola.
|
123
|
-
"""
|
124
|
-
return cls.NUMERI_CARDINALI[numero]
|
125
|
-
@classmethod
|
126
|
-
def wordToNumber(cls,parola:str)->int:
|
127
|
-
"""
|
128
|
-
Converte una parola in numero.
|
129
|
-
"""
|
130
|
-
return cls.NUMERI_ORDINALI[parola]
|
1
|
+
class ModuloNumeri(object):
|
2
|
+
"""
|
3
|
+
Utility di gestione dei numeri, sia interi (senza virgola) che floating-point (con decimali) che con o senza segno.
|
4
|
+
"""
|
5
|
+
|
6
|
+
UNO_DIVISO_1024=0.0009765625
|
7
|
+
|
8
|
+
NUMERI_CARDINALI={
|
9
|
+
0:"zero",
|
10
|
+
1:"uno",
|
11
|
+
2:"due",
|
12
|
+
3:"tre",
|
13
|
+
4:"quattro",
|
14
|
+
5:"cinque",
|
15
|
+
6:"sei",
|
16
|
+
7:"sette",
|
17
|
+
8:"otto",
|
18
|
+
9:"nove",
|
19
|
+
10:"dieci",
|
20
|
+
11:"undici"
|
21
|
+
}
|
22
|
+
|
23
|
+
NUMERI_ORDINALI={
|
24
|
+
"primo":1,
|
25
|
+
}
|
26
|
+
|
27
|
+
@staticmethod
|
28
|
+
def isInt(valore)->bool:
|
29
|
+
"""
|
30
|
+
Determina se un valore può essere considerato un numero intero.
|
31
|
+
"""
|
32
|
+
try:
|
33
|
+
int(valore)
|
34
|
+
return True
|
35
|
+
except ValueError:
|
36
|
+
return False
|
37
|
+
|
38
|
+
@staticmethod
|
39
|
+
def isFloat(valore)->bool:
|
40
|
+
"""
|
41
|
+
Determina se un valore può essere considerato un numero con la virgola.
|
42
|
+
"""
|
43
|
+
try:
|
44
|
+
float(valore)
|
45
|
+
return True
|
46
|
+
except ValueError:
|
47
|
+
return False
|
48
|
+
|
49
|
+
@staticmethod
|
50
|
+
def strToInt(valore:str)->int|None:
|
51
|
+
"""
|
52
|
+
Converte una stringa in numero intero.
|
53
|
+
"""
|
54
|
+
try:
|
55
|
+
ris=int(valore)
|
56
|
+
return ris
|
57
|
+
except ValueError:
|
58
|
+
return None
|
59
|
+
|
60
|
+
@staticmethod
|
61
|
+
def intToBool(valore:int)->bool:
|
62
|
+
"""
|
63
|
+
Converte un numero intero in valore booleano (o binario).
|
64
|
+
"""
|
65
|
+
if int(valore)==1:
|
66
|
+
return True
|
67
|
+
return False
|
68
|
+
|
69
|
+
@staticmethod
|
70
|
+
def boolToInt(valore:bool)->int:
|
71
|
+
"""
|
72
|
+
Converte un valore booleano (o binario) in numero intero.
|
73
|
+
"""
|
74
|
+
return int(valore)
|
75
|
+
|
76
|
+
@classmethod
|
77
|
+
def byteToKilobyte(cls,byte:int)->int:
|
78
|
+
"""
|
79
|
+
Converte un numero di byte in KB
|
80
|
+
"""
|
81
|
+
return int(byte*cls.UNO_DIVISO_1024)
|
82
|
+
@classmethod
|
83
|
+
def byteToMegabyte(cls,byte:int)->int:
|
84
|
+
"""
|
85
|
+
Converte un numero di byte in MB
|
86
|
+
"""
|
87
|
+
return int(cls.byteToKilobyte(byte)*cls.UNO_DIVISO_1024)
|
88
|
+
|
89
|
+
@classmethod
|
90
|
+
def versionStrToInt(cls,testo:str)->int:
|
91
|
+
"""
|
92
|
+
Converte la stringa di una versione in intero.
|
93
|
+
NB: la versione andrebbe sempre trattata come una stringa.
|
94
|
+
"""
|
95
|
+
arr=testo.split(".")
|
96
|
+
testoPadded="".join([x.ljust(4,"0") for x in arr])
|
97
|
+
return cls.strToInt(testoPadded)
|
98
|
+
|
99
|
+
@staticmethod
|
100
|
+
def humanFormat(num: int) -> str:
|
101
|
+
"""
|
102
|
+
Formatta un numero in modo che sia più leggibile.
|
103
|
+
"""
|
104
|
+
magnitude=0
|
105
|
+
while abs(num)>=1000:
|
106
|
+
magnitude+=1
|
107
|
+
num/=1000.0
|
108
|
+
return '%.2f%s'%(num,['','K','M','G','T','P'][magnitude])
|
109
|
+
|
110
|
+
@staticmethod
|
111
|
+
def decimalNumbersTruncate(value:float,decimals:int)->float:
|
112
|
+
"""
|
113
|
+
Rimuove la quantità di decimali voluta da un valore.
|
114
|
+
Il valore 1.234 se viene troncato a 2 decimali diventa 1.23
|
115
|
+
"""
|
116
|
+
factor=10**decimals
|
117
|
+
return int(value*factor)/factor
|
118
|
+
|
119
|
+
@classmethod
|
120
|
+
def numberToWord(cls,numero:int)->str:
|
121
|
+
"""
|
122
|
+
Converte un numero in parola.
|
123
|
+
"""
|
124
|
+
return cls.NUMERI_CARDINALI[numero]
|
125
|
+
@classmethod
|
126
|
+
def wordToNumber(cls,parola:str)->int:
|
127
|
+
"""
|
128
|
+
Converte una parola in numero.
|
129
|
+
"""
|
130
|
+
return cls.NUMERI_ORDINALI[parola]
|
@@ -1,29 +1,29 @@
|
|
1
|
-
import os
|
2
|
-
import sys
|
3
|
-
|
4
|
-
from modulitiz_micro.files.ModuloFiles import ModuloFiles
|
5
|
-
|
6
|
-
|
7
|
-
class ModuloPyinstaller(object):
|
8
|
-
"""
|
9
|
-
Utility di gestione del modulo che permette di compilare sorgenti e interprete in un file eseguibile unico (exe)
|
10
|
-
"""
|
11
|
-
|
12
|
-
@staticmethod
|
13
|
-
def isExecutableMode()->bool:
|
14
|
-
"""
|
15
|
-
Identifica se lo script viene eseguito da un eseguibile o meno.
|
16
|
-
"""
|
17
|
-
return getattr(sys, 'frozen', False)
|
18
|
-
|
19
|
-
@classmethod
|
20
|
-
def cdProjectsDir(cls):
|
21
|
-
"""
|
22
|
-
Se questo metodo non viene chiamato da un eseguibile costruito con PyInstaller fa nulla,
|
23
|
-
altrimenti cambia la cartella corrente alla root dei progetti.
|
24
|
-
"""
|
25
|
-
if cls.isExecutableMode() is False:
|
26
|
-
return
|
27
|
-
pathExecutableDir=os.path.dirname(sys.executable)
|
28
|
-
originalPath=os.path.abspath(ModuloFiles.pathJoin(pathExecutableDir,"../"))
|
29
|
-
os.chdir(originalPath)
|
1
|
+
import os
|
2
|
+
import sys
|
3
|
+
|
4
|
+
from modulitiz_micro.files.ModuloFiles import ModuloFiles
|
5
|
+
|
6
|
+
|
7
|
+
class ModuloPyinstaller(object):
|
8
|
+
"""
|
9
|
+
Utility di gestione del modulo che permette di compilare sorgenti e interprete in un file eseguibile unico (exe)
|
10
|
+
"""
|
11
|
+
|
12
|
+
@staticmethod
|
13
|
+
def isExecutableMode()->bool:
|
14
|
+
"""
|
15
|
+
Identifica se lo script viene eseguito da un eseguibile o meno.
|
16
|
+
"""
|
17
|
+
return getattr(sys, 'frozen', False)
|
18
|
+
|
19
|
+
@classmethod
|
20
|
+
def cdProjectsDir(cls):
|
21
|
+
"""
|
22
|
+
Se questo metodo non viene chiamato da un eseguibile costruito con PyInstaller fa nulla,
|
23
|
+
altrimenti cambia la cartella corrente alla root dei progetti.
|
24
|
+
"""
|
25
|
+
if cls.isExecutableMode() is False:
|
26
|
+
return
|
27
|
+
pathExecutableDir=os.path.dirname(sys.executable)
|
28
|
+
originalPath=os.path.abspath(ModuloFiles.pathJoin(pathExecutableDir,"../"))
|
29
|
+
os.chdir(originalPath)
|
modulitiz_micro/ModuloSeriale.py
CHANGED
@@ -1,61 +1,61 @@
|
|
1
|
-
import serial
|
2
|
-
|
3
|
-
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
4
|
-
|
5
|
-
|
6
|
-
class ModuloSeriale(object):
|
7
|
-
"""
|
8
|
-
Utility di gestione dela connessione seriale RS232
|
9
|
-
"""
|
10
|
-
|
11
|
-
COM_PORTS=[]
|
12
|
-
|
13
|
-
def __init__(self):
|
14
|
-
self.connessione=None
|
15
|
-
|
16
|
-
@classmethod
|
17
|
-
def populate(cls):
|
18
|
-
"""
|
19
|
-
Popola le variabili di classe.
|
20
|
-
"""
|
21
|
-
if ModuloSystem.isWindows():
|
22
|
-
COM_PORTS=cls.__generaElencoPorte("COM",1)
|
23
|
-
else:
|
24
|
-
COM_PORTS=cls.__generaElencoPorte("/dev/tty",0)
|
25
|
-
COM_PORTS.extend(cls.__generaElencoPorte("/dev/ttyS",0))
|
26
|
-
COM_PORTS.extend(cls.__generaElencoPorte("/dev/ttyUSB",0))
|
27
|
-
cls.COM_PORTS=COM_PORTS
|
28
|
-
|
29
|
-
def apriPrimaPortaDisponibile(self):
|
30
|
-
"""
|
31
|
-
Prova ad aprire la prima porta disponibile che trova.
|
32
|
-
"""
|
33
|
-
for porta in self.COM_PORTS:
|
34
|
-
try:
|
35
|
-
connessioneSeriale=serial.Serial(port=porta, baudrate=9600, rtscts=True, dsrdtr=True, exclusive=True)
|
36
|
-
connessioneSeriale.dtr=True
|
37
|
-
connessioneSeriale.dtr=False
|
38
|
-
self.connessione=connessioneSeriale
|
39
|
-
return
|
40
|
-
except (OSError,serial.SerialException):
|
41
|
-
pass
|
42
|
-
|
43
|
-
def isOpen(self)->bool:
|
44
|
-
"""
|
45
|
-
Controlla se la connessione alla porta è aperta.
|
46
|
-
"""
|
47
|
-
return self.connessione is not None and self.connessione.isOpen()
|
48
|
-
|
49
|
-
def close(self):
|
50
|
-
"""
|
51
|
-
Chiude la connessione alla porta.
|
52
|
-
"""
|
53
|
-
if not self.isOpen():
|
54
|
-
return
|
55
|
-
self.connessione.close()
|
56
|
-
self.connessione=None
|
57
|
-
|
58
|
-
@staticmethod
|
59
|
-
def __generaElencoPorte(prefisso:str,inizio:int)->list:
|
60
|
-
return [prefisso+str(i) for i in range(inizio,16)]
|
61
|
-
|
1
|
+
import serial
|
2
|
+
|
3
|
+
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
4
|
+
|
5
|
+
|
6
|
+
class ModuloSeriale(object):
|
7
|
+
"""
|
8
|
+
Utility di gestione dela connessione seriale RS232
|
9
|
+
"""
|
10
|
+
|
11
|
+
COM_PORTS=[]
|
12
|
+
|
13
|
+
def __init__(self):
|
14
|
+
self.connessione=None
|
15
|
+
|
16
|
+
@classmethod
|
17
|
+
def populate(cls):
|
18
|
+
"""
|
19
|
+
Popola le variabili di classe.
|
20
|
+
"""
|
21
|
+
if ModuloSystem.isWindows():
|
22
|
+
COM_PORTS=cls.__generaElencoPorte("COM",1)
|
23
|
+
else:
|
24
|
+
COM_PORTS=cls.__generaElencoPorte("/dev/tty",0)
|
25
|
+
COM_PORTS.extend(cls.__generaElencoPorte("/dev/ttyS",0))
|
26
|
+
COM_PORTS.extend(cls.__generaElencoPorte("/dev/ttyUSB",0))
|
27
|
+
cls.COM_PORTS=COM_PORTS
|
28
|
+
|
29
|
+
def apriPrimaPortaDisponibile(self):
|
30
|
+
"""
|
31
|
+
Prova ad aprire la prima porta disponibile che trova.
|
32
|
+
"""
|
33
|
+
for porta in self.COM_PORTS:
|
34
|
+
try:
|
35
|
+
connessioneSeriale=serial.Serial(port=porta, baudrate=9600, rtscts=True, dsrdtr=True, exclusive=True)
|
36
|
+
connessioneSeriale.dtr=True
|
37
|
+
connessioneSeriale.dtr=False
|
38
|
+
self.connessione=connessioneSeriale
|
39
|
+
return
|
40
|
+
except (OSError,serial.SerialException):
|
41
|
+
pass
|
42
|
+
|
43
|
+
def isOpen(self)->bool:
|
44
|
+
"""
|
45
|
+
Controlla se la connessione alla porta è aperta.
|
46
|
+
"""
|
47
|
+
return self.connessione is not None and self.connessione.isOpen()
|
48
|
+
|
49
|
+
def close(self):
|
50
|
+
"""
|
51
|
+
Chiude la connessione alla porta.
|
52
|
+
"""
|
53
|
+
if not self.isOpen():
|
54
|
+
return
|
55
|
+
self.connessione.close()
|
56
|
+
self.connessione=None
|
57
|
+
|
58
|
+
@staticmethod
|
59
|
+
def __generaElencoPorte(prefisso:str,inizio:int)->list:
|
60
|
+
return [prefisso+str(i) for i in range(inizio,16)]
|
61
|
+
|
@@ -1,31 +1,31 @@
|
|
1
|
-
from modulitiz_micro.ModuloDate import ModuloDate
|
2
|
-
from modulitiz_micro.ModuloNumeri import ModuloNumeri
|
3
|
-
|
4
|
-
|
5
|
-
class ModuloStatistiche(object):
|
6
|
-
"""
|
7
|
-
Utility per la gestione delle statistiche.
|
8
|
-
"""
|
9
|
-
|
10
|
-
@staticmethod
|
11
|
-
def calcolaProgresso(index:int, contaElementiElaborati:int, totElementi:int, secsInizio:int)->str:
|
12
|
-
"""
|
13
|
-
Calcola il tempo rimanente alla fine dell'elaborazione di un certo numero di elementi in base al trend attuale.
|
14
|
-
:param index: deve partire da 0
|
15
|
-
:param contaElementiElaborati: deve partire da 1
|
16
|
-
:param totElementi: numero totale di elementi
|
17
|
-
:param secsInizio: timestamp di inizio elaborazione
|
18
|
-
"""
|
19
|
-
secsFine=ModuloDate.getSecs()
|
20
|
-
percentuale=int((index*100) / totElementi)
|
21
|
-
|
22
|
-
secondiTrascorsi=secsFine - secsInizio
|
23
|
-
elementiRimanenti=totElementi - index
|
24
|
-
secondiRimanenti=int((secondiTrascorsi / contaElementiElaborati) * elementiRimanenti)
|
25
|
-
tempoRimanente=ModuloDate.dateToString(ModuloDate.timestampUtcToDate(secondiRimanenti),ModuloDate.FORMATO_ORA)
|
26
|
-
|
27
|
-
# se i numeri sono alti li conveto in un formato più leggibile
|
28
|
-
index=ModuloNumeri.humanFormat(index)
|
29
|
-
totElementi=ModuloNumeri.humanFormat(totElementi)
|
30
|
-
msg="Progresso: {:<5}/{}, percentuale: {:<3}%, tempo rimanente: {}".format(index, totElementi, percentuale, tempoRimanente)
|
31
|
-
return msg
|
1
|
+
from modulitiz_micro.ModuloDate import ModuloDate
|
2
|
+
from modulitiz_micro.ModuloNumeri import ModuloNumeri
|
3
|
+
|
4
|
+
|
5
|
+
class ModuloStatistiche(object):
|
6
|
+
"""
|
7
|
+
Utility per la gestione delle statistiche.
|
8
|
+
"""
|
9
|
+
|
10
|
+
@staticmethod
|
11
|
+
def calcolaProgresso(index:int, contaElementiElaborati:int, totElementi:int, secsInizio:int)->str:
|
12
|
+
"""
|
13
|
+
Calcola il tempo rimanente alla fine dell'elaborazione di un certo numero di elementi in base al trend attuale.
|
14
|
+
:param index: deve partire da 0
|
15
|
+
:param contaElementiElaborati: deve partire da 1
|
16
|
+
:param totElementi: numero totale di elementi
|
17
|
+
:param secsInizio: timestamp di inizio elaborazione
|
18
|
+
"""
|
19
|
+
secsFine=ModuloDate.getSecs()
|
20
|
+
percentuale=int((index*100) / totElementi)
|
21
|
+
|
22
|
+
secondiTrascorsi=secsFine - secsInizio
|
23
|
+
elementiRimanenti=totElementi - index
|
24
|
+
secondiRimanenti=int((secondiTrascorsi / contaElementiElaborati) * elementiRimanenti)
|
25
|
+
tempoRimanente=ModuloDate.dateToString(ModuloDate.timestampUtcToDate(secondiRimanenti),ModuloDate.FORMATO_ORA)
|
26
|
+
|
27
|
+
# se i numeri sono alti li conveto in un formato più leggibile
|
28
|
+
index=ModuloNumeri.humanFormat(index)
|
29
|
+
totElementi=ModuloNumeri.humanFormat(totElementi)
|
30
|
+
msg="Progresso: {:<5}/{}, percentuale: {:<3}%, tempo rimanente: {}".format(index, totElementi, percentuale, tempoRimanente)
|
31
|
+
return msg
|