modulitiz-micro 2.32.0__py311-none-any.whl → 2.33.0__py311-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +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 +28 -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/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/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 +117 -131
- modulitiz_micro/util/wheel/ModuloCheckTestNamingConvention.py +83 -86
- modulitiz_micro/util/wheel/ModuloToml.py +40 -40
- modulitiz_micro/util/wheel/ModuloWheel.py +12 -12
- {modulitiz_micro-2.32.0.dist-info → modulitiz_micro-2.33.0.dist-info}/LICENSE +21 -21
- {modulitiz_micro-2.32.0.dist-info → modulitiz_micro-2.33.0.dist-info}/METADATA +64 -64
- modulitiz_micro-2.33.0.dist-info/RECORD +104 -0
- modulitiz_micro-2.32.0.dist-info/RECORD +0 -104
- {modulitiz_micro-2.32.0.dist-info → modulitiz_micro-2.33.0.dist-info}/WHEEL +0 -0
- {modulitiz_micro-2.32.0.dist-info → modulitiz_micro-2.33.0.dist-info}/top_level.txt +0 -0
@@ -1,67 +1,67 @@
|
|
1
|
-
import multiprocessing
|
2
|
-
import queue
|
3
|
-
import subprocess
|
4
|
-
import threading
|
5
|
-
import time
|
6
|
-
|
7
|
-
import psutil
|
8
|
-
|
9
|
-
from modulitiz_micro.files.ModuloLogging import ModuloLogging
|
10
|
-
from modulitiz_micro.
|
11
|
-
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
12
|
-
|
13
|
-
|
14
|
-
class ModuloSystemPipe(object):
|
15
|
-
|
16
|
-
@classmethod
|
17
|
-
def read(cls,logger: ModuloLogging,pipe: subprocess.Popen,timeout:int|float) -> str|None:
|
18
|
-
event=threading.Event()
|
19
|
-
q=multiprocessing.Queue()
|
20
|
-
ModuloThread.startDaemon(logger,cls.__read,(pipe,q,event))
|
21
|
-
|
22
|
-
output=""
|
23
|
-
pauseInterval=0.1
|
24
|
-
contaTimeout=0
|
25
|
-
continua=True
|
26
|
-
while continua:
|
27
|
-
outputBefore=output
|
28
|
-
try:
|
29
|
-
output+=q.get_nowait()
|
30
|
-
except queue.Empty:
|
31
|
-
pass
|
32
|
-
continua=(output=="" or output!=outputBefore)
|
33
|
-
if continua:
|
34
|
-
if output=="":
|
35
|
-
contaTimeout+=pauseInterval
|
36
|
-
else:
|
37
|
-
contaTimeout=0
|
38
|
-
time.sleep(pauseInterval)
|
39
|
-
else:
|
40
|
-
if contaTimeout<=timeout:
|
41
|
-
time.sleep(pauseInterval)
|
42
|
-
continua=True
|
43
|
-
contaTimeout+=pauseInterval
|
44
|
-
event.set()
|
45
|
-
return output.rstrip()
|
46
|
-
|
47
|
-
@staticmethod
|
48
|
-
def __read(pipe: subprocess.Popen,q: multiprocessing.Queue,event: threading.Event):
|
49
|
-
chunk=pipe.stdout.readline()
|
50
|
-
while chunk:
|
51
|
-
q.put_nowait(chunk.decode())
|
52
|
-
if event.is_set():
|
53
|
-
return
|
54
|
-
chunk=pipe.stdout.readline()
|
55
|
-
|
56
|
-
@staticmethod
|
57
|
-
def closeAndCheck(process:psutil.Process|subprocess.Popen,alias:str,timeout:int,callbackError,callbackSuccess):
|
58
|
-
ModuloSystem.sendCtrlcProcess(process.pid)
|
59
|
-
try:
|
60
|
-
exitCode=process.wait(timeout)
|
61
|
-
except subprocess.TimeoutExpired:
|
62
|
-
callbackError(alias+" non terminato correttamente nel tempo utile")
|
63
|
-
return
|
64
|
-
if exitCode is None or exitCode==0:
|
65
|
-
callbackSuccess(alias+" terminato con successo")
|
66
|
-
return
|
67
|
-
callbackError(alias+" non terminato correttamente, esito=%s"%(exitCode,))
|
1
|
+
import multiprocessing
|
2
|
+
import queue
|
3
|
+
import subprocess
|
4
|
+
import threading
|
5
|
+
import time
|
6
|
+
|
7
|
+
import psutil
|
8
|
+
|
9
|
+
from modulitiz_micro.files.ModuloLogging import ModuloLogging
|
10
|
+
from modulitiz_micro.multithread.ModuloThread import ModuloThread
|
11
|
+
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
12
|
+
|
13
|
+
|
14
|
+
class ModuloSystemPipe(object):
|
15
|
+
|
16
|
+
@classmethod
|
17
|
+
def read(cls,logger: ModuloLogging,pipe: subprocess.Popen,timeout:int|float) -> str|None:
|
18
|
+
event=threading.Event()
|
19
|
+
q=multiprocessing.Queue()
|
20
|
+
ModuloThread.startDaemon(logger,cls.__read,(pipe,q,event))
|
21
|
+
|
22
|
+
output=""
|
23
|
+
pauseInterval=0.1
|
24
|
+
contaTimeout=0
|
25
|
+
continua=True
|
26
|
+
while continua:
|
27
|
+
outputBefore=output
|
28
|
+
try:
|
29
|
+
output+=q.get_nowait()
|
30
|
+
except queue.Empty:
|
31
|
+
pass
|
32
|
+
continua=(output=="" or output!=outputBefore)
|
33
|
+
if continua:
|
34
|
+
if output=="":
|
35
|
+
contaTimeout+=pauseInterval
|
36
|
+
else:
|
37
|
+
contaTimeout=0
|
38
|
+
time.sleep(pauseInterval)
|
39
|
+
else:
|
40
|
+
if contaTimeout<=timeout:
|
41
|
+
time.sleep(pauseInterval)
|
42
|
+
continua=True
|
43
|
+
contaTimeout+=pauseInterval
|
44
|
+
event.set()
|
45
|
+
return output.rstrip()
|
46
|
+
|
47
|
+
@staticmethod
|
48
|
+
def __read(pipe: subprocess.Popen,q: multiprocessing.Queue,event: threading.Event):
|
49
|
+
chunk=pipe.stdout.readline()
|
50
|
+
while chunk:
|
51
|
+
q.put_nowait(chunk.decode())
|
52
|
+
if event.is_set():
|
53
|
+
return
|
54
|
+
chunk=pipe.stdout.readline()
|
55
|
+
|
56
|
+
@staticmethod
|
57
|
+
def closeAndCheck(process:psutil.Process|subprocess.Popen,alias:str,timeout:int,callbackError,callbackSuccess):
|
58
|
+
ModuloSystem.sendCtrlcProcess(process.pid)
|
59
|
+
try:
|
60
|
+
exitCode=process.wait(timeout)
|
61
|
+
except subprocess.TimeoutExpired:
|
62
|
+
callbackError(alias+" non terminato correttamente nel tempo utile")
|
63
|
+
return
|
64
|
+
if exitCode is None or exitCode==0:
|
65
|
+
callbackSuccess(alias+" terminato con successo")
|
66
|
+
return
|
67
|
+
callbackError(alias+" non terminato correttamente, esito=%s"%(exitCode,))
|
@@ -1,52 +1,52 @@
|
|
1
|
-
from abc import abstractmethod
|
2
|
-
|
3
|
-
from telethon import TelegramClient
|
4
|
-
|
5
|
-
from modulitiz_micro.ModuloStringhe import ModuloStringhe
|
6
|
-
from modulitiz_micro.util.decorators.noAwait import noAwait
|
7
|
-
|
8
|
-
|
9
|
-
class ModuloTelegram(object):
|
10
|
-
def __init__(self,apiId:int,apiHash:str,nomefileSessione:str,phoneNumWithCountryCode:str):
|
11
|
-
self.apiId=apiId
|
12
|
-
self.apiHash=apiHash
|
13
|
-
self.nomefileSessione=nomefileSessione
|
14
|
-
self.phoneNumWithCountryCode=phoneNumWithCountryCode
|
15
|
-
|
16
|
-
self.client:TelegramClient|None = None
|
17
|
-
|
18
|
-
@noAwait
|
19
|
-
async def connect(self):
|
20
|
-
self.client = TelegramClient(self.nomefileSessione, self.apiId, self.apiHash)
|
21
|
-
await self.client.connect()
|
22
|
-
# se il client non e' autorizzato richiedo la verifica
|
23
|
-
if await self.client.is_user_authorized():
|
24
|
-
return
|
25
|
-
await self.client.send_code_request(self.phoneNumWithCountryCode)
|
26
|
-
await self.client.sign_in(self.phoneNumWithCountryCode, self.getVerificationCodefromUser())
|
27
|
-
|
28
|
-
def sendMessageWithConnectAndClose(self,username: str|None,msg: str):
|
29
|
-
"""
|
30
|
-
Apre la connessione, invia il messaggio e chiude la connessione.
|
31
|
-
:param username: il nome utente del destinatario a cui mandare il messaggio
|
32
|
-
:param msg: il testo del messaggio da inviare
|
33
|
-
"""
|
34
|
-
if ModuloStringhe.isEmpty(username):
|
35
|
-
return
|
36
|
-
self.connect()
|
37
|
-
self.sendMessage(username,msg)
|
38
|
-
self.close()
|
39
|
-
|
40
|
-
@noAwait
|
41
|
-
async def sendMessage(self,username:str,msg:str):
|
42
|
-
await self.client.send_message(username, msg, parse_mode='html')
|
43
|
-
|
44
|
-
def close(self):
|
45
|
-
self.client.disconnect()
|
46
|
-
|
47
|
-
@staticmethod
|
48
|
-
@abstractmethod
|
49
|
-
def getVerificationCodefromUser()->str:
|
50
|
-
"""
|
51
|
-
Deve ritornare una stringa che corrisponde al codice di verifica inserito dall'utente.
|
52
|
-
"""
|
1
|
+
from abc import abstractmethod
|
2
|
+
|
3
|
+
from telethon import TelegramClient
|
4
|
+
|
5
|
+
from modulitiz_micro.ModuloStringhe import ModuloStringhe
|
6
|
+
from modulitiz_micro.util.decorators.noAwait import noAwait
|
7
|
+
|
8
|
+
|
9
|
+
class ModuloTelegram(object):
|
10
|
+
def __init__(self,apiId:int,apiHash:str,nomefileSessione:str,phoneNumWithCountryCode:str):
|
11
|
+
self.apiId=apiId
|
12
|
+
self.apiHash=apiHash
|
13
|
+
self.nomefileSessione=nomefileSessione
|
14
|
+
self.phoneNumWithCountryCode=phoneNumWithCountryCode
|
15
|
+
|
16
|
+
self.client:TelegramClient|None = None
|
17
|
+
|
18
|
+
@noAwait
|
19
|
+
async def connect(self):
|
20
|
+
self.client = TelegramClient(self.nomefileSessione, self.apiId, self.apiHash)
|
21
|
+
await self.client.connect()
|
22
|
+
# se il client non e' autorizzato richiedo la verifica
|
23
|
+
if await self.client.is_user_authorized():
|
24
|
+
return
|
25
|
+
await self.client.send_code_request(self.phoneNumWithCountryCode)
|
26
|
+
await self.client.sign_in(self.phoneNumWithCountryCode, self.getVerificationCodefromUser())
|
27
|
+
|
28
|
+
def sendMessageWithConnectAndClose(self,username: str|None,msg: str):
|
29
|
+
"""
|
30
|
+
Apre la connessione, invia il messaggio e chiude la connessione.
|
31
|
+
:param username: il nome utente del destinatario a cui mandare il messaggio
|
32
|
+
:param msg: il testo del messaggio da inviare
|
33
|
+
"""
|
34
|
+
if ModuloStringhe.isEmpty(username):
|
35
|
+
return
|
36
|
+
self.connect()
|
37
|
+
self.sendMessage(username,msg)
|
38
|
+
self.close()
|
39
|
+
|
40
|
+
@noAwait
|
41
|
+
async def sendMessage(self,username:str,msg:str):
|
42
|
+
await self.client.send_message(username, msg, parse_mode='html')
|
43
|
+
|
44
|
+
def close(self):
|
45
|
+
self.client.disconnect()
|
46
|
+
|
47
|
+
@staticmethod
|
48
|
+
@abstractmethod
|
49
|
+
def getVerificationCodefromUser()->str:
|
50
|
+
"""
|
51
|
+
Deve ritornare una stringa che corrisponde al codice di verifica inserito dall'utente.
|
52
|
+
"""
|
@@ -1,26 +1,26 @@
|
|
1
|
-
from modulitiz_micro.social.telegram.ModuloTelegram import ModuloTelegram
|
2
|
-
|
3
|
-
|
4
|
-
class ModuloTelegramSimple(ModuloTelegram):
|
5
|
-
"""
|
6
|
-
Utility di gestione semplice per il sistema di messaggistica istantanea Telegram.
|
7
|
-
"""
|
8
|
-
|
9
|
-
def __init__(self,usernameDestinatario:str|None,*args,**kwargs):
|
10
|
-
super().__init__(*args,**kwargs)
|
11
|
-
self.usernameDestinatario=usernameDestinatario
|
12
|
-
|
13
|
-
@staticmethod
|
14
|
-
def getVerificationCodefromUser()->str:
|
15
|
-
"""
|
16
|
-
Specifica in che modo chiedere all'utente il codice di verifica,
|
17
|
-
viene chiesto solo la prima volta che ci si collega.
|
18
|
-
"""
|
19
|
-
return input('Inserisci il codice di verifica: ')
|
20
|
-
|
21
|
-
def sendMessageDefaultDestinatario(self,msg:str):
|
22
|
-
"""
|
23
|
-
Invia il messaggio al destinatario di default specificato nella creazione di quest'oggetto.
|
24
|
-
:param msg: il testo del messaggio da inviare
|
25
|
-
"""
|
26
|
-
super().sendMessageWithConnectAndClose(self.usernameDestinatario,msg)
|
1
|
+
from modulitiz_micro.social.telegram.ModuloTelegram import ModuloTelegram
|
2
|
+
|
3
|
+
|
4
|
+
class ModuloTelegramSimple(ModuloTelegram):
|
5
|
+
"""
|
6
|
+
Utility di gestione semplice per il sistema di messaggistica istantanea Telegram.
|
7
|
+
"""
|
8
|
+
|
9
|
+
def __init__(self,usernameDestinatario:str|None,*args,**kwargs):
|
10
|
+
super().__init__(*args,**kwargs)
|
11
|
+
self.usernameDestinatario=usernameDestinatario
|
12
|
+
|
13
|
+
@staticmethod
|
14
|
+
def getVerificationCodefromUser()->str:
|
15
|
+
"""
|
16
|
+
Specifica in che modo chiedere all'utente il codice di verifica,
|
17
|
+
viene chiesto solo la prima volta che ci si collega.
|
18
|
+
"""
|
19
|
+
return input('Inserisci il codice di verifica: ')
|
20
|
+
|
21
|
+
def sendMessageDefaultDestinatario(self,msg:str):
|
22
|
+
"""
|
23
|
+
Invia il messaggio al destinatario di default specificato nella creazione di quest'oggetto.
|
24
|
+
:param msg: il testo del messaggio da inviare
|
25
|
+
"""
|
26
|
+
super().sendMessageWithConnectAndClose(self.usernameDestinatario,msg)
|
@@ -1,11 +1,11 @@
|
|
1
|
-
from modulitiz_micro.files.ModuloFiles import ModuloFiles
|
2
|
-
|
3
|
-
from modulitiz_micro.util.beans.conf.AbstractConfBean import AbstractConfBean
|
4
|
-
|
5
|
-
|
6
|
-
class AbstractBasicConfBean(AbstractConfBean):
|
7
|
-
|
8
|
-
def __init__(self,clazz,*args,**kwargs):
|
9
|
-
super().__init__(*args,**kwargs)
|
10
|
-
self.INPUT_FILE_CONF=ModuloFiles.pathJoin(self.CARTELLA_BASE_PROGETTO,"conf.json")
|
11
|
-
self.fileConf=clazz(self.INPUT_FILE_CONF)
|
1
|
+
from modulitiz_micro.files.ModuloFiles import ModuloFiles
|
2
|
+
|
3
|
+
from modulitiz_micro.util.beans.conf.AbstractConfBean import AbstractConfBean
|
4
|
+
|
5
|
+
|
6
|
+
class AbstractBasicConfBean(AbstractConfBean):
|
7
|
+
|
8
|
+
def __init__(self,clazz,*args,**kwargs):
|
9
|
+
super().__init__(*args,**kwargs)
|
10
|
+
self.INPUT_FILE_CONF=ModuloFiles.pathJoin(self.CARTELLA_BASE_PROGETTO,"conf.json")
|
11
|
+
self.fileConf=clazz(self.INPUT_FILE_CONF)
|
@@ -1,16 +1,16 @@
|
|
1
|
-
from abc import ABC
|
2
|
-
|
3
|
-
from modulitiz_micro.ModuloPyinstaller import ModuloPyinstaller
|
4
|
-
from modulitiz_micro.files.ModuloFiles import ModuloFiles
|
5
|
-
from modulitiz_micro.sistema.EnvVarsEnum import EnvVarsEnum
|
6
|
-
from modulitiz_micro.sistema.ModuloEnvVars import ModuloEnvVars
|
7
|
-
|
8
|
-
|
9
|
-
class AbstractConfBean(ABC):
|
10
|
-
|
11
|
-
def __init__(self,cartellaBase:str|None,nomeProgetto:str):
|
12
|
-
self.CARTELLA_BASE_PROGETTO:str|None=None
|
13
|
-
if cartellaBase is not None:
|
14
|
-
self.CARTELLA_BASE_PROGETTO=ModuloFiles.pathJoin(cartellaBase,nomeProgetto)
|
15
|
-
self.IS_DEBUG=(ModuloEnvVars.getOrNone(EnvVarsEnum.MODULITIZ_IS_DEBUG)=="1" and not ModuloPyinstaller.isExecutableMode())
|
16
|
-
self.NOME_PROGETTO=nomeProgetto
|
1
|
+
from abc import ABC
|
2
|
+
|
3
|
+
from modulitiz_micro.ModuloPyinstaller import ModuloPyinstaller
|
4
|
+
from modulitiz_micro.files.ModuloFiles import ModuloFiles
|
5
|
+
from modulitiz_micro.sistema.EnvVarsEnum import EnvVarsEnum
|
6
|
+
from modulitiz_micro.sistema.ModuloEnvVars import ModuloEnvVars
|
7
|
+
|
8
|
+
|
9
|
+
class AbstractConfBean(ABC):
|
10
|
+
|
11
|
+
def __init__(self,cartellaBase:str|None,nomeProgetto:str):
|
12
|
+
self.CARTELLA_BASE_PROGETTO:str|None=None
|
13
|
+
if cartellaBase is not None:
|
14
|
+
self.CARTELLA_BASE_PROGETTO=ModuloFiles.pathJoin(cartellaBase,nomeProgetto)
|
15
|
+
self.IS_DEBUG=(ModuloEnvVars.getOrNone(EnvVarsEnum.MODULITIZ_IS_DEBUG)=="1" and not ModuloPyinstaller.isExecutableMode())
|
16
|
+
self.NOME_PROGETTO=nomeProgetto
|
@@ -1,11 +1,11 @@
|
|
1
|
-
from modulitiz_micro.util.beans.fileconf.AbstractFileConfBean import AbstractFileConfBean
|
2
|
-
|
3
|
-
|
4
|
-
class AbstractBasicFileConfBean(AbstractFileConfBean):
|
5
|
-
"""
|
6
|
-
Classe che può essere usata come base per definire la struttura del file di configurazione del programma
|
7
|
-
"""
|
8
|
-
|
9
|
-
def __init__(self,*args,**kwargs):
|
10
|
-
super().__init__(*args,**kwargs)
|
11
|
-
self.percorsoCartellaEsterna=self._dizionario['percorsoCartellaEsterna']
|
1
|
+
from modulitiz_micro.util.beans.fileconf.AbstractFileConfBean import AbstractFileConfBean
|
2
|
+
|
3
|
+
|
4
|
+
class AbstractBasicFileConfBean(AbstractFileConfBean):
|
5
|
+
"""
|
6
|
+
Classe che può essere usata come base per definire la struttura del file di configurazione del programma
|
7
|
+
"""
|
8
|
+
|
9
|
+
def __init__(self,*args,**kwargs):
|
10
|
+
super().__init__(*args,**kwargs)
|
11
|
+
self.percorsoCartellaEsterna=self._dizionario['percorsoCartellaEsterna']
|
@@ -1,13 +1,13 @@
|
|
1
|
-
import json
|
2
|
-
from abc import ABC
|
3
|
-
|
4
|
-
from modulitiz_micro.files.ModuloFiles import ModuloFiles
|
5
|
-
|
6
|
-
|
7
|
-
class AbstractFileConfBean(ABC):
|
8
|
-
"""
|
9
|
-
Classe che può essere usata come base per definire la struttura del file di configurazione del programma
|
10
|
-
"""
|
11
|
-
|
12
|
-
def __init__(self,nomefile:str):
|
13
|
-
self._dizionario=json.loads(ModuloFiles.readFileText(nomefile,True))
|
1
|
+
import json
|
2
|
+
from abc import ABC
|
3
|
+
|
4
|
+
from modulitiz_micro.files.ModuloFiles import ModuloFiles
|
5
|
+
|
6
|
+
|
7
|
+
class AbstractFileConfBean(ABC):
|
8
|
+
"""
|
9
|
+
Classe che può essere usata come base per definire la struttura del file di configurazione del programma
|
10
|
+
"""
|
11
|
+
|
12
|
+
def __init__(self,nomefile:str):
|
13
|
+
self._dizionario=json.loads(ModuloFiles.readFileText(nomefile,True))
|
@@ -1,15 +1,15 @@
|
|
1
|
-
from modulitiz_micro.rete.ntp.ModuloNtpIt import ModuloNtpIt
|
2
|
-
|
3
|
-
from modulitiz_micro.util.beans.globalvar.AbstractGlobalVarBean import AbstractGlobalVarBean
|
4
|
-
|
5
|
-
|
6
|
-
class AbstractBasicGlobalVarBean(AbstractGlobalVarBean):
|
7
|
-
"""
|
8
|
-
Classe da usare come base per definire la struttura di una classe che raggrupperà gli oggetti che verranno usati nel programma
|
9
|
-
"""
|
10
|
-
|
11
|
-
def __init__(self,useNtp:bool,*args,**kwargs):
|
12
|
-
super().__init__(*args,**kwargs)
|
13
|
-
if useNtp:
|
14
|
-
self.moduloNtp=ModuloNtpIt(self.logger)
|
15
|
-
|
1
|
+
from modulitiz_micro.rete.ntp.ModuloNtpIt import ModuloNtpIt
|
2
|
+
|
3
|
+
from modulitiz_micro.util.beans.globalvar.AbstractGlobalVarBean import AbstractGlobalVarBean
|
4
|
+
|
5
|
+
|
6
|
+
class AbstractBasicGlobalVarBean(AbstractGlobalVarBean):
|
7
|
+
"""
|
8
|
+
Classe da usare come base per definire la struttura di una classe che raggrupperà gli oggetti che verranno usati nel programma
|
9
|
+
"""
|
10
|
+
|
11
|
+
def __init__(self,useNtp:bool,*args,**kwargs):
|
12
|
+
super().__init__(*args,**kwargs)
|
13
|
+
if useNtp:
|
14
|
+
self.moduloNtp=ModuloNtpIt(self.logger)
|
15
|
+
|
@@ -1,34 +1,34 @@
|
|
1
|
-
from abc import ABC
|
2
|
-
from typing import NewType
|
3
|
-
|
4
|
-
from modulitiz_micro.ModuloDate import ModuloDate
|
5
|
-
from modulitiz_micro.files.ModuloLogging import ModuloLogging
|
6
|
-
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
7
|
-
from modulitiz_micro.util.beans.conf.AbstractConfBean import AbstractConfBean
|
8
|
-
|
9
|
-
|
10
|
-
class AbstractGlobalVarBean(ABC):
|
11
|
-
"""
|
12
|
-
Classe da usare come base per definire la struttura di una classe che raggrupperà gli oggetti che verranno usati nel programma
|
13
|
-
"""
|
14
|
-
|
15
|
-
def __init__(self,confBean:NewType("T",AbstractConfBean),projectTitle:str,projectVersion:str,projectStartYear:int,isDebug:bool|None):
|
16
|
-
self.confBean=confBean
|
17
|
-
self.projectTitle=projectTitle
|
18
|
-
self.projectVersion=projectVersion
|
19
|
-
self.projectStartYear=projectStartYear
|
20
|
-
|
21
|
-
self.projectHeader="%s V%s"%(projectTitle,projectVersion)
|
22
|
-
|
23
|
-
if isDebug is None:
|
24
|
-
isDebug=confBean.IS_DEBUG
|
25
|
-
self.logger=ModuloLogging(cartellaBase=confBean.CARTELLA_BASE_PROGETTO,isDebug=isDebug)
|
26
|
-
currentYear=ModuloDate.dateToString(None,"%Y")
|
27
|
-
ModuloSystem.setTitoloFinestra(projectTitle)
|
28
|
-
self.logger.info("""
|
29
|
-
############################################################
|
30
|
-
%s - Since %d - Copyright %s
|
31
|
-
############################################################""",self.projectHeader,projectStartYear,currentYear)
|
32
|
-
self.isRequestedStop=False
|
33
|
-
self.isRequestedExit=False
|
34
|
-
|
1
|
+
from abc import ABC
|
2
|
+
from typing import NewType
|
3
|
+
|
4
|
+
from modulitiz_micro.ModuloDate import ModuloDate
|
5
|
+
from modulitiz_micro.files.ModuloLogging import ModuloLogging
|
6
|
+
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
7
|
+
from modulitiz_micro.util.beans.conf.AbstractConfBean import AbstractConfBean
|
8
|
+
|
9
|
+
|
10
|
+
class AbstractGlobalVarBean(ABC):
|
11
|
+
"""
|
12
|
+
Classe da usare come base per definire la struttura di una classe che raggrupperà gli oggetti che verranno usati nel programma
|
13
|
+
"""
|
14
|
+
|
15
|
+
def __init__(self,confBean:NewType("T",AbstractConfBean),projectTitle:str,projectVersion:str,projectStartYear:int,isDebug:bool|None):
|
16
|
+
self.confBean=confBean
|
17
|
+
self.projectTitle=projectTitle
|
18
|
+
self.projectVersion=projectVersion
|
19
|
+
self.projectStartYear=projectStartYear
|
20
|
+
|
21
|
+
self.projectHeader="%s V%s"%(projectTitle,projectVersion)
|
22
|
+
|
23
|
+
if isDebug is None:
|
24
|
+
isDebug=confBean.IS_DEBUG
|
25
|
+
self.logger=ModuloLogging(cartellaBase=confBean.CARTELLA_BASE_PROGETTO,isDebug=isDebug)
|
26
|
+
currentYear=ModuloDate.dateToString(None,"%Y")
|
27
|
+
ModuloSystem.setTitoloFinestra(projectTitle)
|
28
|
+
self.logger.info("""
|
29
|
+
############################################################
|
30
|
+
%s - Since %d - Copyright %s
|
31
|
+
############################################################""",self.projectHeader,projectStartYear,currentYear)
|
32
|
+
self.isRequestedStop=False
|
33
|
+
self.isRequestedExit=False
|
34
|
+
|
@@ -1,23 +1,23 @@
|
|
1
|
-
import asyncio
|
2
|
-
from functools import wraps
|
3
|
-
|
4
|
-
|
5
|
-
def noAwait(funzione):
|
6
|
-
"""
|
7
|
-
Usare questo decorator per evitare di propagare async e await in tutto il codice.
|
8
|
-
Esempio dell'uso:
|
9
|
-
|
10
|
-
@noAwait
|
11
|
-
async def funzione(self):
|
12
|
-
await funzioneAsync()
|
13
|
-
"""
|
14
|
-
|
15
|
-
@wraps(funzione)
|
16
|
-
def wrapped(*args, **kwargs):
|
17
|
-
try:
|
18
|
-
loop=asyncio.get_event_loop_policy().get_event_loop()
|
19
|
-
except RuntimeError:
|
20
|
-
loop=asyncio.new_event_loop()
|
21
|
-
asyncio.set_event_loop(loop)
|
22
|
-
loop.run_until_complete(funzione(*args,**kwargs))
|
23
|
-
return wrapped
|
1
|
+
import asyncio
|
2
|
+
from functools import wraps
|
3
|
+
|
4
|
+
|
5
|
+
def noAwait(funzione):
|
6
|
+
"""
|
7
|
+
Usare questo decorator per evitare di propagare async e await in tutto il codice.
|
8
|
+
Esempio dell'uso:
|
9
|
+
|
10
|
+
@noAwait
|
11
|
+
async def funzione(self):
|
12
|
+
await funzioneAsync()
|
13
|
+
"""
|
14
|
+
|
15
|
+
@wraps(funzione)
|
16
|
+
def wrapped(*args, **kwargs):
|
17
|
+
try:
|
18
|
+
loop=asyncio.get_event_loop_policy().get_event_loop()
|
19
|
+
except RuntimeError:
|
20
|
+
loop=asyncio.new_event_loop()
|
21
|
+
asyncio.set_event_loop(loop)
|
22
|
+
loop.run_until_complete(funzione(*args,**kwargs))
|
23
|
+
return wrapped
|
@@ -1,41 +1,41 @@
|
|
1
|
-
import re
|
2
|
-
from abc import ABC
|
3
|
-
|
4
|
-
from modulitiz_micro.ModuloListe import ModuloListe
|
5
|
-
from modulitiz_micro.ModuloStringhe import ModuloStringhe
|
6
|
-
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
7
|
-
|
8
|
-
|
9
|
-
class AbstractModuloPip(ABC):
|
10
|
-
REGEX_VERSION=r"\d+\.\d+\.\d+"
|
11
|
-
_PREFIX_OK="Successfully installed "
|
12
|
-
|
13
|
-
@classmethod
|
14
|
-
def _versionFromFileRequirements(cls,rigaIn:str,args:str) -> list:
|
15
|
-
cmd='pip index versions --pre %s %s'%(rigaIn,args)
|
16
|
-
output=ModuloSystem.systemCallReturnOutput(cmd,None)
|
17
|
-
righe=ModuloListe.eliminaElementiVuoti(ModuloStringhe.normalizzaEol(output).split("\n"))
|
18
|
-
righe=cls._parseResults(righe)
|
19
|
-
result=[]
|
20
|
-
if len(righe)<3:
|
21
|
-
return result
|
22
|
-
|
23
|
-
result.append(cls._search(righe[-2],r"INSTALLED:\s+(%s)"))
|
24
|
-
result.append(cls._search(righe[-1],r"LATEST:\s+(%s)"))
|
25
|
-
return result
|
26
|
-
|
27
|
-
@staticmethod
|
28
|
-
def _parseResults(righe:list)->list:
|
29
|
-
output=[]
|
30
|
-
for riga in righe:
|
31
|
-
riga=riga.strip()
|
32
|
-
if not ModuloStringhe.isEmpty(riga) and not riga.startswith("["):
|
33
|
-
output.append(riga)
|
34
|
-
return output
|
35
|
-
|
36
|
-
@classmethod
|
37
|
-
def _search(cls,riga:str,regex:str)->str|None:
|
38
|
-
ricerca=re.search(regex%(cls.REGEX_VERSION,),riga)
|
39
|
-
if ricerca is None:
|
40
|
-
return None
|
41
|
-
return ricerca.group(1).strip()
|
1
|
+
import re
|
2
|
+
from abc import ABC
|
3
|
+
|
4
|
+
from modulitiz_micro.ModuloListe import ModuloListe
|
5
|
+
from modulitiz_micro.ModuloStringhe import ModuloStringhe
|
6
|
+
from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
|
7
|
+
|
8
|
+
|
9
|
+
class AbstractModuloPip(ABC):
|
10
|
+
REGEX_VERSION=r"\d+\.\d+\.\d+"
|
11
|
+
_PREFIX_OK="Successfully installed "
|
12
|
+
|
13
|
+
@classmethod
|
14
|
+
def _versionFromFileRequirements(cls,rigaIn:str,args:str) -> list:
|
15
|
+
cmd='pip index versions --pre %s %s'%(rigaIn,args)
|
16
|
+
output=ModuloSystem.systemCallReturnOutput(cmd,None)
|
17
|
+
righe=ModuloListe.eliminaElementiVuoti(ModuloStringhe.normalizzaEol(output).split("\n"))
|
18
|
+
righe=cls._parseResults(righe)
|
19
|
+
result=[]
|
20
|
+
if len(righe)<3:
|
21
|
+
return result
|
22
|
+
|
23
|
+
result.append(cls._search(righe[-2],r"INSTALLED:\s+(%s)"))
|
24
|
+
result.append(cls._search(righe[-1],r"LATEST:\s+(%s)"))
|
25
|
+
return result
|
26
|
+
|
27
|
+
@staticmethod
|
28
|
+
def _parseResults(righe:list)->list:
|
29
|
+
output=[]
|
30
|
+
for riga in righe:
|
31
|
+
riga=riga.strip()
|
32
|
+
if not ModuloStringhe.isEmpty(riga) and not riga.startswith("["):
|
33
|
+
output.append(riga)
|
34
|
+
return output
|
35
|
+
|
36
|
+
@classmethod
|
37
|
+
def _search(cls,riga:str,regex:str)->str|None:
|
38
|
+
ricerca=re.search(regex%(cls.REGEX_VERSION,),riga)
|
39
|
+
if ricerca is None:
|
40
|
+
return None
|
41
|
+
return ricerca.group(1).strip()
|