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.
- modulitiz_micro/ModuloBase64.py +61 -61
- modulitiz_micro/ModuloColorText.py +35 -35
- modulitiz_micro/ModuloDate.py +295 -295
- modulitiz_micro/ModuloFunzioni.py +70 -70
- 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 +70 -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 +28 -28
- 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/multithread/ModuloThread.py +26 -26
- modulitiz_micro/multithread/ModuloThreadLogger.py +8 -8
- modulitiz_micro/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/AbstractModuloTelegram.py +53 -53
- 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 +117 -117
- modulitiz_micro/util/wheel/ModuloCheckTestNamingConvention.py +83 -83
- modulitiz_micro/util/wheel/ModuloToml.py +40 -40
- modulitiz_micro/util/wheel/ModuloWheel.py +12 -12
- {modulitiz_micro-2.34.0.dist-info → modulitiz_micro-2.35.0.dist-info}/LICENSE +21 -21
- {modulitiz_micro-2.34.0.dist-info → modulitiz_micro-2.35.0.dist-info}/METADATA +64 -64
- modulitiz_micro-2.35.0.dist-info/RECORD +104 -0
- modulitiz_micro-2.34.0.dist-info/RECORD +0 -104
- {modulitiz_micro-2.34.0.dist-info → modulitiz_micro-2.35.0.dist-info}/WHEEL +0 -0
- {modulitiz_micro-2.34.0.dist-info → modulitiz_micro-2.35.0.dist-info}/top_level.txt +0 -0
@@ -1,180 +1,180 @@
|
|
1
|
-
import locale
|
2
|
-
import random
|
3
|
-
import string
|
4
|
-
|
5
|
-
from modulitiz_micro.ModuloDate import ModuloDate
|
6
|
-
|
7
|
-
|
8
|
-
class ModuloStringhe(object):
|
9
|
-
"""
|
10
|
-
Utility di gestione delle stringhe.
|
11
|
-
"""
|
12
|
-
|
13
|
-
CODIFICA_ASCII="ascii"
|
14
|
-
CODIFICA_LATIN1="latin_1"
|
15
|
-
CODIFICA_UTF8="utf-8"
|
16
|
-
|
17
|
-
SEP=r"//||//"
|
18
|
-
|
19
|
-
@classmethod
|
20
|
-
def setLocaleItalian(cls):
|
21
|
-
"""
|
22
|
-
Necessario per avere, ad esempio, il giorno della settimana nella lingua corretta.
|
23
|
-
"""
|
24
|
-
cls.setLocale("it_IT")
|
25
|
-
|
26
|
-
@classmethod
|
27
|
-
def setLocale(cls,lang:str):
|
28
|
-
"""
|
29
|
-
Imposta la lingua predefinita.
|
30
|
-
"""
|
31
|
-
try:
|
32
|
-
cls.__setLocale(lang)
|
33
|
-
except locale.Error:
|
34
|
-
lang+=".utf8"
|
35
|
-
cls.__setLocale(lang)
|
36
|
-
|
37
|
-
@staticmethod
|
38
|
-
def __setLocale(lang:str):
|
39
|
-
locale.setlocale(locale.LC_TIME, lang)
|
40
|
-
|
41
|
-
@staticmethod
|
42
|
-
def isEmpty(val:str|None)->bool:
|
43
|
-
"""
|
44
|
-
Verifica se il valore passato in input è NULL o vuoto.
|
45
|
-
"""
|
46
|
-
if val is None:
|
47
|
-
return True
|
48
|
-
val=str(val)
|
49
|
-
return val==''
|
50
|
-
|
51
|
-
@staticmethod
|
52
|
-
def contains(haystack:str,needle:str)->bool:
|
53
|
-
"""
|
54
|
-
Verifica se un testo è contenuto in un altro testo.
|
55
|
-
:param haystack: testo contenitore
|
56
|
-
:param needle: testo da cercare
|
57
|
-
"""
|
58
|
-
return haystack.find(needle)!=-1
|
59
|
-
|
60
|
-
@staticmethod
|
61
|
-
def normalizzaEol(cont:str)->str:
|
62
|
-
"""
|
63
|
-
Converte i caratteri di fine riga secondo lo standard Unix (universale)
|
64
|
-
"""
|
65
|
-
cont=cont.replace("\r\n","\n")
|
66
|
-
cont=cont.replace("\r","\n")
|
67
|
-
return cont
|
68
|
-
|
69
|
-
@staticmethod
|
70
|
-
def normalizzaTrattini(testo:str)->str:
|
71
|
-
"""
|
72
|
-
Tutti i caratteri assimilabili come un trattino vengono convertiti in trattini.
|
73
|
-
"""
|
74
|
-
#https://en.wikipedia.org/wiki/Dash#Common_dashes_and_Unicode_characters
|
75
|
-
testo=testo.replace(u'\u2012',"-") #figure dash
|
76
|
-
testo=testo.replace(u'\u2013',"-") #en dash
|
77
|
-
testo=testo.replace(u'\u2014',"-") #em dash
|
78
|
-
testo=testo.replace(u'\u2015',"-") #horizontal bar
|
79
|
-
#https://en.wikipedia.org/wiki/Hyphen#Unicode
|
80
|
-
testo=testo.replace(u'\u002D',"-") #HYPHEN-MINUS
|
81
|
-
testo=testo.replace(u'\u2212',"-") #MINUS SIGN
|
82
|
-
testo=testo.replace(u'\u00AD',"-") #SOFT HYPHEN
|
83
|
-
testo=testo.replace(u'\u2010',"-") #HYPHEN
|
84
|
-
testo=testo.replace(u'\u2011',"-") #NON-BREAKING HYPHEN
|
85
|
-
testo=testo.replace(u'\u0584',"-") #ARMENIAN HYPHEN
|
86
|
-
testo=testo.replace(u'\u1806',"-") #MONGOLIAN SOFT HYPHEN
|
87
|
-
testo=testo.replace(u'\uFE63',"-") #SMALL HYPHEN-MINUS
|
88
|
-
testo=testo.replace(u'\uFF0D',"-") #FULLWIDTH HYPHEN-MINUS
|
89
|
-
testo=testo.replace(u'\u2043',"-") #HYPHEN BULLET
|
90
|
-
return testo
|
91
|
-
|
92
|
-
@staticmethod
|
93
|
-
def normalizzaCaratteriSpeciali(testo:str)->str:
|
94
|
-
"""
|
95
|
-
Normalizzazione altri caratteri speciali.
|
96
|
-
"""
|
97
|
-
testo=testo.replace(u'\u039b','&') #GREEK CAPITAL LETTER LAMDA
|
98
|
-
return testo
|
99
|
-
|
100
|
-
@classmethod
|
101
|
-
def aggiungiTimestamp(cls,nomefile:str)->str:
|
102
|
-
"""
|
103
|
-
Se il nome del file ha l'estensione aggiungo il timestamp prima dell'estensione
|
104
|
-
"""
|
105
|
-
timestamp=ModuloDate.dateToString(None,ModuloDate.FORMATO_DATA_ORA_NOSPAZI)
|
106
|
-
if not cls.contains(nomefile,"."):
|
107
|
-
return nomefile+"_"+timestamp
|
108
|
-
arr=nomefile.split(".")
|
109
|
-
nuovonome=".".join(arr[0:-1])+"_"+timestamp+"."+arr[-1]
|
110
|
-
return nuovonome
|
111
|
-
|
112
|
-
@classmethod
|
113
|
-
def phoneNumberFormat(cls,stringa:str,sep:str):
|
114
|
-
"""
|
115
|
-
Formatta un numero di telefono rendendolo più facile da leggere.
|
116
|
-
"""
|
117
|
-
return cls.insertCharEveryN(stringa,sep,3)
|
118
|
-
|
119
|
-
@staticmethod
|
120
|
-
def capitalizeEveryWord(text:str)->str:
|
121
|
-
"""
|
122
|
-
Converte in maiuscolo il primo carattere di ogni parola.
|
123
|
-
"""
|
124
|
-
arr=text.split(" ")
|
125
|
-
arrNew=[x.capitalize() for x in arr]
|
126
|
-
textNew=" ".join(arrNew)
|
127
|
-
return textNew
|
128
|
-
|
129
|
-
@staticmethod
|
130
|
-
def splitColonne(text:str,sep:str)->list:
|
131
|
-
"""
|
132
|
-
Divide una stringa in colonne, ad ogni colonna vengono tolti gli spazi all'inizio e alla fine.
|
133
|
-
"""
|
134
|
-
colonne=text.split(sep)
|
135
|
-
colonne=[x.strip() for x in colonne]
|
136
|
-
return colonne
|
137
|
-
|
138
|
-
@staticmethod
|
139
|
-
def randomString(useLower:bool,useUpper:bool,useDigits:bool,length:int)->str:
|
140
|
-
"""
|
141
|
-
Crea una stringa di caratteri e/o numeri di lunghezza configurabile.
|
142
|
-
"""
|
143
|
-
chars=""
|
144
|
-
if useLower:
|
145
|
-
chars+=string.ascii_lowercase
|
146
|
-
if useUpper:
|
147
|
-
chars+=string.ascii_uppercase
|
148
|
-
if useDigits:
|
149
|
-
chars+=string.digits
|
150
|
-
return ''.join(random.choices(chars, k=length))
|
151
|
-
|
152
|
-
@staticmethod
|
153
|
-
def insertCharEveryN(stringa:str,sep:str,everyN:int)->str:
|
154
|
-
"""
|
155
|
-
Inserisce un carattere o un testo ogni N caratteri di un altro testo.
|
156
|
-
"""
|
157
|
-
return sep.join(stringa[i:i+everyN] for i in range(0, len(stringa), everyN))
|
158
|
-
|
159
|
-
@staticmethod
|
160
|
-
def trovaCodificaCorretta(textBytes:bytes,expectedText:str)->list:
|
161
|
-
"""
|
162
|
-
Questa funzione non ti puo' dire se la codifica e' corretta,
|
163
|
-
devi verificarlo tu a occhio perche' piu' codifiche possono andare bene.
|
164
|
-
"""
|
165
|
-
# questa variabile la lascio qui dentro perche' e' pesante
|
166
|
-
codecs=('ascii','big5','big5hkscs','cp037','cp424','cp437','cp500','cp737','cp775','cp850','cp852','cp855','cp856','cp857','cp860','cp861','cp862','cp863','cp864','cp865','cp866',
|
167
|
-
'cp869','cp874','cp875','cp932','cp949','cp950','cp1006','cp1026','cp1140','cp1250','cp1251','cp1252','cp1253','cp1254','cp1255','cp1256','cp1257','cp1258','euc_jp',
|
168
|
-
'euc_jis_2004','euc_jisx0213','euc_kr','gb2312','gbk','gb18030','hz','iso2022_jp','iso2022_jp_1','iso2022_jp_2','iso2022_jp_2004','iso2022_jp_3','iso2022_jp_ext','iso2022_kr',
|
169
|
-
'latin_1','iso8859_2','iso8859_3','iso8859_4','iso8859_5','iso8859_6','iso8859_7','iso8859_8','iso8859_9','iso8859_10','iso8859_13','iso8859_14','iso8859_15','johab','koi8_r',
|
170
|
-
'koi8_u','mac_cyrillic','mac_greek','mac_iceland','mac_latin2','mac_roman','mac_turkish','ptcp154','shift_jis','shift_jis_2004','shift_jisx0213','utf_16','utf_16_be','utf_16_le',
|
171
|
-
'utf_7','utf_8','utf_8_sig')
|
172
|
-
results=[]
|
173
|
-
for codec in codecs:
|
174
|
-
try:
|
175
|
-
testo=textBytes.decode(codec)
|
176
|
-
if testo==expectedText:
|
177
|
-
results.append(codec)
|
178
|
-
except UnicodeDecodeError:
|
179
|
-
pass
|
180
|
-
return results
|
1
|
+
import locale
|
2
|
+
import random
|
3
|
+
import string
|
4
|
+
|
5
|
+
from modulitiz_micro.ModuloDate import ModuloDate
|
6
|
+
|
7
|
+
|
8
|
+
class ModuloStringhe(object):
|
9
|
+
"""
|
10
|
+
Utility di gestione delle stringhe.
|
11
|
+
"""
|
12
|
+
|
13
|
+
CODIFICA_ASCII="ascii"
|
14
|
+
CODIFICA_LATIN1="latin_1"
|
15
|
+
CODIFICA_UTF8="utf-8"
|
16
|
+
|
17
|
+
SEP=r"//||//"
|
18
|
+
|
19
|
+
@classmethod
|
20
|
+
def setLocaleItalian(cls):
|
21
|
+
"""
|
22
|
+
Necessario per avere, ad esempio, il giorno della settimana nella lingua corretta.
|
23
|
+
"""
|
24
|
+
cls.setLocale("it_IT")
|
25
|
+
|
26
|
+
@classmethod
|
27
|
+
def setLocale(cls,lang:str):
|
28
|
+
"""
|
29
|
+
Imposta la lingua predefinita.
|
30
|
+
"""
|
31
|
+
try:
|
32
|
+
cls.__setLocale(lang)
|
33
|
+
except locale.Error:
|
34
|
+
lang+=".utf8"
|
35
|
+
cls.__setLocale(lang)
|
36
|
+
|
37
|
+
@staticmethod
|
38
|
+
def __setLocale(lang:str):
|
39
|
+
locale.setlocale(locale.LC_TIME, lang)
|
40
|
+
|
41
|
+
@staticmethod
|
42
|
+
def isEmpty(val:str|None)->bool:
|
43
|
+
"""
|
44
|
+
Verifica se il valore passato in input è NULL o vuoto.
|
45
|
+
"""
|
46
|
+
if val is None:
|
47
|
+
return True
|
48
|
+
val=str(val)
|
49
|
+
return val==''
|
50
|
+
|
51
|
+
@staticmethod
|
52
|
+
def contains(haystack:str,needle:str)->bool:
|
53
|
+
"""
|
54
|
+
Verifica se un testo è contenuto in un altro testo.
|
55
|
+
:param haystack: testo contenitore
|
56
|
+
:param needle: testo da cercare
|
57
|
+
"""
|
58
|
+
return haystack.find(needle)!=-1
|
59
|
+
|
60
|
+
@staticmethod
|
61
|
+
def normalizzaEol(cont:str)->str:
|
62
|
+
"""
|
63
|
+
Converte i caratteri di fine riga secondo lo standard Unix (universale)
|
64
|
+
"""
|
65
|
+
cont=cont.replace("\r\n","\n")
|
66
|
+
cont=cont.replace("\r","\n")
|
67
|
+
return cont
|
68
|
+
|
69
|
+
@staticmethod
|
70
|
+
def normalizzaTrattini(testo:str)->str:
|
71
|
+
"""
|
72
|
+
Tutti i caratteri assimilabili come un trattino vengono convertiti in trattini.
|
73
|
+
"""
|
74
|
+
#https://en.wikipedia.org/wiki/Dash#Common_dashes_and_Unicode_characters
|
75
|
+
testo=testo.replace(u'\u2012',"-") #figure dash
|
76
|
+
testo=testo.replace(u'\u2013',"-") #en dash
|
77
|
+
testo=testo.replace(u'\u2014',"-") #em dash
|
78
|
+
testo=testo.replace(u'\u2015',"-") #horizontal bar
|
79
|
+
#https://en.wikipedia.org/wiki/Hyphen#Unicode
|
80
|
+
testo=testo.replace(u'\u002D',"-") #HYPHEN-MINUS
|
81
|
+
testo=testo.replace(u'\u2212',"-") #MINUS SIGN
|
82
|
+
testo=testo.replace(u'\u00AD',"-") #SOFT HYPHEN
|
83
|
+
testo=testo.replace(u'\u2010',"-") #HYPHEN
|
84
|
+
testo=testo.replace(u'\u2011',"-") #NON-BREAKING HYPHEN
|
85
|
+
testo=testo.replace(u'\u0584',"-") #ARMENIAN HYPHEN
|
86
|
+
testo=testo.replace(u'\u1806',"-") #MONGOLIAN SOFT HYPHEN
|
87
|
+
testo=testo.replace(u'\uFE63',"-") #SMALL HYPHEN-MINUS
|
88
|
+
testo=testo.replace(u'\uFF0D',"-") #FULLWIDTH HYPHEN-MINUS
|
89
|
+
testo=testo.replace(u'\u2043',"-") #HYPHEN BULLET
|
90
|
+
return testo
|
91
|
+
|
92
|
+
@staticmethod
|
93
|
+
def normalizzaCaratteriSpeciali(testo:str)->str:
|
94
|
+
"""
|
95
|
+
Normalizzazione altri caratteri speciali.
|
96
|
+
"""
|
97
|
+
testo=testo.replace(u'\u039b','&') #GREEK CAPITAL LETTER LAMDA
|
98
|
+
return testo
|
99
|
+
|
100
|
+
@classmethod
|
101
|
+
def aggiungiTimestamp(cls,nomefile:str)->str:
|
102
|
+
"""
|
103
|
+
Se il nome del file ha l'estensione aggiungo il timestamp prima dell'estensione
|
104
|
+
"""
|
105
|
+
timestamp=ModuloDate.dateToString(None,ModuloDate.FORMATO_DATA_ORA_NOSPAZI)
|
106
|
+
if not cls.contains(nomefile,"."):
|
107
|
+
return nomefile+"_"+timestamp
|
108
|
+
arr=nomefile.split(".")
|
109
|
+
nuovonome=".".join(arr[0:-1])+"_"+timestamp+"."+arr[-1]
|
110
|
+
return nuovonome
|
111
|
+
|
112
|
+
@classmethod
|
113
|
+
def phoneNumberFormat(cls,stringa:str,sep:str):
|
114
|
+
"""
|
115
|
+
Formatta un numero di telefono rendendolo più facile da leggere.
|
116
|
+
"""
|
117
|
+
return cls.insertCharEveryN(stringa,sep,3)
|
118
|
+
|
119
|
+
@staticmethod
|
120
|
+
def capitalizeEveryWord(text:str)->str:
|
121
|
+
"""
|
122
|
+
Converte in maiuscolo il primo carattere di ogni parola.
|
123
|
+
"""
|
124
|
+
arr=text.split(" ")
|
125
|
+
arrNew=[x.capitalize() for x in arr]
|
126
|
+
textNew=" ".join(arrNew)
|
127
|
+
return textNew
|
128
|
+
|
129
|
+
@staticmethod
|
130
|
+
def splitColonne(text:str,sep:str)->list:
|
131
|
+
"""
|
132
|
+
Divide una stringa in colonne, ad ogni colonna vengono tolti gli spazi all'inizio e alla fine.
|
133
|
+
"""
|
134
|
+
colonne=text.split(sep)
|
135
|
+
colonne=[x.strip() for x in colonne]
|
136
|
+
return colonne
|
137
|
+
|
138
|
+
@staticmethod
|
139
|
+
def randomString(useLower:bool,useUpper:bool,useDigits:bool,length:int)->str:
|
140
|
+
"""
|
141
|
+
Crea una stringa di caratteri e/o numeri di lunghezza configurabile.
|
142
|
+
"""
|
143
|
+
chars=""
|
144
|
+
if useLower:
|
145
|
+
chars+=string.ascii_lowercase
|
146
|
+
if useUpper:
|
147
|
+
chars+=string.ascii_uppercase
|
148
|
+
if useDigits:
|
149
|
+
chars+=string.digits
|
150
|
+
return ''.join(random.choices(chars, k=length))
|
151
|
+
|
152
|
+
@staticmethod
|
153
|
+
def insertCharEveryN(stringa:str,sep:str,everyN:int)->str:
|
154
|
+
"""
|
155
|
+
Inserisce un carattere o un testo ogni N caratteri di un altro testo.
|
156
|
+
"""
|
157
|
+
return sep.join(stringa[i:i+everyN] for i in range(0, len(stringa), everyN))
|
158
|
+
|
159
|
+
@staticmethod
|
160
|
+
def trovaCodificaCorretta(textBytes:bytes,expectedText:str)->list:
|
161
|
+
"""
|
162
|
+
Questa funzione non ti puo' dire se la codifica e' corretta,
|
163
|
+
devi verificarlo tu a occhio perche' piu' codifiche possono andare bene.
|
164
|
+
"""
|
165
|
+
# questa variabile la lascio qui dentro perche' e' pesante
|
166
|
+
codecs=('ascii','big5','big5hkscs','cp037','cp424','cp437','cp500','cp737','cp775','cp850','cp852','cp855','cp856','cp857','cp860','cp861','cp862','cp863','cp864','cp865','cp866',
|
167
|
+
'cp869','cp874','cp875','cp932','cp949','cp950','cp1006','cp1026','cp1140','cp1250','cp1251','cp1252','cp1253','cp1254','cp1255','cp1256','cp1257','cp1258','euc_jp',
|
168
|
+
'euc_jis_2004','euc_jisx0213','euc_kr','gb2312','gbk','gb18030','hz','iso2022_jp','iso2022_jp_1','iso2022_jp_2','iso2022_jp_2004','iso2022_jp_3','iso2022_jp_ext','iso2022_kr',
|
169
|
+
'latin_1','iso8859_2','iso8859_3','iso8859_4','iso8859_5','iso8859_6','iso8859_7','iso8859_8','iso8859_9','iso8859_10','iso8859_13','iso8859_14','iso8859_15','johab','koi8_r',
|
170
|
+
'koi8_u','mac_cyrillic','mac_greek','mac_iceland','mac_latin2','mac_roman','mac_turkish','ptcp154','shift_jis','shift_jis_2004','shift_jisx0213','utf_16','utf_16_be','utf_16_le',
|
171
|
+
'utf_7','utf_8','utf_8_sig')
|
172
|
+
results=[]
|
173
|
+
for codec in codecs:
|
174
|
+
try:
|
175
|
+
testo=textBytes.decode(codec)
|
176
|
+
if testo==expectedText:
|
177
|
+
results.append(codec)
|
178
|
+
except UnicodeDecodeError:
|
179
|
+
pass
|
180
|
+
return results
|
modulitiz_micro/ModuloTarghe.py
CHANGED
@@ -1,46 +1,46 @@
|
|
1
|
-
from modulitiz_micro.ModuloNumeri import ModuloNumeri
|
2
|
-
from modulitiz_micro.ModuloStringhe import ModuloStringhe
|
3
|
-
from modulitiz_micro.gestionedom.GestioneDom import GestioneDom
|
4
|
-
from modulitiz_micro.rete.http.ModuloHttp import ModuloHttp
|
5
|
-
|
6
|
-
|
7
|
-
class ModuloTarghe(object):
|
8
|
-
"""
|
9
|
-
Utility di gestione delle targhe delle auto.
|
10
|
-
"""
|
11
|
-
|
12
|
-
URL="https://autokar.it/targhe"
|
13
|
-
|
14
|
-
@classmethod
|
15
|
-
def getAnno(cls,targa:str)->int|None:
|
16
|
-
"""
|
17
|
-
Cerca la targa e restituisce approssimativamente l'anno di immatricolazione.
|
18
|
-
:param targa: la targa dell'auto da cercare.
|
19
|
-
"""
|
20
|
-
http=ModuloHttp(cls.URL,None,False)
|
21
|
-
responseBody=http.doGet(3,True).responseBody.decode(ModuloStringhe.CODIFICA_LATIN1)
|
22
|
-
gestioneDom=GestioneDom(None,responseBody)
|
23
|
-
elementi=gestioneDom.selector(".entry-content p")
|
24
|
-
targaIniziale=targa[:2]
|
25
|
-
for elem in elementi:
|
26
|
-
anno=cls.__getAnno(elem,targaIniziale)
|
27
|
-
if anno is not None:
|
28
|
-
return anno
|
29
|
-
|
30
|
-
@classmethod
|
31
|
-
def __getAnno(cls,tag,targaIniziale:str)->int|None:
|
32
|
-
elementi=tag.contents
|
33
|
-
if len(elementi)!=2:
|
34
|
-
return None
|
35
|
-
try:
|
36
|
-
testo=elementi[0].contents[0]
|
37
|
-
except AttributeError:
|
38
|
-
return None
|
39
|
-
if targaIniziale!=testo:
|
40
|
-
return None
|
41
|
-
annoStr=elementi[1].strip()
|
42
|
-
anno=ModuloNumeri.strToInt(annoStr)
|
43
|
-
if anno is not None:
|
44
|
-
return anno
|
45
|
-
anno=int(annoStr.split(" ")[0])
|
46
|
-
return anno
|
1
|
+
from modulitiz_micro.ModuloNumeri import ModuloNumeri
|
2
|
+
from modulitiz_micro.ModuloStringhe import ModuloStringhe
|
3
|
+
from modulitiz_micro.gestionedom.GestioneDom import GestioneDom
|
4
|
+
from modulitiz_micro.rete.http.ModuloHttp import ModuloHttp
|
5
|
+
|
6
|
+
|
7
|
+
class ModuloTarghe(object):
|
8
|
+
"""
|
9
|
+
Utility di gestione delle targhe delle auto.
|
10
|
+
"""
|
11
|
+
|
12
|
+
URL="https://autokar.it/targhe"
|
13
|
+
|
14
|
+
@classmethod
|
15
|
+
def getAnno(cls,targa:str)->int|None:
|
16
|
+
"""
|
17
|
+
Cerca la targa e restituisce approssimativamente l'anno di immatricolazione.
|
18
|
+
:param targa: la targa dell'auto da cercare.
|
19
|
+
"""
|
20
|
+
http=ModuloHttp(cls.URL,None,False)
|
21
|
+
responseBody=http.doGet(3,True).responseBody.decode(ModuloStringhe.CODIFICA_LATIN1)
|
22
|
+
gestioneDom=GestioneDom(None,responseBody)
|
23
|
+
elementi=gestioneDom.selector(".entry-content p")
|
24
|
+
targaIniziale=targa[:2]
|
25
|
+
for elem in elementi:
|
26
|
+
anno=cls.__getAnno(elem,targaIniziale)
|
27
|
+
if anno is not None:
|
28
|
+
return anno
|
29
|
+
|
30
|
+
@classmethod
|
31
|
+
def __getAnno(cls,tag,targaIniziale:str)->int|None:
|
32
|
+
elementi=tag.contents
|
33
|
+
if len(elementi)!=2:
|
34
|
+
return None
|
35
|
+
try:
|
36
|
+
testo=elementi[0].contents[0]
|
37
|
+
except AttributeError:
|
38
|
+
return None
|
39
|
+
if targaIniziale!=testo:
|
40
|
+
return None
|
41
|
+
annoStr=elementi[1].strip()
|
42
|
+
anno=ModuloNumeri.strToInt(annoStr)
|
43
|
+
if anno is not None:
|
44
|
+
return anno
|
45
|
+
anno=int(annoStr.split(" ")[0])
|
46
|
+
return anno
|
@@ -1,18 +1,18 @@
|
|
1
|
-
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
2
|
-
|
3
|
-
|
4
|
-
class ModuloAndroid(object):
|
5
|
-
@staticmethod
|
6
|
-
def isAaptInstalled()->bool:
|
7
|
-
return ModuloSystem.isAptPackageInstalled("aapt")
|
8
|
-
@staticmethod
|
9
|
-
def isAdbInstalled()->bool:
|
10
|
-
return ModuloSystem.isAptPackageInstalled("adb")
|
11
|
-
|
12
|
-
@staticmethod
|
13
|
-
def getApkVersionName(nomefile:str)->str|None:
|
14
|
-
if not ModuloAndroid.isAaptInstalled():
|
15
|
-
return None
|
16
|
-
cmd=rf'''aapt dump badging {nomefile} | grep "versionName" | sed -e "s/.*versionName='//" -e "s/' .*//"'''
|
17
|
-
output=ModuloSystem.systemCallReturnOutput(cmd,None)
|
18
|
-
return output
|
1
|
+
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
2
|
+
|
3
|
+
|
4
|
+
class ModuloAndroid(object):
|
5
|
+
@staticmethod
|
6
|
+
def isAaptInstalled()->bool:
|
7
|
+
return ModuloSystem.isAptPackageInstalled("aapt")
|
8
|
+
@staticmethod
|
9
|
+
def isAdbInstalled()->bool:
|
10
|
+
return ModuloSystem.isAptPackageInstalled("adb")
|
11
|
+
|
12
|
+
@staticmethod
|
13
|
+
def getApkVersionName(nomefile:str)->str|None:
|
14
|
+
if not ModuloAndroid.isAaptInstalled():
|
15
|
+
return None
|
16
|
+
cmd=rf'''aapt dump badging {nomefile} | grep "versionName" | sed -e "s/.*versionName='//" -e "s/' .*//"'''
|
17
|
+
output=ModuloSystem.systemCallReturnOutput(cmd,None)
|
18
|
+
return output
|
@@ -1,48 +1,48 @@
|
|
1
|
-
from modulitiz_micro.ModuloStringhe import ModuloStringhe
|
2
|
-
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
3
|
-
|
4
|
-
|
5
|
-
class ModuloAndroidAdb(object):
|
6
|
-
"""
|
7
|
-
deviceId puo' essere l'identificativo:
|
8
|
-
- del dispositivo di 16 caratteri esadecimale
|
9
|
-
- della porta usb, del prodotto, del modello, ... (vedi il comando 'adb devices -l')
|
10
|
-
il transport_id non e' supportato
|
11
|
-
"""
|
12
|
-
|
13
|
-
def __init__(self,deviceId:str):
|
14
|
-
self.deviceId=deviceId
|
15
|
-
|
16
|
-
def isDeviceConnected(self)->bool:
|
17
|
-
cmd=r'adb -s "%s" get-state'%(self.deviceId,)
|
18
|
-
return self.__retrieveLastLineOfOutput(cmd)=='device'
|
19
|
-
|
20
|
-
def isDeviceUnlocked(self)->bool:
|
21
|
-
cmd=r'adb -s "%s" shell dumpsys window | grep mDreamingLockscreen'%(self.deviceId,)
|
22
|
-
output=ModuloSystem.systemCallReturnOutput(cmd,None).strip()
|
23
|
-
valori=[x.split("=")[1] for x in output.split(" ")]
|
24
|
-
for valore in valori:
|
25
|
-
if valore=="true":
|
26
|
-
return False
|
27
|
-
return True
|
28
|
-
|
29
|
-
def reboot(self)->bool:
|
30
|
-
cmd=r'adb -s "%s" reboot'%(self.deviceId,)
|
31
|
-
return self.__retrieveLastLineOfOutput(cmd)==''
|
32
|
-
def shutdown(self)->bool:
|
33
|
-
cmd=r'adb -s "%s" reboot -p'%(self.deviceId,)
|
34
|
-
return self.__retrieveLastLineOfOutput(cmd)=='Done'
|
35
|
-
|
36
|
-
@classmethod
|
37
|
-
def closeServer(cls) -> bool:
|
38
|
-
cmd="adb kill-server"
|
39
|
-
return cls.__retrieveOutput(cmd)==''
|
40
|
-
|
41
|
-
@staticmethod
|
42
|
-
def __retrieveOutput(cmd)->str:
|
43
|
-
return ModuloStringhe.normalizzaEol(ModuloSystem.systemCallReturnOutput(cmd,None)).strip()
|
44
|
-
@classmethod
|
45
|
-
def __retrieveLastLineOfOutput(cls,cmd)->str:
|
46
|
-
output=cls.__retrieveOutput(cmd)
|
47
|
-
righe=output.split("\n")
|
48
|
-
return righe[-1]
|
1
|
+
from modulitiz_micro.ModuloStringhe import ModuloStringhe
|
2
|
+
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
3
|
+
|
4
|
+
|
5
|
+
class ModuloAndroidAdb(object):
|
6
|
+
"""
|
7
|
+
deviceId puo' essere l'identificativo:
|
8
|
+
- del dispositivo di 16 caratteri esadecimale
|
9
|
+
- della porta usb, del prodotto, del modello, ... (vedi il comando 'adb devices -l')
|
10
|
+
il transport_id non e' supportato
|
11
|
+
"""
|
12
|
+
|
13
|
+
def __init__(self,deviceId:str):
|
14
|
+
self.deviceId=deviceId
|
15
|
+
|
16
|
+
def isDeviceConnected(self)->bool:
|
17
|
+
cmd=r'adb -s "%s" get-state'%(self.deviceId,)
|
18
|
+
return self.__retrieveLastLineOfOutput(cmd)=='device'
|
19
|
+
|
20
|
+
def isDeviceUnlocked(self)->bool:
|
21
|
+
cmd=r'adb -s "%s" shell dumpsys window | grep mDreamingLockscreen'%(self.deviceId,)
|
22
|
+
output=ModuloSystem.systemCallReturnOutput(cmd,None).strip()
|
23
|
+
valori=[x.split("=")[1] for x in output.split(" ")]
|
24
|
+
for valore in valori:
|
25
|
+
if valore=="true":
|
26
|
+
return False
|
27
|
+
return True
|
28
|
+
|
29
|
+
def reboot(self)->bool:
|
30
|
+
cmd=r'adb -s "%s" reboot'%(self.deviceId,)
|
31
|
+
return self.__retrieveLastLineOfOutput(cmd)==''
|
32
|
+
def shutdown(self)->bool:
|
33
|
+
cmd=r'adb -s "%s" reboot -p'%(self.deviceId,)
|
34
|
+
return self.__retrieveLastLineOfOutput(cmd)=='Done'
|
35
|
+
|
36
|
+
@classmethod
|
37
|
+
def closeServer(cls) -> bool:
|
38
|
+
cmd="adb kill-server"
|
39
|
+
return cls.__retrieveOutput(cmd)==''
|
40
|
+
|
41
|
+
@staticmethod
|
42
|
+
def __retrieveOutput(cmd)->str:
|
43
|
+
return ModuloStringhe.normalizzaEol(ModuloSystem.systemCallReturnOutput(cmd,None)).strip()
|
44
|
+
@classmethod
|
45
|
+
def __retrieveLastLineOfOutput(cls,cmd)->str:
|
46
|
+
output=cls.__retrieveOutput(cmd)
|
47
|
+
righe=output.split("\n")
|
48
|
+
return righe[-1]
|