modulitiz-micro 2.34.0__py311-none-any.whl → 2.35.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 +70 -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 -28
  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/AbstractModuloTelegram.py +53 -53
  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 -117
  97. modulitiz_micro/util/wheel/ModuloCheckTestNamingConvention.py +83 -83
  98. modulitiz_micro/util/wheel/ModuloToml.py +40 -40
  99. modulitiz_micro/util/wheel/ModuloWheel.py +12 -12
  100. {modulitiz_micro-2.34.0.dist-info → modulitiz_micro-2.35.0.dist-info}/LICENSE +21 -21
  101. {modulitiz_micro-2.34.0.dist-info → modulitiz_micro-2.35.0.dist-info}/METADATA +64 -64
  102. modulitiz_micro-2.35.0.dist-info/RECORD +104 -0
  103. modulitiz_micro-2.34.0.dist-info/RECORD +0 -104
  104. {modulitiz_micro-2.34.0.dist-info → modulitiz_micro-2.35.0.dist-info}/WHEEL +0 -0
  105. {modulitiz_micro-2.34.0.dist-info → modulitiz_micro-2.35.0.dist-info}/top_level.txt +0 -0
@@ -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)
@@ -1,61 +1,70 @@
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.ModuloStringhe import ModuloStringhe
4
+ from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
5
+
6
+
7
+ class ModuloSeriale(object):
8
+ """
9
+ Utility di gestione dela connessione seriale RS232
10
+ """
11
+
12
+ COM_PORTS=[]
13
+
14
+ def __init__(self):
15
+ self.connessione=None
16
+
17
+ @classmethod
18
+ def populate(cls):
19
+ """
20
+ Popola le variabili di classe.
21
+ """
22
+ if ModuloSystem.isWindows():
23
+ COM_PORTS=cls.__generaElencoPorte("COM",1)
24
+ else:
25
+ COM_PORTS=cls.__generaElencoPorte("/dev/tty",0)
26
+ COM_PORTS.extend(cls.__generaElencoPorte("/dev/ttyS",0))
27
+ COM_PORTS.extend(cls.__generaElencoPorte("/dev/ttyUSB",0))
28
+ cls.COM_PORTS=COM_PORTS
29
+
30
+ def apriPrimaPortaDisponibile(self):
31
+ """
32
+ Prova ad aprire la prima porta disponibile che trova.
33
+ """
34
+ for porta in self.COM_PORTS:
35
+ try:
36
+ connessioneSeriale=serial.Serial(port=porta, baudrate=9600, rtscts=True, dsrdtr=True, exclusive=True)
37
+ connessioneSeriale.dtr=True
38
+ connessioneSeriale.dtr=False
39
+ self.connessione=connessioneSeriale
40
+ return
41
+ except serial.SerialException:
42
+ pass
43
+
44
+ def isOpen(self)->bool:
45
+ """
46
+ Controlla se la connessione alla porta è aperta.
47
+ """
48
+ return self.connessione is not None and self.connessione.isOpen()
49
+
50
+ def read(self, port: str,baudrate: int,exitCallback):
51
+ """
52
+ Reads serial strings and prints it to standard output.
53
+ """
54
+ self.connessione=serial.Serial(port,baudrate,timeout=1)
55
+ while not exitCallback():
56
+ print(self.connessione.readline().decode(ModuloStringhe.CODIFICA_UTF8),end="")
57
+ self.close()
58
+
59
+ def close(self):
60
+ """
61
+ Chiude la connessione alla porta.
62
+ """
63
+ if not self.isOpen():
64
+ return
65
+ self.connessione.close()
66
+ self.connessione=None
67
+
68
+ @staticmethod
69
+ def __generaElencoPorte(prefisso:str,inizio:int)->list:
70
+ return [prefisso+str(i) for i in range(inizio,16)]
@@ -1,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