modulitiz-micro 2.43.0__py311-none-any.whl → 2.44.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/ModuloMeteo.py +72 -72
- modulitiz_micro/ModuloSeriale.py +70 -70
- modulitiz_micro/ModuloTarghe.py +47 -47
- 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/EccezioneCtrlC.py +7 -7
- modulitiz_micro/eccezioni/EccezioneScheduler.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/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/iot/ModuleIotDevice.py +62 -62
- modulitiz_micro/keylogger/EccezioneKeyLogger.py +7 -7
- modulitiz_micro/keylogger/ModuloKeylogger.py +73 -73
- modulitiz_micro/rete/ModuloNetworking.py +72 -72
- 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 +119 -119
- 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/http/huawei/fusionsolar/ModuleHuaweiFusionSolar.py +84 -0
- modulitiz_micro/rete/http/huawei/fusionsolar/beans/TokenBean.py +28 -0
- modulitiz_micro/rete/http/huawei/fusionsolar/beans/device/DeviceBean.py +6 -0
- modulitiz_micro/rete/http/huawei/fusionsolar/beans/device/DeviceDataBattery.py +22 -0
- modulitiz_micro/rete/http/huawei/fusionsolar/beans/device/DeviceDataPowerSensor.py +49 -0
- modulitiz_micro/rete/http/huawei/fusionsolar/beans/device/DeviceDataResidentialInverter.py +46 -0
- modulitiz_micro/rete/http/huawei/fusionsolar/enums/DevTypeIdEnum.py +21 -0
- modulitiz_micro/rete/http/huawei/fusionsolar/exceptions/ExceptionTooManyLogins.py +7 -0
- modulitiz_micro/rete/http/huawei/fusionsolar/service/AbstractHuaweiFusionSolar.py +71 -0
- 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/ModuloEnvVars.py +34 -34
- 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/globalvar/AbstractBasicGlobalVarBean.py +15 -15
- modulitiz_micro/util/scheduler/ModuleScheduler.py +26 -26
- {modulitiz_micro-2.43.0.dist-info → modulitiz_micro-2.44.0.dist-info}/METADATA +59 -59
- modulitiz_micro-2.44.0.dist-info/RECORD +65 -0
- {modulitiz_micro-2.43.0.dist-info → modulitiz_micro-2.44.0.dist-info}/licenses/LICENSE +21 -21
- modulitiz_micro-2.43.0.dist-info/RECORD +0 -56
- {modulitiz_micro-2.43.0.dist-info → modulitiz_micro-2.44.0.dist-info}/WHEEL +0 -0
- {modulitiz_micro-2.43.0.dist-info → modulitiz_micro-2.44.0.dist-info}/top_level.txt +0 -0
@@ -1,34 +1,34 @@
|
|
1
|
-
import os
|
2
|
-
|
3
|
-
from modulitiz_nano.sistema.ModuloSystem import ModuloSystem
|
4
|
-
|
5
|
-
|
6
|
-
class ModuloEnvVars(object):
|
7
|
-
|
8
|
-
@classmethod
|
9
|
-
def add(cls,nomeVar:str,valore:str,addFirst:bool):
|
10
|
-
if not ModuloSystem.isWindows():
|
11
|
-
separatore=":"
|
12
|
-
else:
|
13
|
-
separatore=";"
|
14
|
-
nomeVar=nomeVar.upper()
|
15
|
-
if not cls.exist(nomeVar):
|
16
|
-
cls.setOrReplace(nomeVar,valore)
|
17
|
-
return
|
18
|
-
if addFirst:
|
19
|
-
cls.setOrReplace(nomeVar,valore+separatore+os.environ[nomeVar])
|
20
|
-
else:
|
21
|
-
if not os.environ[nomeVar].endswith(separatore):
|
22
|
-
os.environ[nomeVar]+=separatore
|
23
|
-
os.environ[nomeVar]+=valore
|
24
|
-
@staticmethod
|
25
|
-
def setOrReplace(nomeVar:str,valore:str):
|
26
|
-
os.environ[nomeVar]=valore
|
27
|
-
|
28
|
-
@staticmethod
|
29
|
-
def getOrNone(nomeVar:str)->str|None:
|
30
|
-
return os.environ.get(nomeVar,None)
|
31
|
-
|
32
|
-
@staticmethod
|
33
|
-
def exist(nomeVar:str)->bool:
|
34
|
-
return nomeVar in os.environ
|
1
|
+
import os
|
2
|
+
|
3
|
+
from modulitiz_nano.sistema.ModuloSystem import ModuloSystem
|
4
|
+
|
5
|
+
|
6
|
+
class ModuloEnvVars(object):
|
7
|
+
|
8
|
+
@classmethod
|
9
|
+
def add(cls,nomeVar:str,valore:str,addFirst:bool):
|
10
|
+
if not ModuloSystem.isWindows():
|
11
|
+
separatore=":"
|
12
|
+
else:
|
13
|
+
separatore=";"
|
14
|
+
nomeVar=nomeVar.upper()
|
15
|
+
if not cls.exist(nomeVar):
|
16
|
+
cls.setOrReplace(nomeVar,valore)
|
17
|
+
return
|
18
|
+
if addFirst:
|
19
|
+
cls.setOrReplace(nomeVar,valore+separatore+os.environ[nomeVar])
|
20
|
+
else:
|
21
|
+
if not os.environ[nomeVar].endswith(separatore):
|
22
|
+
os.environ[nomeVar]+=separatore
|
23
|
+
os.environ[nomeVar]+=valore
|
24
|
+
@staticmethod
|
25
|
+
def setOrReplace(nomeVar:str,valore:str):
|
26
|
+
os.environ[nomeVar]=valore
|
27
|
+
|
28
|
+
@staticmethod
|
29
|
+
def getOrNone(nomeVar:str)->str|None:
|
30
|
+
return os.environ.get(nomeVar,None)
|
31
|
+
|
32
|
+
@staticmethod
|
33
|
+
def exist(nomeVar:str)->bool:
|
34
|
+
return nomeVar in os.environ
|
@@ -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_nano.files.ModuloLogging import ModuloLogging
|
10
|
-
from modulitiz_nano.multithread.ModuloThread import ModuloThread
|
11
|
-
from modulitiz_nano.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_nano.files.ModuloLogging import ModuloLogging
|
10
|
+
from modulitiz_nano.multithread.ModuloThread import ModuloThread
|
11
|
+
from modulitiz_nano.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,53 +1,53 @@
|
|
1
|
-
from abc import ABC
|
2
|
-
from abc import abstractmethod
|
3
|
-
|
4
|
-
from telethon import TelegramClient
|
5
|
-
|
6
|
-
from modulitiz_nano.ModuloStringhe import ModuloStringhe
|
7
|
-
from modulitiz_nano.util.decorators.noAwait import noAwait
|
8
|
-
|
9
|
-
|
10
|
-
class AbstractModuloTelegram(ABC):
|
11
|
-
def __init__(self,apiId:int,apiHash:str,nomefileSessione:str,phoneNumWithCountryCode:str):
|
12
|
-
self.apiId=apiId
|
13
|
-
self.apiHash=apiHash
|
14
|
-
self.nomefileSessione=nomefileSessione
|
15
|
-
self.phoneNumWithCountryCode=phoneNumWithCountryCode
|
16
|
-
|
17
|
-
self.client:TelegramClient|None = None
|
18
|
-
|
19
|
-
@noAwait
|
20
|
-
async def connect(self):
|
21
|
-
self.client = TelegramClient(self.nomefileSessione, self.apiId, self.apiHash)
|
22
|
-
await self.client.connect()
|
23
|
-
# se il client non e' autorizzato richiedo la verifica
|
24
|
-
if await self.client.is_user_authorized():
|
25
|
-
return
|
26
|
-
await self.client.send_code_request(self.phoneNumWithCountryCode)
|
27
|
-
await self.client.sign_in(self.phoneNumWithCountryCode, self.getVerificationCodefromUser())
|
28
|
-
|
29
|
-
def sendMessageWithConnectAndClose(self,username: str|None,msg: str):
|
30
|
-
"""
|
31
|
-
Apre la connessione, invia il messaggio e chiude la connessione.
|
32
|
-
:param username: il nome utente del destinatario a cui mandare il messaggio
|
33
|
-
:param msg: il testo del messaggio da inviare
|
34
|
-
"""
|
35
|
-
if ModuloStringhe.isEmpty(username):
|
36
|
-
return
|
37
|
-
self.connect()
|
38
|
-
self.sendMessage(username,msg)
|
39
|
-
self.close()
|
40
|
-
|
41
|
-
@noAwait
|
42
|
-
async def sendMessage(self,username:str,msg:str):
|
43
|
-
await self.client.send_message(username, msg, parse_mode='html')
|
44
|
-
|
45
|
-
def close(self):
|
46
|
-
self.client.disconnect()
|
47
|
-
|
48
|
-
@staticmethod
|
49
|
-
@abstractmethod
|
50
|
-
def getVerificationCodefromUser()->str:
|
51
|
-
"""
|
52
|
-
Deve ritornare una stringa che corrisponde al codice di verifica inserito dall'utente.
|
53
|
-
"""
|
1
|
+
from abc import ABC
|
2
|
+
from abc import abstractmethod
|
3
|
+
|
4
|
+
from telethon import TelegramClient
|
5
|
+
|
6
|
+
from modulitiz_nano.ModuloStringhe import ModuloStringhe
|
7
|
+
from modulitiz_nano.util.decorators.noAwait import noAwait
|
8
|
+
|
9
|
+
|
10
|
+
class AbstractModuloTelegram(ABC):
|
11
|
+
def __init__(self,apiId:int,apiHash:str,nomefileSessione:str,phoneNumWithCountryCode:str):
|
12
|
+
self.apiId=apiId
|
13
|
+
self.apiHash=apiHash
|
14
|
+
self.nomefileSessione=nomefileSessione
|
15
|
+
self.phoneNumWithCountryCode=phoneNumWithCountryCode
|
16
|
+
|
17
|
+
self.client:TelegramClient|None = None
|
18
|
+
|
19
|
+
@noAwait
|
20
|
+
async def connect(self):
|
21
|
+
self.client = TelegramClient(self.nomefileSessione, self.apiId, self.apiHash)
|
22
|
+
await self.client.connect()
|
23
|
+
# se il client non e' autorizzato richiedo la verifica
|
24
|
+
if await self.client.is_user_authorized():
|
25
|
+
return
|
26
|
+
await self.client.send_code_request(self.phoneNumWithCountryCode)
|
27
|
+
await self.client.sign_in(self.phoneNumWithCountryCode, self.getVerificationCodefromUser())
|
28
|
+
|
29
|
+
def sendMessageWithConnectAndClose(self,username: str|None,msg: str):
|
30
|
+
"""
|
31
|
+
Apre la connessione, invia il messaggio e chiude la connessione.
|
32
|
+
:param username: il nome utente del destinatario a cui mandare il messaggio
|
33
|
+
:param msg: il testo del messaggio da inviare
|
34
|
+
"""
|
35
|
+
if ModuloStringhe.isEmpty(username):
|
36
|
+
return
|
37
|
+
self.connect()
|
38
|
+
self.sendMessage(username,msg)
|
39
|
+
self.close()
|
40
|
+
|
41
|
+
@noAwait
|
42
|
+
async def sendMessage(self,username:str,msg:str):
|
43
|
+
await self.client.send_message(username, msg, parse_mode='html')
|
44
|
+
|
45
|
+
def close(self):
|
46
|
+
self.client.disconnect()
|
47
|
+
|
48
|
+
@staticmethod
|
49
|
+
@abstractmethod
|
50
|
+
def getVerificationCodefromUser()->str:
|
51
|
+
"""
|
52
|
+
Deve ritornare una stringa che corrisponde al codice di verifica inserito dall'utente.
|
53
|
+
"""
|
@@ -1,26 +1,26 @@
|
|
1
|
-
from modulitiz_micro.social.telegram.AbstractModuloTelegram import AbstractModuloTelegram
|
2
|
-
|
3
|
-
|
4
|
-
class ModuloTelegramSimple(AbstractModuloTelegram):
|
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.AbstractModuloTelegram import AbstractModuloTelegram
|
2
|
+
|
3
|
+
|
4
|
+
class ModuloTelegramSimple(AbstractModuloTelegram):
|
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,15 +1,15 @@
|
|
1
|
-
from modulitiz_micro.rete.ntp.ModuloNtpIt import ModuloNtpIt
|
2
|
-
|
3
|
-
from modulitiz_nano.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_nano.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,26 +1,26 @@
|
|
1
|
-
import schedule
|
2
|
-
|
3
|
-
from modulitiz_nano.ModuloListe import ModuloListe
|
4
|
-
|
5
|
-
|
6
|
-
class ModuleScheduler(object):
|
7
|
-
@staticmethod
|
8
|
-
def cancelJobByTag(tag:str):
|
9
|
-
schedule.clear(tag)
|
10
|
-
|
11
|
-
@classmethod
|
12
|
-
def rescheduleJob(cls,tag:str,timeStr:str)->schedule.Job|None:
|
13
|
-
# recupero il job
|
14
|
-
jobs=schedule.get_jobs(tag)
|
15
|
-
if ModuloListe.isEmpty(jobs):
|
16
|
-
return None
|
17
|
-
job=jobs[0]
|
18
|
-
# cambio l'orario
|
19
|
-
job.at(timeStr)
|
20
|
-
# cancello quello vecchio
|
21
|
-
cls.cancelJobByTag(tag)
|
22
|
-
# lo aggiungo alla lista
|
23
|
-
job.scheduler.jobs.append(job)
|
24
|
-
# lo rischedulo
|
25
|
-
job._schedule_next_run()
|
26
|
-
return job
|
1
|
+
import schedule
|
2
|
+
|
3
|
+
from modulitiz_nano.ModuloListe import ModuloListe
|
4
|
+
|
5
|
+
|
6
|
+
class ModuleScheduler(object):
|
7
|
+
@staticmethod
|
8
|
+
def cancelJobByTag(tag:str):
|
9
|
+
schedule.clear(tag)
|
10
|
+
|
11
|
+
@classmethod
|
12
|
+
def rescheduleJob(cls,tag:str,timeStr:str)->schedule.Job|None:
|
13
|
+
# recupero il job
|
14
|
+
jobs=schedule.get_jobs(tag)
|
15
|
+
if ModuloListe.isEmpty(jobs):
|
16
|
+
return None
|
17
|
+
job=jobs[0]
|
18
|
+
# cambio l'orario
|
19
|
+
job.at(timeStr)
|
20
|
+
# cancello quello vecchio
|
21
|
+
cls.cancelJobByTag(tag)
|
22
|
+
# lo aggiungo alla lista
|
23
|
+
job.scheduler.jobs.append(job)
|
24
|
+
# lo rischedulo
|
25
|
+
job._schedule_next_run()
|
26
|
+
return job
|
@@ -1,59 +1,59 @@
|
|
1
|
-
Metadata-Version: 2.4
|
2
|
-
Name: modulitiz_micro
|
3
|
-
Version: 2.
|
4
|
-
Summary: Raccolta dei miei moduli - versione micro
|
5
|
-
Author-email: tiz <sderfo1234@altervista.org>
|
6
|
-
Classifier: Programming Language :: Python :: 3
|
7
|
-
Classifier: Operating System :: OS Independent
|
8
|
-
Requires-Python: >=3.11
|
9
|
-
Description-Content-Type: text/markdown
|
10
|
-
License-File: LICENSE
|
11
|
-
Requires-Dist: modulitiz-micro>=2
|
12
|
-
Requires-Dist: beautifulsoup4>=4.12
|
13
|
-
Requires-Dist: brotli>=1.1
|
14
|
-
Requires-Dist: cachetools==5.5.0
|
15
|
-
Requires-Dist: cryptography==45.0.6
|
16
|
-
Requires-Dist: GitPython==3.1.44
|
17
|
-
Requires-Dist: mysql_connector_python==9.0.0
|
18
|
-
Requires-Dist: mutagen>=1.47
|
19
|
-
Requires-Dist: pynput>=1.7
|
20
|
-
Requires-Dist: pyOpenSSL==25.1.0
|
21
|
-
Requires-Dist: pypyodbc>=1.3
|
22
|
-
Requires-Dist: pyserial>=3.5
|
23
|
-
Requires-Dist: requests>=2.31
|
24
|
-
Requires-Dist: schedule>=1.2
|
25
|
-
Requires-Dist: telethon>=1.33
|
26
|
-
Dynamic: license-file
|
27
|
-
|
28
|
-
# modulitiz-micro
|
29
|
-
|
30
|
-
It's a Python library that contains daily use or generic functions.
|
31
|
-
Extends another wheel: nano
|
32
|
-
|
33
|
-
## Installation
|
34
|
-
|
35
|
-
Use the package manager [pip](https://pip.pypa.io/en/stable/) to install:
|
36
|
-
|
37
|
-
```bash
|
38
|
-
pip install -U modulitiz_micro
|
39
|
-
```
|
40
|
-
The other required dependencies will be installed automatically.
|
41
|
-
|
42
|
-
## Usage
|
43
|
-
|
44
|
-
```python
|
45
|
-
from modulitiz_micro.sistema.ModuloEnvVars import ModuloEnvVars
|
46
|
-
|
47
|
-
# returns the specified system variable
|
48
|
-
ModuloEnvVars.getOrNone("system variable")
|
49
|
-
|
50
|
-
...
|
51
|
-
```
|
52
|
-
|
53
|
-
## Contributing
|
54
|
-
|
55
|
-
If you find any bug you can write me at [sderfo1234@altervista.org](mailto:sderfo1234@altervista.org)
|
56
|
-
|
57
|
-
## License
|
58
|
-
|
59
|
-
[MIT](https://choosealicense.com/licenses/mit/)
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: modulitiz_micro
|
3
|
+
Version: 2.44.0
|
4
|
+
Summary: Raccolta dei miei moduli - versione micro
|
5
|
+
Author-email: tiz <sderfo1234@altervista.org>
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
7
|
+
Classifier: Operating System :: OS Independent
|
8
|
+
Requires-Python: >=3.11
|
9
|
+
Description-Content-Type: text/markdown
|
10
|
+
License-File: LICENSE
|
11
|
+
Requires-Dist: modulitiz-micro>=2
|
12
|
+
Requires-Dist: beautifulsoup4>=4.12
|
13
|
+
Requires-Dist: brotli>=1.1
|
14
|
+
Requires-Dist: cachetools==5.5.0
|
15
|
+
Requires-Dist: cryptography==45.0.6
|
16
|
+
Requires-Dist: GitPython==3.1.44
|
17
|
+
Requires-Dist: mysql_connector_python==9.0.0
|
18
|
+
Requires-Dist: mutagen>=1.47
|
19
|
+
Requires-Dist: pynput>=1.7
|
20
|
+
Requires-Dist: pyOpenSSL==25.1.0
|
21
|
+
Requires-Dist: pypyodbc>=1.3
|
22
|
+
Requires-Dist: pyserial>=3.5
|
23
|
+
Requires-Dist: requests>=2.31
|
24
|
+
Requires-Dist: schedule>=1.2
|
25
|
+
Requires-Dist: telethon>=1.33
|
26
|
+
Dynamic: license-file
|
27
|
+
|
28
|
+
# modulitiz-micro
|
29
|
+
|
30
|
+
It's a Python library that contains daily use or generic functions.
|
31
|
+
Extends another wheel: nano
|
32
|
+
|
33
|
+
## Installation
|
34
|
+
|
35
|
+
Use the package manager [pip](https://pip.pypa.io/en/stable/) to install:
|
36
|
+
|
37
|
+
```bash
|
38
|
+
pip install -U modulitiz_micro
|
39
|
+
```
|
40
|
+
The other required dependencies will be installed automatically.
|
41
|
+
|
42
|
+
## Usage
|
43
|
+
|
44
|
+
```python
|
45
|
+
from modulitiz_micro.sistema.ModuloEnvVars import ModuloEnvVars
|
46
|
+
|
47
|
+
# returns the specified system variable
|
48
|
+
ModuloEnvVars.getOrNone("system variable")
|
49
|
+
|
50
|
+
...
|
51
|
+
```
|
52
|
+
|
53
|
+
## Contributing
|
54
|
+
|
55
|
+
If you find any bug you can write me at [sderfo1234@altervista.org](mailto:sderfo1234@altervista.org)
|
56
|
+
|
57
|
+
## License
|
58
|
+
|
59
|
+
[MIT](https://choosealicense.com/licenses/mit/)
|
@@ -0,0 +1,65 @@
|
|
1
|
+
modulitiz_micro/ModuloMeteo.py,sha256=U4H6IhsUGXLn2N_6MY-1Ti8YDDIwrKea-u2Ojx_7WAA,2321
|
2
|
+
modulitiz_micro/ModuloSeriale.py,sha256=k99YGWXOtEt44Q4mDE40IEeqMYGWfLC0LiPmgW63r-g,1878
|
3
|
+
modulitiz_micro/ModuloTarghe.py,sha256=FMKFtWUtQEB1IBnmUMwWhznxWitx_S7dJf0LsQsecaI,1369
|
4
|
+
modulitiz_micro/database/AbstractDatabaseService.py,sha256=RcSQgGZf-RHT0NzOTF1S35yf0nWOb93SzqSs1Rf2NbQ,269
|
5
|
+
modulitiz_micro/database/AbstractSql.py,sha256=R-Fyi8n_pwEtJf2IYFbTZ0Sr1P5_HxfQxDhPdYeu0Vo,1368
|
6
|
+
modulitiz_micro/database/ModuloSqlOracle.py,sha256=82pDbbT5sqe4rMcUzu9Nb2e7bROgs53yg1ufCg8GGkw,484
|
7
|
+
modulitiz_micro/database/ModuloSqlServer.py,sha256=jPIavBeX5VRue0yfqtvwvNiu40q8YgWIcqeo_PsJSQM,1235
|
8
|
+
modulitiz_micro/database/eccezioni/EccezioneDbNoData.py,sha256=d48jj2KbN9HSf4NAV8xSfBBhbKdhDvgU7TBCC5QBqSE,185
|
9
|
+
modulitiz_micro/database/mysql/AbstractBasicMysql.py,sha256=4U64tnQtH9uvnx7z_HGAjW_3Pp4ebqzzCt96cemxRSw,3566
|
10
|
+
modulitiz_micro/database/mysql/ModuloMysql.py,sha256=8k_ZKdxKGmwq1srEFh9wluU1_GijUGV3-BLGBO7VvA0,5528
|
11
|
+
modulitiz_micro/database/mysql/MysqlCommonConverter.py,sha256=jZFQykrgZ3L-hALfnCXnnN54OVfqb8xFtZs48WRt8nc,1336
|
12
|
+
modulitiz_micro/database/mysql/eccezioni/EccezioneMysqlOffline.py,sha256=gKNgFegRSYCNrNBlaq2helOyMhXjpVC_DKCt-i341Gs,164
|
13
|
+
modulitiz_micro/database/sqlite/AbstractBasicSQLite.py,sha256=619eSxtUv4stnYyl2BFeOf7Q5B3lWStUQ0aF6iUzLhs,3466
|
14
|
+
modulitiz_micro/database/sqlite/ModuloSQLite.py,sha256=F6GRya4pGfkMU_4XMc46v8XaDZ6WcFtlvCK94Trm-dY,2383
|
15
|
+
modulitiz_micro/eccezioni/EccezioneCtrlC.py,sha256=j9jKdx6YJ6uXGqdVxmMJUTvy2MxoyyQYR1WZ286bo_Q,184
|
16
|
+
modulitiz_micro/eccezioni/EccezioneScheduler.py,sha256=0o8zXixL79Zjwn9CZ7slsvmnhwgE7HDyMBBtcNM7v6s,188
|
17
|
+
modulitiz_micro/eccezioni/http/EccezioneHttp.py,sha256=mHCkSNyk24JsftM-WjKrE3CFE_9SUfq22NrpOeazmOY,227
|
18
|
+
modulitiz_micro/eccezioni/http/EccezioneHttp404.py,sha256=5i9jxfbbyZuzsa_ghQwNZJpSAY_QP9nX5w2qLhuqhso,166
|
19
|
+
modulitiz_micro/eccezioni/http/EccezioneHttpGeneric.py,sha256=DsO7hNeyeMEJsgzW33z3tK9SU53pQoqFNRiwczU6pL0,171
|
20
|
+
modulitiz_micro/files/cache/DatabaseCache.py,sha256=M0FrKNlNvSCiu4gTn5FNtGOdxXjmLtKGWYomL0WVqZ0,2400
|
21
|
+
modulitiz_micro/files/cache/decorators/cacheRam.py,sha256=eTviAFoEP9onO4zISJWbNyU-oZ_YtuFeUx3NOz6MWwM,769
|
22
|
+
modulitiz_micro/files/git/ModuloGit.py,sha256=OGaQqR6SYQlS2tsPUTmhw0EnQYi3jMohTpGPVQy--hQ,821
|
23
|
+
modulitiz_micro/files/git/decorators/catchAndRaiseGitExceptions.py,sha256=qn876kuuLlG7C1hU36AvnG_CJWu2YCcPbXC6xZEjzt4,462
|
24
|
+
modulitiz_micro/files/git/exceptions/EccezioneGit.py,sha256=NsII2vdBOcbQ7itdcdQ1A_dXU6L0mbsMCKxz7naFvc8,182
|
25
|
+
modulitiz_micro/gestionedom/GestioneDom.py,sha256=79z1Qg8P3rJl1fEHoCzGB6Lka3ka4JK06cFu0cQSRiI,1348
|
26
|
+
modulitiz_micro/iot/ModuleIotDevice.py,sha256=UA5_c97nDqEmu-zC8EXQOp5ylrB3bD76KGCxSEf1GkQ,2708
|
27
|
+
modulitiz_micro/iot/beans/IotDeviceBean.py,sha256=lSxK80JW3PmhlbKMNX8-U1fjwciFp_MaxH8jYtJLGas,374
|
28
|
+
modulitiz_micro/iot/enums/IotOSEnum.py,sha256=jMGWbPo0gafFdog7f9VBX_vJQ86XiXYUcxVg-RM9-s8,191
|
29
|
+
modulitiz_micro/iot/espurna/ModuleEspurna.py,sha256=ueL-hDpaGzmU7mUvpLmu3YerJCJqrfTzATfOVeasD9I,142
|
30
|
+
modulitiz_micro/keylogger/EccezioneKeyLogger.py,sha256=tDupIO151W90nBEo8XA-dyzOQ9zOJwNj7NA5p_buU2U,211
|
31
|
+
modulitiz_micro/keylogger/ModuloKeylogger.py,sha256=QUb7mIkiMPY9FL1Lmbt0l14YV0GD0YmungA8SA7F4kE,1938
|
32
|
+
modulitiz_micro/rete/ModuloNetworking.py,sha256=zBohFA9MrbistmPtadV-shjCjjhoa1SQFkTj5rjAWvY,2115
|
33
|
+
modulitiz_micro/rete/ModuloOpenVpn.py,sha256=4xEJzHyjT3U0a6mpanmPSUVRWdScA47_t_e8YJG9TM0,626
|
34
|
+
modulitiz_micro/rete/email/EmailBean.py,sha256=EOKLfBVqwBEkbWfywiUmk2iB5K2uVlykxsh4zB9red8,168
|
35
|
+
modulitiz_micro/rete/email/ModuloEmail.py,sha256=Laq-DtiAYPXpKW7iwU2z3IqQ5donLXpTVGB8zgmjWh8,2953
|
36
|
+
modulitiz_micro/rete/http/ModuloHttp.py,sha256=FAvfn_AiTuMnxLXixgLOmwH-YM8BJWe2Hc9OpqijDVs,4707
|
37
|
+
modulitiz_micro/rete/http/ModuloHttpConnectionSafe.py,sha256=hhSQgDpXpcGXgWl14DxhiFtgZ3AFZUOQxYUeTaWMRZI,2933
|
38
|
+
modulitiz_micro/rete/http/ModuloHttpUtils.py,sha256=T-Yp_T-oqfwUDFokIYGOeO7a1lSGVsZesjDPhgDBbLM,2348
|
39
|
+
modulitiz_micro/rete/http/beans/HttpResponseBean.py,sha256=7JVywcWURv1I9rYKj4Kt9XLt7387wMZGTMefcsm7E3I,202
|
40
|
+
modulitiz_micro/rete/http/decorators/catchAndRaiseHttpExceptions.py,sha256=MRhCeNMcy3hw-A8W40gozUY0FiL0tyKASauA7hRW0fo,595
|
41
|
+
modulitiz_micro/rete/http/huawei/fusionsolar/ModuleHuaweiFusionSolar.py,sha256=14SSbVHh7W-k6n6HJ50RbdFmrUPo32jp5fW_vgHmmXY,3255
|
42
|
+
modulitiz_micro/rete/http/huawei/fusionsolar/beans/TokenBean.py,sha256=fVtnXYBcaahsOgNnbfZWir4KJVVAZcj5Y0MplMOESnU,700
|
43
|
+
modulitiz_micro/rete/http/huawei/fusionsolar/beans/device/DeviceBean.py,sha256=dEtC46PySPhUQDGDB4L1FtCDS2BG98uCietcIbpXLdM,98
|
44
|
+
modulitiz_micro/rete/http/huawei/fusionsolar/beans/device/DeviceDataBattery.py,sha256=7tugell4ZRhOXqIEuRcL6F-JHHRVBMiJ4fTeo-ckDfM,542
|
45
|
+
modulitiz_micro/rete/http/huawei/fusionsolar/beans/device/DeviceDataPowerSensor.py,sha256=r7NQIBYOd6zLu9_UnpgV3z2YiUdbtHEKaNWJLgl_9VA,1434
|
46
|
+
modulitiz_micro/rete/http/huawei/fusionsolar/beans/device/DeviceDataResidentialInverter.py,sha256=SrlIVKK0jsHDve18EObozxSvuEFo5Qm_GRpaZ7kGHcM,745
|
47
|
+
modulitiz_micro/rete/http/huawei/fusionsolar/enums/DevTypeIdEnum.py,sha256=2-0qO4ZesAxzUHFDz8JTLmpIwaSlKm_OomvneeGTgp4,357
|
48
|
+
modulitiz_micro/rete/http/huawei/fusionsolar/exceptions/ExceptionTooManyLogins.py,sha256=sfDYnaLiBmI-FrAXOwxzqcFDX9Il3ZUaP2IkpPnJolY,192
|
49
|
+
modulitiz_micro/rete/http/huawei/fusionsolar/service/AbstractHuaweiFusionSolar.py,sha256=4n6s8ufFk_akY_0qAviGHeKc3AIuVSVKGS6XL3Eohyo,2863
|
50
|
+
modulitiz_micro/rete/ntp/AbstractModuloNtp.py,sha256=gNSvGFxaIex9vugWS4XHCCWcc_aesGGHBqvsl2U9ZiI,2797
|
51
|
+
modulitiz_micro/rete/ntp/ModuloNtpIt.py,sha256=Un2tXPVcC5KJH3HkgvcpM7kgRQBprWTra_l91KJfcog,232
|
52
|
+
modulitiz_micro/rete/socketserver/AbstractBasicGetSocketServer.py,sha256=-XXyZO9vHiH7VrocG4jn9rYDSNsAmo1h0t5O-4wA37Y,1249
|
53
|
+
modulitiz_micro/rete/socketserver/AbstractSocketServer.py,sha256=CCmay_onORtTeeFuA6oYwxAKDbtYQeAF4XOdonb4qYE,9222
|
54
|
+
modulitiz_micro/rete/ssl/ModuloSsl.py,sha256=52t6DzZlxrc4iBsNaBs7jPvu_ZfiGRDD8ZDMsYFYZFc,1999
|
55
|
+
modulitiz_micro/sistema/ModuloEnvVars.py,sha256=3F02Rnz3Rz8hK4TipCgPOeHcBtwFKqcfFkJTwVl6FeI,853
|
56
|
+
modulitiz_micro/sistema/ModuloSystemPipe.py,sha256=P3lC0JySVA495O8H_w1ZqYJ_QTP4PYlROO-7jigpRoM,1877
|
57
|
+
modulitiz_micro/social/telegram/AbstractModuloTelegram.py,sha256=e1XSZse1GFsNYjdLEORLa7eG6gNuee4yPLkp41DP8go,1736
|
58
|
+
modulitiz_micro/social/telegram/ModuloTelegramSimple.py,sha256=TLWx64pl26cTno3pJHZu0Zt86ZEOYF2Lp5mQt1eekbY,938
|
59
|
+
modulitiz_micro/util/beans/globalvar/AbstractBasicGlobalVarBean.py,sha256=eR6B-zTSbuZcdDsmcz4axhvKgAWLfYnWUCLdbx7OR_E,510
|
60
|
+
modulitiz_micro/util/scheduler/ModuleScheduler.py,sha256=kLxTfr-YPWZB-4XevNxQg71sSLbpakrRPOXLDjJ8JV4,595
|
61
|
+
modulitiz_micro-2.44.0.dist-info/licenses/LICENSE,sha256=b-Ia9Hv3N_FviXoFAXG44lDGbk4tCC0fBdduccm8nl0,1086
|
62
|
+
modulitiz_micro-2.44.0.dist-info/METADATA,sha256=4h8k8PcTNlYCPeIdjPBi7U7kly0LuQJBDYJ6O-J-39k,1577
|
63
|
+
modulitiz_micro-2.44.0.dist-info/WHEEL,sha256=cRWFNt_CJSuf6BnJKAdKunDXUJxjAbWvbt_kstDCs1I,93
|
64
|
+
modulitiz_micro-2.44.0.dist-info/top_level.txt,sha256=ESJE0qtNJp3tbKPrffbFVjH511NSjJHxscfpdLjTpA8,16
|
65
|
+
modulitiz_micro-2.44.0.dist-info/RECORD,,
|