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
- import time
2
-
3
- from modulitiz_micro.ModuloDate import ModuloDate
4
- from modulitiz_micro.ModuloListe import ModuloListe
5
- from modulitiz_micro.ModuloNumeri import ModuloNumeri
6
- from modulitiz_micro.ModuloStringhe import ModuloStringhe
7
- from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
8
-
9
-
10
- class ModuloAndroidSim(object):
11
- """
12
- CREATE TABLE sms (
13
- _id INTEGER PRIMARY KEY
14
- thread_id INTEGER
15
- address TEXT
16
- person INTEGER
17
- date INTEGER
18
- date_sent INTEGER DEFAULT 0
19
- protocol INTEGER
20
- read INTEGER DEFAULT 0
21
- status INTEGER DEFAULT -1
22
- type INTEGER
23
- reply_path_present INTEGER
24
- subject TEXT
25
- body TEXT
26
- service_center TEXT
27
- locked INTEGER DEFAULT 0
28
- sub_id INTEGER DEFAULT INVALID_SUBSCRIPTION_ID
29
- error_code INTEGER DEFAULT NO_ERROR_CODE
30
- creator TEXT
31
- seen INTEGER DEFAULT 0
32
- );
33
- """
34
-
35
- def __init__(self,deviceId:str):
36
- self.deviceId=deviceId
37
-
38
- self.__SEP_WITH_DELIM=(r''' "'"\"%s"\"'" '''%(ModuloStringhe.SEP.replace(r"|",r"\|"),)).strip()
39
-
40
- def hasDeviceCellSignal(self)->bool:
41
- cmd=r'adb -s "%s" shell "dumpsys telephony.registry | grep mServiceState"'%(self.deviceId,)
42
- output=ModuloStringhe.normalizzaEol(ModuloSystem.systemCallReturnOutput(cmd,None)).strip()
43
- ind=output.find("=")
44
- if ind==-1:
45
- return False
46
- serviceState=output[ind+1]
47
- if not ModuloNumeri.isInt(serviceState):
48
- return False
49
- return int(serviceState)==0
50
-
51
- # operazioni di lettura
52
- def smsRead(self,onlyUnread:bool)->list:
53
- """
54
- Tutti i comandi che fanno operazioni di SELECT, UPDATE o DELETE richiedono il ROOT
55
- """
56
- sql=self.__smsQuery(onlyUnread,False)
57
- output=self.__querySmsDb(sql)
58
- return ModuloListe.eliminaElementiVuoti(output.split("|"+ModuloStringhe.SEP+"\n"))
59
-
60
- def smsReadUntilNew(self,checkEverySecs:int|float,timeoutMin:int|float) -> list:
61
- """
62
- Aspetta l'arrivo di un nuovo messaggio.
63
- Questo metodo NON è asincrono.
64
- """
65
- timeoutSecs=timeoutMin*60
66
- tsStart=ModuloDate.getSecs()
67
- results=[]
68
- while ModuloListe.isEmpty(results) and (ModuloDate.getSecs()-tsStart)<timeoutSecs:
69
- time.sleep(checkEverySecs)
70
- results=self.smsRead(True)
71
- return results
72
-
73
- def smsReadCount(self,onlyUnread: bool) -> int:
74
- """
75
- Tutti i comandi che fanno operazioni di SELECT, UPDATE o DELETE richiedono il ROOT
76
- """
77
- sql=self.__smsQuery(onlyUnread,True)
78
- output=self.__querySmsDb(sql)
79
- return int(output)
80
-
81
- def __smsQuery(self,onlyUnread:bool,isCount:bool)->str:
82
- sqlSelect="COUNT(*)" if isCount else "*,%s AS sep"%(self.__SEP_WITH_DELIM,)
83
- sql="SELECT %s FROM sms WHERE 1=1 %s;"%(sqlSelect,("AND read=0" if onlyUnread else ""),)
84
- return sql
85
-
86
- # operazioni di modifica / cancellazione
87
- def smsDelete(self,idSms:int)->str:
88
- """
89
- Tutti i comandi che fanno operazioni di SELECT, UPDATE o DELETE richiedono il ROOT
90
- """
91
- sql="DELETE FROM sms WHERE _id=%d;"%(idSms,)
92
- return self.__querySmsDb(sql)
93
- def smsUpdateAsRed(self,idSms:int)->str:
94
- """
95
- Tutti i comandi che fanno operazioni di SELECT, UPDATE o DELETE richiedono il ROOT
96
- """
97
- sql="UPDATE sms SET read=1 WHERE _id=%d AND read=0;"%(idSms,)
98
- return self.__querySmsDb(sql)
99
- def smsUpdateManyAsRed(self,idsSms:list[int])->str|None:
100
- """
101
- Tutti i comandi che fanno operazioni di SELECT, UPDATE o DELETE richiedono il ROOT
102
- """
103
- if not idsSms:
104
- return None
105
- idsSmsStr=",".join(str(x) for x in idsSms)
106
- sql="UPDATE sms SET read=1 WHERE _id IN(%s) AND read=0;"%(idsSmsStr,)
107
- return self.__querySmsDb(sql)
108
-
109
- def __querySmsDb(self,sqlQuery:str)->str:
110
- """
111
- Richiede il ROOT sul device
112
- """
113
- cmd=r'''adb -s "%s" shell "su -c 'sqlite3 "/data/data/com.android.providers.telephony/databases/mmssms.db" \"%s\"'" '''%(self.deviceId,sqlQuery)
114
- output=ModuloSystem.systemCallReturnOutput(cmd,None).strip()
115
- output=ModuloStringhe.normalizzaEol(output)
116
- return output
117
-
118
- def smsSend(self,unlockPin:int,numeroDest:str,msg:str)->str:
119
- msg=msg.replace(" ",r"\ ")
120
- # premo invio prima di inserire il pin, in questo modo forzo il focus sull'input text
121
- cmd=r"""adb -s "%s" shell "input keyevent KEYCODE_POWER && sleep 1 && input keyevent KEYCODE_ENTER && sleep 0.5"
122
- adb -s "%s" shell "input text \"%d\" && sleep 0.5 && input keyevent KEYCODE_ENTER"
123
- adb -s "%s" shell am start -a android.intent.action.SENDTO -d sms:"%s" --es sms_body "%s" --ez exit_on_sent true
124
- adb -s "%s" shell "sleep 2 && input keyevent 61 && sleep 0.5 && input keyevent KEYCODE_ENTER && sleep 0.5 && am force-stop com.android.mms && input keyevent KEYCODE_POWER && echo \"FINE\""
125
- """%(self.deviceId,
126
- self.deviceId,unlockPin,
127
- self.deviceId,numeroDest,msg,
128
- self.deviceId)
129
- output=ModuloStringhe.normalizzaEol(ModuloSystem.systemCallReturnOutput(cmd,None)).strip()
130
- return output
1
+ import time
2
+
3
+ from modulitiz_micro.ModuloDate import ModuloDate
4
+ from modulitiz_micro.ModuloListe import ModuloListe
5
+ from modulitiz_micro.ModuloNumeri import ModuloNumeri
6
+ from modulitiz_micro.ModuloStringhe import ModuloStringhe
7
+ from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
8
+
9
+
10
+ class ModuloAndroidSim(object):
11
+ """
12
+ CREATE TABLE sms (
13
+ _id INTEGER PRIMARY KEY
14
+ thread_id INTEGER
15
+ address TEXT
16
+ person INTEGER
17
+ date INTEGER
18
+ date_sent INTEGER DEFAULT 0
19
+ protocol INTEGER
20
+ read INTEGER DEFAULT 0
21
+ status INTEGER DEFAULT -1
22
+ type INTEGER
23
+ reply_path_present INTEGER
24
+ subject TEXT
25
+ body TEXT
26
+ service_center TEXT
27
+ locked INTEGER DEFAULT 0
28
+ sub_id INTEGER DEFAULT INVALID_SUBSCRIPTION_ID
29
+ error_code INTEGER DEFAULT NO_ERROR_CODE
30
+ creator TEXT
31
+ seen INTEGER DEFAULT 0
32
+ );
33
+ """
34
+
35
+ def __init__(self,deviceId:str):
36
+ self.deviceId=deviceId
37
+
38
+ self.__SEP_WITH_DELIM=(r''' "'"\"%s"\"'" '''%(ModuloStringhe.SEP.replace(r"|",r"\|"),)).strip()
39
+
40
+ def hasDeviceCellSignal(self)->bool:
41
+ cmd=r'adb -s "%s" shell "dumpsys telephony.registry | grep mServiceState"'%(self.deviceId,)
42
+ output=ModuloStringhe.normalizzaEol(ModuloSystem.systemCallReturnOutput(cmd,None)).strip()
43
+ ind=output.find("=")
44
+ if ind==-1:
45
+ return False
46
+ serviceState=output[ind+1]
47
+ if not ModuloNumeri.isInt(serviceState):
48
+ return False
49
+ return int(serviceState)==0
50
+
51
+ # operazioni di lettura
52
+ def smsRead(self,onlyUnread:bool)->list:
53
+ """
54
+ Tutti i comandi che fanno operazioni di SELECT, UPDATE o DELETE richiedono il ROOT
55
+ """
56
+ sql=self.__smsQuery(onlyUnread,False)
57
+ output=self.__querySmsDb(sql)
58
+ return ModuloListe.eliminaElementiVuoti(output.split("|"+ModuloStringhe.SEP+"\n"))
59
+
60
+ def smsReadUntilNew(self,checkEverySecs:int|float,timeoutMin:int|float) -> list:
61
+ """
62
+ Aspetta l'arrivo di un nuovo messaggio.
63
+ Questo metodo NON è asincrono.
64
+ """
65
+ timeoutSecs=timeoutMin*60
66
+ tsStart=ModuloDate.getSecs()
67
+ results=[]
68
+ while ModuloListe.isEmpty(results) and (ModuloDate.getSecs()-tsStart)<timeoutSecs:
69
+ time.sleep(checkEverySecs)
70
+ results=self.smsRead(True)
71
+ return results
72
+
73
+ def smsReadCount(self,onlyUnread: bool) -> int:
74
+ """
75
+ Tutti i comandi che fanno operazioni di SELECT, UPDATE o DELETE richiedono il ROOT
76
+ """
77
+ sql=self.__smsQuery(onlyUnread,True)
78
+ output=self.__querySmsDb(sql)
79
+ return int(output)
80
+
81
+ def __smsQuery(self,onlyUnread:bool,isCount:bool)->str:
82
+ sqlSelect="COUNT(*)" if isCount else "*,%s AS sep"%(self.__SEP_WITH_DELIM,)
83
+ sql="SELECT %s FROM sms WHERE 1=1 %s;"%(sqlSelect,("AND read=0" if onlyUnread else ""),)
84
+ return sql
85
+
86
+ # operazioni di modifica / cancellazione
87
+ def smsDelete(self,idSms:int)->str:
88
+ """
89
+ Tutti i comandi che fanno operazioni di SELECT, UPDATE o DELETE richiedono il ROOT
90
+ """
91
+ sql="DELETE FROM sms WHERE _id=%d;"%(idSms,)
92
+ return self.__querySmsDb(sql)
93
+ def smsUpdateAsRed(self,idSms:int)->str:
94
+ """
95
+ Tutti i comandi che fanno operazioni di SELECT, UPDATE o DELETE richiedono il ROOT
96
+ """
97
+ sql="UPDATE sms SET read=1 WHERE _id=%d AND read=0;"%(idSms,)
98
+ return self.__querySmsDb(sql)
99
+ def smsUpdateManyAsRed(self,idsSms:list[int])->str|None:
100
+ """
101
+ Tutti i comandi che fanno operazioni di SELECT, UPDATE o DELETE richiedono il ROOT
102
+ """
103
+ if not idsSms:
104
+ return None
105
+ idsSmsStr=",".join(str(x) for x in idsSms)
106
+ sql="UPDATE sms SET read=1 WHERE _id IN(%s) AND read=0;"%(idsSmsStr,)
107
+ return self.__querySmsDb(sql)
108
+
109
+ def __querySmsDb(self,sqlQuery:str)->str:
110
+ """
111
+ Richiede il ROOT sul device
112
+ """
113
+ cmd=r'''adb -s "%s" shell "su -c 'sqlite3 "/data/data/com.android.providers.telephony/databases/mmssms.db" \"%s\"'" '''%(self.deviceId,sqlQuery)
114
+ output=ModuloSystem.systemCallReturnOutput(cmd,None).strip()
115
+ output=ModuloStringhe.normalizzaEol(output)
116
+ return output
117
+
118
+ def smsSend(self,unlockPin:int,numeroDest:str,msg:str)->str:
119
+ msg=msg.replace(" ",r"\ ")
120
+ # premo invio prima di inserire il pin, in questo modo forzo il focus sull'input text
121
+ cmd=r"""adb -s "%s" shell "input keyevent KEYCODE_POWER && sleep 1 && input keyevent KEYCODE_ENTER && sleep 0.5"
122
+ adb -s "%s" shell "input text \"%d\" && sleep 0.5 && input keyevent KEYCODE_ENTER"
123
+ adb -s "%s" shell am start -a android.intent.action.SENDTO -d sms:"%s" --es sms_body "%s" --ez exit_on_sent true
124
+ adb -s "%s" shell "sleep 2 && input keyevent 61 && sleep 0.5 && input keyevent KEYCODE_ENTER && sleep 0.5 && am force-stop com.android.mms && input keyevent KEYCODE_POWER && echo \"FINE\""
125
+ """%(self.deviceId,
126
+ self.deviceId,unlockPin,
127
+ self.deviceId,numeroDest,msg,
128
+ self.deviceId)
129
+ output=ModuloStringhe.normalizzaEol(ModuloSystem.systemCallReturnOutput(cmd,None)).strip()
130
+ return output
@@ -1,12 +1,12 @@
1
- from modulitiz_micro.ModuloDate import ModuloDate
2
- from modulitiz_micro.android.enums.AndroidSmsTypeEnum import AndroidSmsTypeEnum
3
-
4
-
5
- class SmsBean(object):
6
- def __init__(self,arr:list[str]):
7
- self.id=int(arr[0])
8
- self.numCell=arr[2]
9
- self.data=ModuloDate.timestampToDate(int(arr[4])*0.001)
10
- self.dataInvio=ModuloDate.timestampToDate(int(arr[5])*0.001)
11
- self.type=AndroidSmsTypeEnum(int(arr[9])).name.lower()
12
- self.body=arr[12]
1
+ from modulitiz_micro.ModuloDate import ModuloDate
2
+ from modulitiz_micro.android.enums.AndroidSmsTypeEnum import AndroidSmsTypeEnum
3
+
4
+
5
+ class SmsBean(object):
6
+ def __init__(self,arr:list[str]):
7
+ self.id=int(arr[0])
8
+ self.numCell=arr[2]
9
+ self.data=ModuloDate.timestampToDate(int(arr[4])*0.001)
10
+ self.dataInvio=ModuloDate.timestampToDate(int(arr[5])*0.001)
11
+ self.type=AndroidSmsTypeEnum(int(arr[9])).name.lower()
12
+ self.body=arr[12]
@@ -1,17 +1,17 @@
1
- from enum import IntEnum
2
- from enum import auto
3
- from enum import unique
4
-
5
-
6
- @unique
7
- class AndroidSmsTypeEnum(IntEnum):
8
- """
9
- Tipi di sms/mms
10
- """
11
- ALL=0
12
- RECEIVED=auto()
13
- SENT=auto()
14
- DRAFT=auto()
15
- OUTBOX=auto()
16
- FAILED_OUTGOING=auto()
17
- QUEUED=auto()
1
+ from enum import IntEnum
2
+ from enum import auto
3
+ from enum import unique
4
+
5
+
6
+ @unique
7
+ class AndroidSmsTypeEnum(IntEnum):
8
+ """
9
+ Tipi di sms/mms
10
+ """
11
+ ALL=0
12
+ RECEIVED=auto()
13
+ SENT=auto()
14
+ DRAFT=auto()
15
+ OUTBOX=auto()
16
+ FAILED_OUTGOING=auto()
17
+ QUEUED=auto()
@@ -1,13 +1,13 @@
1
- import threading
2
- from abc import ABC
3
-
4
- from modulitiz_micro.files.ModuloLogging import ModuloLogging
5
-
6
-
7
- class AbstractDatabaseService(ABC):
8
-
9
- def __init__(self,logger:ModuloLogging):
10
- self._logger=logger
11
- self.lock=threading.Lock()
12
-
13
- self.database=None
1
+ import threading
2
+ from abc import ABC
3
+
4
+ from modulitiz_micro.files.ModuloLogging import ModuloLogging
5
+
6
+
7
+ class AbstractDatabaseService(ABC):
8
+
9
+ def __init__(self,logger:ModuloLogging):
10
+ self._logger=logger
11
+ self.lock=threading.Lock()
12
+
13
+ self.database=None
@@ -1,69 +1,69 @@
1
- import threading
2
- from abc import ABC
3
-
4
- from modulitiz_micro.ModuloStringhe import ModuloStringhe
5
-
6
-
7
- class AbstractSql(ABC):
8
- def __init__(self):
9
- self.connDb=None
10
- self.lock=threading.Lock()
11
-
12
- def commit(self):
13
- """
14
- Use to make modifications permanents.
15
- """
16
- with self.lock:
17
- self.commitNoLock()
18
-
19
- def commitNoLock(self):
20
- """
21
- Use only if lock is made externally.
22
- """
23
- self.connDb.commit()
24
-
25
- def rollback(self):
26
- """
27
- Undo last uncommitted operations.
28
- """
29
- with self.lock:
30
- self.connDb.rollback()
31
-
32
- def initCursor(self):
33
- """
34
- Creates cursor objects, it's needed to read/write database.
35
- """
36
- with self.lock:
37
- cursoreDb=self.connDb.cursor()
38
- return cursoreDb
39
-
40
- def fetchOne(self,cursoreDb):
41
- """
42
- Retrieve first row of query
43
- """
44
- with cursoreDb:
45
- with self.lock:
46
- result=cursoreDb.fetchone()
47
- if not result:
48
- return None
49
- return result[0]
50
-
51
- def count(self,cursoreDb)->int:
52
- with cursoreDb:
53
- with self.lock:
54
- result=cursoreDb.fetchone()
55
- if not result:
56
- return 0
57
- return result[0]
58
-
59
- def close(self):
60
- with self.lock:
61
- if self.connDb is not None:
62
- self.connDb.close()
63
- self.connDb=None
64
-
65
- @staticmethod
66
- def ifEmptyThenNull(testo:str|None)->str|None:
67
- if ModuloStringhe.isEmpty(testo) or testo=="NULL":
68
- return None
69
- return testo
1
+ import threading
2
+ from abc import ABC
3
+
4
+ from modulitiz_micro.ModuloStringhe import ModuloStringhe
5
+
6
+
7
+ class AbstractSql(ABC):
8
+ def __init__(self):
9
+ self.connDb=None
10
+ self.lock=threading.Lock()
11
+
12
+ def commit(self):
13
+ """
14
+ Use to make modifications permanents.
15
+ """
16
+ with self.lock:
17
+ self.commitNoLock()
18
+
19
+ def commitNoLock(self):
20
+ """
21
+ Use only if lock is made externally.
22
+ """
23
+ self.connDb.commit()
24
+
25
+ def rollback(self):
26
+ """
27
+ Undo last uncommitted operations.
28
+ """
29
+ with self.lock:
30
+ self.connDb.rollback()
31
+
32
+ def initCursor(self):
33
+ """
34
+ Creates cursor objects, it's needed to read/write database.
35
+ """
36
+ with self.lock:
37
+ cursoreDb=self.connDb.cursor()
38
+ return cursoreDb
39
+
40
+ def fetchOne(self,cursoreDb):
41
+ """
42
+ Retrieve first row of query
43
+ """
44
+ with cursoreDb:
45
+ with self.lock:
46
+ result=cursoreDb.fetchone()
47
+ if not result:
48
+ return None
49
+ return result[0]
50
+
51
+ def count(self,cursoreDb)->int:
52
+ with cursoreDb:
53
+ with self.lock:
54
+ result=cursoreDb.fetchone()
55
+ if not result:
56
+ return 0
57
+ return result[0]
58
+
59
+ def close(self):
60
+ with self.lock:
61
+ if self.connDb is not None:
62
+ self.connDb.close()
63
+ self.connDb=None
64
+
65
+ @staticmethod
66
+ def ifEmptyThenNull(testo:str|None)->str|None:
67
+ if ModuloStringhe.isEmpty(testo) or testo=="NULL":
68
+ return None
69
+ return testo
@@ -1,19 +1,19 @@
1
- import oracledb
2
-
3
- from modulitiz_micro.database.ModuloSqlServer import ModuloSqlServer
4
-
5
-
6
- class ModuloSqlOracle(ModuloSqlServer):
7
- DEFAULT_PORTA=1521
8
-
9
- def __init__(self,porta:int|None,*args,**kwargs):
10
- super().__init__(*args,**kwargs)
11
- if porta is None:
12
- porta=self.DEFAULT_PORTA
13
- self.porta=porta
14
-
15
- def connessione(self):
16
- dsn="{}/{}@{}:{}/xe".format(self.username,self.password,self.host,self.porta)
17
- self.connDb=oracledb.connect(dsn)
18
- self.connDb=dsn
19
-
1
+ import oracledb
2
+
3
+ from modulitiz_micro.database.ModuloSqlServer import ModuloSqlServer
4
+
5
+
6
+ class ModuloSqlOracle(ModuloSqlServer):
7
+ DEFAULT_PORTA=1521
8
+
9
+ def __init__(self,porta:int|None,*args,**kwargs):
10
+ super().__init__(*args,**kwargs)
11
+ if porta is None:
12
+ porta=self.DEFAULT_PORTA
13
+ self.porta=porta
14
+
15
+ def connessione(self):
16
+ dsn="{}/{}@{}:{}/xe".format(self.username,self.password,self.host,self.porta)
17
+ self.connDb=oracledb.connect(dsn)
18
+ self.connDb=dsn
19
+
@@ -1,43 +1,43 @@
1
- import pypyodbc
2
-
3
- from modulitiz_micro.database.AbstractSql import AbstractSql
4
-
5
-
6
- class ModuloSqlServer(AbstractSql):
7
- ERROR_CODE__UNIQUE_INDEX=23000
8
-
9
- def __init__(self,host:str,nome_db:str,username:str,password:str):
10
- super().__init__()
11
- self.host=host
12
- self.nome_db=nome_db
13
- self.username=username
14
- self.password=password
15
-
16
- def connessione(self):
17
- connDb=pypyodbc.connect("Driver={SQL Server};Server="+self.host+";Database="+self.nome_db+";uid="+self.username+";pwd="+self.password+";")
18
- self.connDb=connDb
19
-
20
- def select(self,sql:str,params:list):
21
- with self.initCursor() as cursoreDb:
22
- cursoreDb.execute(sql,params)
23
- results=list(cursoreDb)
24
- return results
25
-
26
- def select_count(self,cursoreDb,sql:str,params:list)->int:
27
- with cursoreDb:
28
- cursoreDb.execute(sql,params)
29
- output=self.count(cursoreDb)
30
- return output
31
-
32
- def modifica(self,cursoreDb,sql:str,params:list,ignore_unique_index:bool):
33
- """
34
- Use it for data modifications like: insert, update, delete
35
- """
36
- try:
37
- cursoreDb.execute(sql,params)
38
- except pypyodbc.IntegrityError as ie:
39
- if ignore_unique_index:
40
- error_code=int(ie.value[0])
41
- if error_code!=self.ERROR_CODE__UNIQUE_INDEX:
42
- raise ie
43
-
1
+ import pypyodbc
2
+
3
+ from modulitiz_micro.database.AbstractSql import AbstractSql
4
+
5
+
6
+ class ModuloSqlServer(AbstractSql):
7
+ ERROR_CODE__UNIQUE_INDEX=23000
8
+
9
+ def __init__(self,host:str,nome_db:str,username:str,password:str):
10
+ super().__init__()
11
+ self.host=host
12
+ self.nome_db=nome_db
13
+ self.username=username
14
+ self.password=password
15
+
16
+ def connessione(self):
17
+ connDb=pypyodbc.connect("Driver={SQL Server};Server="+self.host+";Database="+self.nome_db+";uid="+self.username+";pwd="+self.password+";")
18
+ self.connDb=connDb
19
+
20
+ def select(self,sql:str,params:list):
21
+ with self.initCursor() as cursoreDb:
22
+ cursoreDb.execute(sql,params)
23
+ results=list(cursoreDb)
24
+ return results
25
+
26
+ def select_count(self,cursoreDb,sql:str,params:list)->int:
27
+ with cursoreDb:
28
+ cursoreDb.execute(sql,params)
29
+ output=self.count(cursoreDb)
30
+ return output
31
+
32
+ def modifica(self,cursoreDb,sql:str,params:list,ignore_unique_index:bool):
33
+ """
34
+ Use it for data modifications like: insert, update, delete
35
+ """
36
+ try:
37
+ cursoreDb.execute(sql,params)
38
+ except pypyodbc.IntegrityError as ie:
39
+ if ignore_unique_index:
40
+ error_code=int(ie.value[0])
41
+ if error_code!=self.ERROR_CODE__UNIQUE_INDEX:
42
+ raise ie
43
+
@@ -1,6 +1,6 @@
1
- from modulitiz_micro.eccezioni.EccezioneBase import EccezioneBase
2
-
3
- class EccezioneDbNoData(EccezioneBase):
4
-
5
- def __init__(self,*args,**kwargs):
6
- super().__init__(*args,**kwargs)
1
+ from modulitiz_micro.eccezioni.EccezioneBase import EccezioneBase
2
+
3
+ class EccezioneDbNoData(EccezioneBase):
4
+
5
+ def __init__(self,*args,**kwargs):
6
+ super().__init__(*args,**kwargs)