modulitiz-micro 2.30.0__py311-none-any.whl → 2.32.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 -58
  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 +61 -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 +20 -20
  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/{multithreading → multithread}/ModuloThread.py +26 -26
  53. modulitiz_micro/{multithreading → multithread}/ModuloThreadLogger.py +8 -8
  54. modulitiz_micro/{multithreading → 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 -64
  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 -114
  62. modulitiz_micro/rete/http/ModuloHttpConnectionSafe.py +91 -91
  63. modulitiz_micro/rete/http/ModuloHttpUtils.py +69 -66
  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/ModuloTelegram.py +52 -52
  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 +131 -121
  97. modulitiz_micro/util/wheel/ModuloCheckTestNamingConvention.py +86 -0
  98. modulitiz_micro/util/wheel/ModuloToml.py +40 -40
  99. modulitiz_micro/util/wheel/ModuloWheel.py +12 -12
  100. {modulitiz_micro-2.30.0.dist-info → modulitiz_micro-2.32.0.dist-info}/LICENSE +21 -21
  101. {modulitiz_micro-2.30.0.dist-info → modulitiz_micro-2.32.0.dist-info}/METADATA +64 -64
  102. modulitiz_micro-2.32.0.dist-info/RECORD +104 -0
  103. modulitiz_micro-2.30.0.dist-info/RECORD +0 -103
  104. {modulitiz_micro-2.30.0.dist-info → modulitiz_micro-2.32.0.dist-info}/WHEEL +0 -0
  105. {modulitiz_micro-2.30.0.dist-info → modulitiz_micro-2.32.0.dist-info}/top_level.txt +0 -0
@@ -1,121 +1,131 @@
1
- import os
2
- import shutil
3
-
4
- from modulitiz_micro.ModuloColorText import ModuloColorText
5
- from modulitiz_micro.ModuloListe import ModuloListe
6
- from modulitiz_micro.files.ModuloFiles import ModuloFiles
7
- from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
8
- from modulitiz_micro.util.wheel.ModuloToml import ModuloToml
9
- from modulitiz_micro.files.git.ModuloGit import ModuloGit
10
-
11
-
12
- class ModuloBuildWheel(object):
13
- CMD_PYTHON="python"
14
- PATTERN_NOMEFILE_WHEEL="{}-{}-{}-none-any.whl"
15
- MAX_VERSION_TO_KEEP=10
16
-
17
- def __init__(self,nomeModulo:str,percorsoFileMain:str):
18
- self.nomeModulo=nomeModulo
19
- self.nomeModuloNormalizzato=nomeModulo.replace("_","-")
20
-
21
- self.percorsoCartellaSource=os.path.dirname(percorsoFileMain)
22
- self.percorsoCartellaRoot=os.path.dirname(self.percorsoCartellaSource)
23
- self.git=ModuloGit(os.path.dirname(self.percorsoCartellaRoot))
24
- self.skipUnitTest=False
25
-
26
- self.moduloToml=ModuloToml("pyproject.toml")
27
- self.versionOld=None
28
- self.versionNew=None
29
- self.nomefileWheel=None
30
-
31
- def doWork(self):
32
- self.versionOld=self.moduloToml.retrieveVersion()
33
- self.skipUnitTest=input("Skip unit test? y, n (default = n):")=='y'
34
- # chiedo quale versione aumentare (major, minor, bug fix)
35
- tipoVersione=input("Which version increment? 1=major, 2=minor, 3=bug fix (default = 2):")
36
- if tipoVersione=="":
37
- tipoVersione=2
38
- else:
39
- tipoVersione=int(tipoVersione)
40
- # calcolo la prossima versione
41
- self.__computeVersionNew(tipoVersione)
42
- # stampo info
43
- msg=f"Build {self.nomeModulo} {self.versionNew}"
44
- ModuloSystem.setTitoloFinestra(msg)
45
- print("""{}
46
- ============================================================
47
- {} (from version {})
48
- ============================================================
49
- {}""".format(ModuloColorText.GRASSETTO,msg,self.versionOld,ModuloColorText.DEFAULT))
50
- # cambio cartella
51
- os.chdir(self.percorsoCartellaSource)
52
- if self.__doUnitTests() is True:
53
- return
54
- # aggiorno versione
55
- self.moduloToml.updateVersion(self.versionNew)
56
- # costruisco wheel
57
- ModuloSystem.systemCallPrintOutput(f'{self.CMD_PYTHON} -m pip install -U build twine==6.0.1',None)
58
- print()
59
- percorsoCartellaOut=os.path.dirname(self.percorsoCartellaRoot)
60
- percorsoCartellaOut=ModuloFiles.pathJoin(ModuloFiles.pathJoin(percorsoCartellaOut,"wheels"),self.nomeModuloNormalizzato)
61
- cmd='{} -m build --wheel --outdir "{}"'.format(self.CMD_PYTHON,percorsoCartellaOut)
62
- ModuloSystem.systemCallPrintOutput(cmd,None)
63
- print()
64
- # cancello cartelle temporanee
65
- shutil.rmtree(ModuloFiles.pathJoin(self.percorsoCartellaSource,"build"))
66
- shutil.rmtree(ModuloFiles.pathJoin(self.percorsoCartellaSource,self.nomeModulo+".egg-info"))
67
- # installo wheel
68
- self.nomefileWheel=self.PATTERN_NOMEFILE_WHEEL.format(self.nomeModulo,self.versionNew,self.moduloToml.retrieveMinPyVersion())
69
- percorsoWheel=ModuloFiles.pathJoin(percorsoCartellaOut,self.nomefileWheel)
70
- cmd='{} -m pip install -U "{}"'.format(self.CMD_PYTHON,percorsoWheel)
71
- ModuloSystem.systemCallPrintOutput(cmd,None)
72
- print()
73
- # aggiungo il file al repo
74
- self.git.inner.index.add(percorsoWheel)
75
- # se presenti, cancello le versioni troppo vecchie
76
- print()
77
- oldFilenames=ModuloListe.humanOrder(os.listdir(percorsoCartellaOut))[:-self.MAX_VERSION_TO_KEEP]
78
- if len(oldFilenames)==0:
79
- return
80
- print("Cancello le versioni troppo vecchie:")
81
- for file in oldFilenames:
82
- deletedFilename=self.git.inner.index.remove(ModuloFiles.pathJoin(percorsoCartellaOut,file),working_tree=True)
83
- print("\n".join(deletedFilename))
84
- print("Uploading to Pypi")
85
- cmd='{} -m twine upload "{}"'.format(self.CMD_PYTHON,percorsoWheel)
86
- ModuloSystem.systemCallPrintOutput(cmd,None)
87
-
88
- def __doUnitTests(self) -> bool:
89
- if self.skipUnitTest is True:
90
- return False
91
- nomefileTest=ModuloFiles.pathJoin(self.percorsoCartellaSource,"test/TestMain.py")
92
- print("Inizio test...")
93
- cmd='%s "%s"'%(self.CMD_PYTHON,nomefileTest)
94
- righe=[]
95
- for riga in ModuloSystem.systemCallYieldOutput(cmd,None):
96
- print("%s>>>%s %s"%(ModuloColorText.BLU,ModuloColorText.DEFAULT,riga))
97
- righe.append(riga)
98
- righe=reversed(righe[-10:])
99
- righe=[x.strip() for x in righe]
100
- righe=[x if x!="" and x!=ModuloColorText.DEFAULT else None for x in righe]
101
- righe=ModuloListe.eliminaElementiVuoti(righe)
102
- ultimaRiga=righe[0]
103
- PATTERN_TO_PRINT="""{}
104
- ==================================================
105
- {}
106
- ==================================================
107
- """+ModuloColorText.DEFAULT
108
- if ultimaRiga!="OK":
109
- print(PATTERN_TO_PRINT.format(ModuloColorText.ROSSO,"ERRORE nei test"))
110
- return True
111
- print(PATTERN_TO_PRINT.format(ModuloColorText.VERDE,"test completati con successo"))
112
- return False
113
-
114
- def __computeVersionNew(self,tipoVersione:int):
115
- arr=[int(x) for x in self.versionOld.split(".")]
116
- arr[tipoVersione-1]+=1
117
- if tipoVersione!=len(arr):
118
- for i in range(tipoVersione,len(arr)):
119
- arr[i]=0
120
- arr=[str(x) for x in arr]
121
- self.versionNew=".".join(arr)
1
+ import os
2
+ import shutil
3
+
4
+ from modulitiz_micro.ModuloColorText import ModuloColorText
5
+ from modulitiz_micro.ModuloListe import ModuloListe
6
+ from modulitiz_micro.files.ModuloFiles import ModuloFiles
7
+ from modulitiz_micro.sistema.ModuloSystem import ModuloSystem
8
+ from modulitiz_micro.util.wheel.ModuloCheckTestNamingConvention import ModuloCheckTestNamingConvention
9
+ from modulitiz_micro.util.wheel.ModuloToml import ModuloToml
10
+ from modulitiz_micro.files.git.ModuloGit import ModuloGit
11
+
12
+
13
+ class ModuloBuildWheel(object):
14
+ CMD_PYTHON="python"
15
+ PATTERN_NOMEFILE_WHEEL="{}-{}-{}-none-any.whl"
16
+ MAX_VERSION_TO_KEEP=10
17
+
18
+ def __init__(self,moduleName:str,percorsoFileMain:str):
19
+ self.moduleName=moduleName
20
+ self.moduleNameNormalized=moduleName.replace("_","-")
21
+
22
+ self.percorsoCartellaSource=os.path.dirname(percorsoFileMain)
23
+ self.percorsoCartellaRoot=os.path.dirname(self.percorsoCartellaSource)
24
+ self.git=ModuloGit(os.path.dirname(self.percorsoCartellaRoot))
25
+ self.skipUnitTest=False
26
+
27
+ self.moduloToml=ModuloToml("pyproject.toml")
28
+ self.moduloTestNamingConventions=ModuloCheckTestNamingConvention(moduleName,self.percorsoCartellaSource)
29
+ self.versionOld=None
30
+ self.versionNew=None
31
+ self.filenameWheel=None
32
+
33
+ def doWork(self):
34
+ self.versionOld=self.moduloToml.retrieveVersion()
35
+ self.skipUnitTest=input("Skip unit test? y, n (default = n):")=='y'
36
+ # chiedo quale versione aumentare (major, minor, bug fix)
37
+ versionType=input("Which version increment? 1=major, 2=minor, 3=bug fix (default = 2):")
38
+ if versionType=="":
39
+ versionType=2
40
+ else:
41
+ versionType=int(versionType)
42
+ # calcolo la prossima versione
43
+ self.__computeVersionNew(versionType)
44
+ # stampo info
45
+ msg=f"Build {self.moduleName} {self.versionNew}"
46
+ ModuloSystem.setTitoloFinestra(msg)
47
+ print("""{}
48
+ ============================================================
49
+ {} (from version {})
50
+ ============================================================
51
+ {}""".format(ModuloColorText.GRASSETTO,msg,self.versionOld,ModuloColorText.DEFAULT))
52
+ # cambio cartella
53
+ os.chdir(self.percorsoCartellaSource)
54
+ if self.__doUnitTests() is True:
55
+ return
56
+ # aggiorno versione
57
+ self.moduloToml.updateVersion(self.versionNew)
58
+ # costruisco wheel
59
+ ModuloSystem.systemCallPrintOutput(f'{self.CMD_PYTHON} -m pip install -U build twine==6.0.1',None)
60
+ print()
61
+ percorsoCartellaOut=os.path.dirname(self.percorsoCartellaRoot)
62
+ percorsoCartellaOut=ModuloFiles.pathJoin(ModuloFiles.pathJoin(percorsoCartellaOut,"wheels"),self.moduleNameNormalized)
63
+ cmd='{} -m build --wheel --outdir "{}"'.format(self.CMD_PYTHON,percorsoCartellaOut)
64
+ ModuloSystem.systemCallPrintOutput(cmd,None)
65
+ print()
66
+ # cancello cartelle temporanee
67
+ shutil.rmtree(ModuloFiles.pathJoin(self.percorsoCartellaSource,"build"))
68
+ shutil.rmtree(ModuloFiles.pathJoin(self.percorsoCartellaSource,self.moduleName+".egg-info"))
69
+ # installo wheel
70
+ self.filenameWheel=self.PATTERN_NOMEFILE_WHEEL.format(self.moduleName,self.versionNew,self.moduloToml.retrieveMinPyVersion())
71
+ percorsoWheel=ModuloFiles.pathJoin(percorsoCartellaOut,self.filenameWheel)
72
+ cmd='{} -m pip install -U "{}"'.format(self.CMD_PYTHON,percorsoWheel)
73
+ ModuloSystem.systemCallPrintOutput(cmd,None)
74
+ print()
75
+ # aggiungo il file al repo
76
+ self.git.inner.index.add(percorsoWheel)
77
+ # se presenti, cancello le versioni troppo vecchie
78
+ print()
79
+ oldFilenames=ModuloListe.humanOrder(os.listdir(percorsoCartellaOut))[:-self.MAX_VERSION_TO_KEEP]
80
+ if len(oldFilenames)==0:
81
+ return
82
+ print("Cancello le versioni troppo vecchie:")
83
+ for file in oldFilenames:
84
+ deletedFilename=self.git.inner.index.remove(ModuloFiles.pathJoin(percorsoCartellaOut,file),working_tree=True)
85
+ print("\n".join(deletedFilename))
86
+ print("Uploading to Pypi")
87
+ cmd='{} -m twine upload "{}"'.format(self.CMD_PYTHON,percorsoWheel)
88
+ ModuloSystem.systemCallPrintOutput(cmd,None)
89
+
90
+ def __doUnitTests(self) -> bool:
91
+ if self.skipUnitTest is True:
92
+ return False
93
+ nomefileTest=ModuloFiles.pathJoin(self.percorsoCartellaSource,"test/TestMain.py")
94
+ print("Check file and class naming conventions...")
95
+ errors=self.moduloTestNamingConventions.doWork()
96
+ if not ModuloListe.isEmpty(errors):
97
+ errorsCount=len(errors)
98
+ print("There %s %d error%s:"%("are" if errorsCount>1 else "is",errorsCount,"s" if errorsCount>1 else ""))
99
+ for error in errors:
100
+ print(error)
101
+ return True
102
+ print("Starting tests...")
103
+ cmd='%s "%s"'%(self.CMD_PYTHON,nomefileTest)
104
+ rows=[]
105
+ for row in ModuloSystem.systemCallYieldOutput(cmd,None):
106
+ print("%s>>>%s %s"%(ModuloColorText.BLU,ModuloColorText.DEFAULT,row))
107
+ rows.append(row)
108
+ rows=reversed(rows[-10:])
109
+ rows=[x.strip() for x in rows]
110
+ rows=[x if x!="" and x!=ModuloColorText.DEFAULT else None for x in rows]
111
+ rows=ModuloListe.eliminaElementiVuoti(rows)
112
+ lastRow=rows[0]
113
+ PATTERN_TO_PRINT="""{}
114
+ ==================================================
115
+ {}
116
+ ==================================================
117
+ """+ModuloColorText.DEFAULT
118
+ if lastRow!="OK":
119
+ print(PATTERN_TO_PRINT.format(ModuloColorText.ROSSO,"ERRORE nei test"))
120
+ return True
121
+ print(PATTERN_TO_PRINT.format(ModuloColorText.VERDE,"test completati con successo"))
122
+ return False
123
+
124
+ def __computeVersionNew(self,versionType:int):
125
+ arr=[int(x) for x in self.versionOld.split(".")]
126
+ arr[versionType-1]+=1
127
+ if versionType!=len(arr):
128
+ for i in range(versionType,len(arr)):
129
+ arr[i]=0
130
+ arr=[str(x) for x in arr]
131
+ self.versionNew=".".join(arr)
@@ -0,0 +1,86 @@
1
+ import os.path
2
+ import re
3
+
4
+ from modulitiz_micro.ModuloStringhe import ModuloStringhe
5
+
6
+ from modulitiz_micro.ModuloFunzioni import ModuloFunzioni
7
+ from modulitiz_micro.ModuloListe import ModuloListe
8
+ from modulitiz_micro.files.ModuloFiles import ModuloFiles
9
+
10
+
11
+ class ModuloCheckTestNamingConvention(object):
12
+ """
13
+ Checks if naming convention of test classes matches real source classes.
14
+ """
15
+ EXCLUDE_DIRS=("testutil",)
16
+ EXCLUDE_FILES=("TestMain.py",)
17
+
18
+ def __init__(self,moduleName:str,pathSource:str):
19
+ self.moduleName=moduleName
20
+ self.moduleNameNormalizzato=moduleName.replace("_","-")
21
+ self.pathSource=ModuloFiles.pathJoin(pathSource,moduleName)
22
+ self.pathTest=ModuloFiles.pathJoin(pathSource,"test")
23
+ self.errors=[]
24
+ self.__sourceFiles=[]
25
+
26
+ def doWork(self)->list[str]:
27
+ # check if paths exists
28
+ self.__checkPath(self.pathSource)
29
+ self.__checkPath(self.pathTest)
30
+ # cache source files
31
+ for rootRel,rootAbs,folders,filenames in ModuloFiles.walk(self.pathSource,(),self.EXCLUDE_DIRS,None,None):
32
+ self.__sourceFiles.extend([ModuloFiles.pathJoin(rootRel,x) for x in filenames])
33
+ self.__sourceFiles=[x for x in self.__sourceFiles if not ModuloStringhe.contains(x,"__pycache__")]
34
+ # check every test file
35
+ for rootRel,rootAbs,folders,filenames in ModuloFiles.walk(self.pathTest,self.EXCLUDE_FILES,self.EXCLUDE_DIRS,None,None):
36
+ if not rootRel.endswith("__pycache__"):
37
+ for filename in filenames:
38
+ self.__checkFile(rootRel,rootAbs,filename)
39
+ return self.errors
40
+
41
+ def __checkPath(self,path:str):
42
+ if os.path.exists(path):
43
+ return
44
+ self.errors.append("Path not exists: %s"%(path,))
45
+
46
+ def __checkFile(self,rootRel:str,rootAbs:str,filename:str):
47
+ filenameRel=ModuloFiles.pathJoin(rootRel,filename)
48
+ filenameAbs=ModuloFiles.pathJoin(rootAbs,filename)
49
+ isDecorator=ModuloStringhe.contains(rootRel,"decorators")
50
+ # file name convention
51
+ results=re.findall(r"[A-Z]\w+Test.py",filename)
52
+ if ModuloListe.isEmpty(results):
53
+ self.errors.append("File name not matching conventions: %s"%(filenameRel,))
54
+ return
55
+ # file name must match class name
56
+ testClasses=ModuloFunzioni.getClassesFromFileSource(filenameAbs)
57
+ if len(testClasses)>1:
58
+ self.errors.append("File must not contain more than 1 class: %s"%(filenameRel,))
59
+ return
60
+ baseFilename=ModuloFiles.getBaseFileNameAndExtension(filename)[0]
61
+ testClassName=None
62
+ if not isDecorator:
63
+ testClassName=testClasses[0]
64
+ if testClassName!=baseFilename:
65
+ self.errors.append("File and class names must be equals: %s"%(filenameRel,))
66
+ return
67
+ # test must follow source structure
68
+ sourceFilenameRel=self.__getSourceFileNameFromTestFileName(rootRel,baseFilename,isDecorator)
69
+ if sourceFilenameRel is None:
70
+ self.errors.append("File doesn't match source dirs structure: %s"%(filenameRel,))
71
+ return
72
+ # source class name must equals class test
73
+ if not isDecorator:
74
+ sourceClassName=ModuloFunzioni.getClassesFromFileSource(ModuloFiles.pathJoin(self.pathSource,sourceFilenameRel))[0]
75
+ if not testClassName.startswith(sourceClassName):
76
+ self.errors.append("Test class name doesn't match source class name: %s"%(filenameRel,))
77
+
78
+ def __getSourceFileNameFromTestFileName(self,rootRel:str,baseFilename:str,isDecorator:bool)-> str|None:
79
+ partIncremental=""
80
+ for part in re.findall(r'[A-Z](?:[a-z\d]+|[A-Z]*(?=[A-Z]|$))', baseFilename):
81
+ partIncremental+=part
82
+ partIncrementalToUse=partIncremental if not isDecorator else partIncremental[0].lower()+partIncremental[1:]
83
+ filePathRel=ModuloFiles.pathJoin(rootRel,partIncrementalToUse)+".py"
84
+ if filePathRel in self.__sourceFiles:
85
+ return filePathRel
86
+ return None
@@ -1,40 +1,40 @@
1
- import re
2
-
3
- from modulitiz_micro.ModuloStringhe import ModuloStringhe
4
- from modulitiz_micro.files.ModuloFiles import ModuloFiles
5
- from modulitiz_micro.util.pip.ModuloPip import ModuloPip
6
-
7
-
8
- class ModuloToml(object):
9
- """
10
- Operazioni sul file .toml
11
- """
12
- REGEX_TOML_VERSION=r'version *= *"(%s)"'%(ModuloPip.REGEX_VERSION,)
13
-
14
- def __init__(self,nomefile:str):
15
- self.nomefile=nomefile
16
-
17
- def retrieveMinPyVersion(self)->str:
18
- output=self.__retrieveByRegex(r'python-tag* \= *"(py\d+)"')
19
- if output is None:
20
- return "py3"
21
- return output
22
-
23
- def retrieveVersion(self)->str|None:
24
- """
25
- Recupera la versione di una wheel leggendo il file .toml
26
- """
27
- return self.__retrieveByRegex(self.REGEX_TOML_VERSION)
28
-
29
- def updateVersion(self,version:str):
30
- cont=ModuloStringhe.normalizzaEol(ModuloFiles.readFileText(self.nomefile,True))
31
- cont=re.sub(self.REGEX_TOML_VERSION,r'version = "%s"'%(version,),cont)
32
- with ModuloFiles.open(self.nomefile,'wt') as fp:
33
- fp.write(cont)
34
-
35
- def __retrieveByRegex(self,regex:str)->str|None:
36
- cont=ModuloFiles.readFileText(self.nomefile,True)
37
- ricerca=re.search(regex,cont)
38
- if ricerca is None:
39
- return None
40
- return ricerca.group(1)
1
+ import re
2
+
3
+ from modulitiz_micro.ModuloStringhe import ModuloStringhe
4
+ from modulitiz_micro.files.ModuloFiles import ModuloFiles
5
+ from modulitiz_micro.util.pip.ModuloPip import ModuloPip
6
+
7
+
8
+ class ModuloToml(object):
9
+ """
10
+ Operazioni sul file .toml
11
+ """
12
+ REGEX_TOML_VERSION=r'version *= *"(%s)"'%(ModuloPip.REGEX_VERSION,)
13
+
14
+ def __init__(self,nomefile:str):
15
+ self.nomefile=nomefile
16
+
17
+ def retrieveMinPyVersion(self)->str:
18
+ output=self.__retrieveByRegex(r'python-tag* \= *"(py\d+)"')
19
+ if output is None:
20
+ return "py3"
21
+ return output
22
+
23
+ def retrieveVersion(self)->str|None:
24
+ """
25
+ Recupera la versione di una wheel leggendo il file .toml
26
+ """
27
+ return self.__retrieveByRegex(self.REGEX_TOML_VERSION)
28
+
29
+ def updateVersion(self,version:str):
30
+ cont=ModuloStringhe.normalizzaEol(ModuloFiles.readFileText(self.nomefile,True))
31
+ cont=re.sub(self.REGEX_TOML_VERSION,r'version = "%s"'%(version,),cont)
32
+ with ModuloFiles.open(self.nomefile,'wt') as fp:
33
+ fp.write(cont)
34
+
35
+ def __retrieveByRegex(self,regex:str)->str|None:
36
+ cont=ModuloFiles.readFileText(self.nomefile,True)
37
+ ricerca=re.search(regex,cont)
38
+ if ricerca is None:
39
+ return None
40
+ return ricerca.group(1)
@@ -1,12 +1,12 @@
1
- import importlib.metadata
2
-
3
- class ModuloWheel(object):
4
-
5
- def __init__(self,modulo):
6
- self.__modulo=modulo
7
-
8
- def retrieveVersion(self)->str:
9
- """
10
- Recupera la versione di una wheel, indipendentemente in che modo sia costruita (.toml, setup.py, poetry, ...)
11
- """
12
- return importlib.metadata.version(self.__modulo.__name__)
1
+ import importlib.metadata
2
+
3
+ class ModuloWheel(object):
4
+
5
+ def __init__(self,modulo):
6
+ self.__modulo=modulo
7
+
8
+ def retrieveVersion(self)->str:
9
+ """
10
+ Recupera la versione di una wheel, indipendentemente in che modo sia costruita (.toml, setup.py, poetry, ...)
11
+ """
12
+ return importlib.metadata.version(self.__modulo.__name__)
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2023-2040 tiz
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2023-2040 tiz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,64 +1,64 @@
1
- Metadata-Version: 2.1
2
- Name: modulitiz_micro
3
- Version: 2.30.0
4
- Summary: Raccolta dei miei moduli - versione micro
5
- Author-email: tiz <sderfo1234@altervista.org>
6
- Classifier: Programming Language :: Python :: 3
7
- Classifier: License :: OSI Approved :: MIT License
8
- Classifier: Operating System :: OS Independent
9
- Requires-Python: >=3.11
10
- Description-Content-Type: text/markdown
11
- License-File: LICENSE
12
- Requires-Dist: beautifulsoup4>=4.12
13
- Requires-Dist: brotli>=1.1
14
- Requires-Dist: cachetools==5.5.0
15
- Requires-Dist: colorama>=0.4
16
- Requires-Dist: GitPython==3.1.44
17
- Requires-Dist: jsonpickle>=3.0
18
- Requires-Dist: mysql-connector-python==9.0.0
19
- Requires-Dist: mutagen>=1.47
20
- Requires-Dist: psutil>=5.9
21
- Requires-Dist: pynput>=1.7
22
- Requires-Dist: pyOpenSSL>=23.3
23
- Requires-Dist: pypyodbc>=1.3
24
- Requires-Dist: pyserial>=3.5
25
- Requires-Dist: requests>=2.31
26
- Requires-Dist: schedule>=1.2
27
- Requires-Dist: telethon>=1.33
28
- Requires-Dist: webcolors>=1.13
29
-
30
- # modulitiz-micro
31
-
32
- It's a Python library that contains daily use or generic functions.
33
-
34
- ## Installation
35
-
36
- Use the package manager [pip](https://pip.pypa.io/en/stable/) to install:
37
-
38
- ```bash
39
- pip install modulitiz_micro
40
- ```
41
- The other required dependencies will be installed automatically.
42
-
43
- ## Usage
44
-
45
- ```python
46
- from modulitiz_micro.ModuloStringhe import ModuloStringhe
47
-
48
- # returns True
49
- ModuloStringhe.isEmpty(None)
50
- ModuloStringhe.isEmpty("")
51
-
52
- # returns False
53
- ModuloStringhe.isEmpty("a")
54
-
55
- ...
56
- ```
57
-
58
- ## Contributing
59
-
60
- If you find any bug you can write me at [sderfo1234@altervista.org](mailto:sderfo1234@altervista.org)
61
-
62
- ## License
63
-
64
- [MIT](https://choosealicense.com/licenses/mit/)
1
+ Metadata-Version: 2.1
2
+ Name: modulitiz_micro
3
+ Version: 2.32.0
4
+ Summary: Raccolta dei miei moduli - versione micro
5
+ Author-email: tiz <sderfo1234@altervista.org>
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: License :: OSI Approved :: MIT License
8
+ Classifier: Operating System :: OS Independent
9
+ Requires-Python: >=3.11
10
+ Description-Content-Type: text/markdown
11
+ License-File: LICENSE
12
+ Requires-Dist: beautifulsoup4>=4.12
13
+ Requires-Dist: brotli>=1.1
14
+ Requires-Dist: cachetools==5.5.0
15
+ Requires-Dist: colorama>=0.4
16
+ Requires-Dist: GitPython==3.1.44
17
+ Requires-Dist: jsonpickle>=3.0
18
+ Requires-Dist: mysql-connector-python==9.0.0
19
+ Requires-Dist: mutagen>=1.47
20
+ Requires-Dist: psutil>=5.9
21
+ Requires-Dist: pynput>=1.7
22
+ Requires-Dist: pyOpenSSL>=23.3
23
+ Requires-Dist: pypyodbc>=1.3
24
+ Requires-Dist: pyserial>=3.5
25
+ Requires-Dist: requests>=2.31
26
+ Requires-Dist: schedule>=1.2
27
+ Requires-Dist: telethon>=1.33
28
+ Requires-Dist: webcolors>=1.13
29
+
30
+ # modulitiz-micro
31
+
32
+ It's a Python library that contains daily use or generic functions.
33
+
34
+ ## Installation
35
+
36
+ Use the package manager [pip](https://pip.pypa.io/en/stable/) to install:
37
+
38
+ ```bash
39
+ pip install modulitiz_micro
40
+ ```
41
+ The other required dependencies will be installed automatically.
42
+
43
+ ## Usage
44
+
45
+ ```python
46
+ from modulitiz_micro.ModuloStringhe import ModuloStringhe
47
+
48
+ # returns True
49
+ ModuloStringhe.isEmpty(None)
50
+ ModuloStringhe.isEmpty("")
51
+
52
+ # returns False
53
+ ModuloStringhe.isEmpty("a")
54
+
55
+ ...
56
+ ```
57
+
58
+ ## Contributing
59
+
60
+ If you find any bug you can write me at [sderfo1234@altervista.org](mailto:sderfo1234@altervista.org)
61
+
62
+ ## License
63
+
64
+ [MIT](https://choosealicense.com/licenses/mit/)