re-common 10.0.3__tar.gz → 10.0.5__tar.gz

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 (218) hide show
  1. {re_common-10.0.3 → re_common-10.0.5}/PKG-INFO +1 -1
  2. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/utils/author_smi.py +53 -15
  3. re_common-10.0.5/re_common/v2/baselibrary/utils/n_ary_expression_tree.py +178 -0
  4. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/utils/string_clear.py +1 -14
  5. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/utils/stringutils.py +51 -1
  6. {re_common-10.0.3 → re_common-10.0.5}/re_common.egg-info/PKG-INFO +1 -1
  7. {re_common-10.0.3 → re_common-10.0.5}/re_common.egg-info/SOURCES.txt +1 -0
  8. {re_common-10.0.3 → re_common-10.0.5}/setup.py +2 -3
  9. {re_common-10.0.3 → re_common-10.0.5}/LICENSE +0 -0
  10. {re_common-10.0.3 → re_common-10.0.5}/README.md +0 -0
  11. {re_common-10.0.3 → re_common-10.0.5}/re_common/__init__.py +0 -0
  12. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/__init__.py +0 -0
  13. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/baseabs/__init__.py +0 -0
  14. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/baseabs/baseabs.py +0 -0
  15. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/database/__init__.py +0 -0
  16. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/database/mbuilder.py +0 -0
  17. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/database/moudle.py +0 -0
  18. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/database/msqlite3.py +0 -0
  19. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/database/mysql.py +0 -0
  20. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/database/sql_factory.py +0 -0
  21. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/mthread/MThreadingRun.py +0 -0
  22. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/mthread/MThreadingRunEvent.py +0 -0
  23. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/mthread/__init__.py +0 -0
  24. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/mthread/mythreading.py +0 -0
  25. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/pakge_other/__init__.py +0 -0
  26. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/pakge_other/socks.py +0 -0
  27. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/readconfig/__init__.py +0 -0
  28. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/readconfig/config_factory.py +0 -0
  29. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/readconfig/ini_config.py +0 -0
  30. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/readconfig/toml_config.py +0 -0
  31. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/temporary/__init__.py +0 -0
  32. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/temporary/envdata.py +0 -0
  33. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/__init__.py +0 -0
  34. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/all_requests/__init__.py +0 -0
  35. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/all_requests/aiohttp_request.py +0 -0
  36. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/all_requests/httpx_requet.py +0 -0
  37. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/all_requests/mrequest.py +0 -0
  38. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/all_requests/requests_request.py +0 -0
  39. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/batch_compre/__init__.py +0 -0
  40. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/batch_compre/bijiao_batch.py +0 -0
  41. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/contrast_db3.py +0 -0
  42. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/copy_file.py +0 -0
  43. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/db3_2_sizedb3.py +0 -0
  44. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/foreachgz.py +0 -0
  45. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/get_attr.py +0 -0
  46. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/image_to_pdf.py +0 -0
  47. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/java_code_deal.py +0 -0
  48. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/javacode.py +0 -0
  49. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/mdb_db3.py +0 -0
  50. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/merge_file.py +0 -0
  51. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/merge_gz_file.py +0 -0
  52. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/mhdfstools/__init__.py +0 -0
  53. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +0 -0
  54. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/mhdfstools/hdfst.py +0 -0
  55. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +0 -0
  56. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/mongo_tools.py +0 -0
  57. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/move_file.py +0 -0
  58. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/move_mongo/__init__.py +0 -0
  59. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +0 -0
  60. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/move_mongo/move_mongo_table.py +0 -0
  61. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/move_mongo/use_mttf.py +0 -0
  62. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/move_mongo/use_mv.py +0 -0
  63. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/mpandas/__init__.py +0 -0
  64. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +0 -0
  65. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/mpandas/pandas_visualization.py +0 -0
  66. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/myparsel.py +0 -0
  67. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/rename_dir_file.py +0 -0
  68. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/sequoiadb_utils.py +0 -0
  69. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/split_line_to_many.py +0 -0
  70. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/stringtodicts.py +0 -0
  71. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/tools/workwechant_bot.py +0 -0
  72. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/__init__.py +0 -0
  73. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseaiohttp.py +0 -0
  74. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseaiomysql.py +0 -0
  75. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseallstep.py +0 -0
  76. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseavro.py +0 -0
  77. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseboto3.py +0 -0
  78. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basecsv.py +0 -0
  79. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basedict.py +0 -0
  80. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basedir.py +0 -0
  81. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseencode.py +0 -0
  82. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseencoding.py +0 -0
  83. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseesdsl.py +0 -0
  84. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseexcel.py +0 -0
  85. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseexcept.py +0 -0
  86. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basefile.py +0 -0
  87. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseftp.py +0 -0
  88. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basegzip.py +0 -0
  89. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basehdfs.py +0 -0
  90. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basehttpx.py +0 -0
  91. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseip.py +0 -0
  92. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basejson.py +0 -0
  93. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baselist.py +0 -0
  94. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basemotor.py +0 -0
  95. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basemssql.py +0 -0
  96. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseodbc.py +0 -0
  97. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basepandas.py +0 -0
  98. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basepeewee.py +0 -0
  99. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basepika.py +0 -0
  100. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basepydash.py +0 -0
  101. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basepymongo.py +0 -0
  102. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basequeue.py +0 -0
  103. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baserar.py +0 -0
  104. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baserequest.py +0 -0
  105. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseset.py +0 -0
  106. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basesmb.py +0 -0
  107. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basestring.py +0 -0
  108. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basetime.py +0 -0
  109. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basetuple.py +0 -0
  110. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/baseurl.py +0 -0
  111. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/basezip.py +0 -0
  112. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/core/__init__.py +0 -0
  113. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/core/bottomutils.py +0 -0
  114. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/core/mdeprecated.py +0 -0
  115. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/core/mlamada.py +0 -0
  116. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/core/msginfo.py +0 -0
  117. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/core/requests_core.py +0 -0
  118. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/fateadm.py +0 -0
  119. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/importfun.py +0 -0
  120. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/mfaker.py +0 -0
  121. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/my_abc/__init__.py +0 -0
  122. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/my_abc/better_abc.py +0 -0
  123. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/mylogger.py +0 -0
  124. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/myredisclient.py +0 -0
  125. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/pipupgrade.py +0 -0
  126. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/ringlist.py +0 -0
  127. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/version_compare.py +0 -0
  128. {re_common-10.0.3 → re_common-10.0.5}/re_common/baselibrary/utils/ydmhttp.py +0 -0
  129. {re_common-10.0.3 → re_common-10.0.5}/re_common/facade/__init__.py +0 -0
  130. {re_common-10.0.3 → re_common-10.0.5}/re_common/facade/lazy_import.py +0 -0
  131. {re_common-10.0.3 → re_common-10.0.5}/re_common/facade/loggerfacade.py +0 -0
  132. {re_common-10.0.3 → re_common-10.0.5}/re_common/facade/mysqlfacade.py +0 -0
  133. {re_common-10.0.3 → re_common-10.0.5}/re_common/facade/now.py +0 -0
  134. {re_common-10.0.3 → re_common-10.0.5}/re_common/facade/sqlite3facade.py +0 -0
  135. {re_common-10.0.3 → re_common-10.0.5}/re_common/facade/use/__init__.py +0 -0
  136. {re_common-10.0.3 → re_common-10.0.5}/re_common/facade/use/mq_use_facade.py +0 -0
  137. {re_common-10.0.3 → re_common-10.0.5}/re_common/facade/use/proxy_use_facade.py +0 -0
  138. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/__init__.py +0 -0
  139. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/base_dict_test.py +0 -0
  140. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/baseavro_test.py +0 -0
  141. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/basefile_test.py +0 -0
  142. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/basemssql_test.py +0 -0
  143. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/baseodbc_test.py +0 -0
  144. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/basepandas_test.py +0 -0
  145. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/get_attr_test/__init__.py +0 -0
  146. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/get_attr_test/get_attr_test_settings.py +0 -0
  147. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/get_attr_test/settings.py +0 -0
  148. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/idencode_test.py +0 -0
  149. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/iniconfig_test.py +0 -0
  150. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/ip_test.py +0 -0
  151. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/merge_file_test.py +0 -0
  152. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/mfaker_test.py +0 -0
  153. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/mm3_test.py +0 -0
  154. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/mylogger_test.py +0 -0
  155. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/myparsel_test.py +0 -0
  156. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/mysql_test.py +0 -0
  157. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/pymongo_test.py +0 -0
  158. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/split_test.py +0 -0
  159. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/sqlite3_merge_test.py +0 -0
  160. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/sqlite3_test.py +0 -0
  161. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/tomlconfig_test.py +0 -0
  162. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/use_tools_test/__init__.py +0 -0
  163. {re_common-10.0.3 → re_common-10.0.5}/re_common/libtest/user/__init__.py +0 -0
  164. {re_common-10.0.3 → re_common-10.0.5}/re_common/studio/__init__.py +0 -0
  165. {re_common-10.0.3 → re_common-10.0.5}/re_common/studio/assignment_expressions.py +0 -0
  166. {re_common-10.0.3 → re_common-10.0.5}/re_common/studio/mydash/__init__.py +0 -0
  167. {re_common-10.0.3 → re_common-10.0.5}/re_common/studio/mydash/test1.py +0 -0
  168. {re_common-10.0.3 → re_common-10.0.5}/re_common/studio/pydashstudio/__init__.py +0 -0
  169. {re_common-10.0.3 → re_common-10.0.5}/re_common/studio/pydashstudio/first.py +0 -0
  170. {re_common-10.0.3 → re_common-10.0.5}/re_common/studio/streamlitstudio/__init__.py +0 -0
  171. {re_common-10.0.3 → re_common-10.0.5}/re_common/studio/streamlitstudio/first_app.py +0 -0
  172. {re_common-10.0.3 → re_common-10.0.5}/re_common/studio/streamlitstudio/uber_pickups.py +0 -0
  173. {re_common-10.0.3 → re_common-10.0.5}/re_common/studio/test.py +0 -0
  174. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/__init__.py +0 -0
  175. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/__init__.py +0 -0
  176. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/s3object/__init__.py +0 -0
  177. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/s3object/baseboto3.py +0 -0
  178. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/tools/__init__.py +0 -0
  179. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/tools/dict_tools.py +0 -0
  180. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/tools/list_tools.py +0 -0
  181. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/tools/search_hash_tools.py +0 -0
  182. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/tools/text_matcher.py +0 -0
  183. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/tools/unionfind_tools.py +0 -0
  184. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/utils/BusinessStringUtil.py +0 -0
  185. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/utils/__init__.py +0 -0
  186. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/utils/basedict.py +0 -0
  187. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/utils/basehdfs.py +0 -0
  188. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/utils/json_cls.py +0 -0
  189. {re_common-10.0.3 → re_common-10.0.5}/re_common/v2/baselibrary/utils/string_bool.py +0 -0
  190. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/__init__.py +0 -0
  191. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/base_step_process.py +0 -0
  192. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/baseencodeid.py +0 -0
  193. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/changetaskname.py +0 -0
  194. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/core_var.py +0 -0
  195. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/mmh3Hash.py +0 -0
  196. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/proxy/__init__.py +0 -0
  197. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/proxy/allproxys.py +0 -0
  198. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/proxy/allproxys_thread.py +0 -0
  199. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/proxy/cnki_proxy.py +0 -0
  200. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/proxy/kuaidaili.py +0 -0
  201. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/proxy/proxy_all.py +0 -0
  202. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/proxy/update_kuaidaili_0.py +0 -0
  203. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/proxy/wanfang_proxy.py +0 -0
  204. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/proxy/wp_proxy_all.py +0 -0
  205. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/read_rawid_to_txt.py +0 -0
  206. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/title/__init__.py +0 -0
  207. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/title/transform/TransformBookTitleToZt.py +0 -0
  208. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/title/transform/TransformConferenceTitleToZt.py +0 -0
  209. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/title/transform/TransformCstadTitleToZt.py +0 -0
  210. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/title/transform/TransformJournalTitleToZt.py +0 -0
  211. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/title/transform/TransformPatentTitleToZt.py +0 -0
  212. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/title/transform/TransformRegulationTitleToZt.py +0 -0
  213. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/title/transform/TransformStandardTitleToZt.py +0 -0
  214. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/title/transform/TransformThesisTitleToZt.py +0 -0
  215. {re_common-10.0.3 → re_common-10.0.5}/re_common/vip/title/transform/__init__.py +0 -0
  216. {re_common-10.0.3 → re_common-10.0.5}/re_common.egg-info/dependency_links.txt +0 -0
  217. {re_common-10.0.3 → re_common-10.0.5}/re_common.egg-info/top_level.txt +0 -0
  218. {re_common-10.0.3 → re_common-10.0.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: re_common
3
- Version: 10.0.3
3
+ Version: 10.0.5
4
4
  Summary: a library about all python projects
5
5
  Home-page: https://gitee.com/xujiangios/re-common
6
6
  Author: vic
@@ -3,9 +3,12 @@ import re
3
3
  import string
4
4
 
5
5
  import regex
6
- import unicodedata
6
+ from jellyfish import damerau_levenshtein_distance
7
7
  from rapidfuzz._utils import setupPandas, is_none
8
8
  from rapidfuzz.distance import Jaro
9
+ from unidecode import unidecode
10
+
11
+ from re_common.v2.baselibrary.utils.stringutils import get_diacritic_variant
9
12
 
10
13
  """
11
14
  作者比率分布 大部分在 1和 2
@@ -23,17 +26,6 @@ additional_chars = '‑–‐’·.—'
23
26
  extended_punctuation = string.punctuation + additional_chars
24
27
 
25
28
 
26
- def get_diacritic_variant(char1):
27
- # 将字符转换为标准的 Unicode 形式
28
- normalized_char1 = unicodedata.normalize('NFD', char1)
29
-
30
- # 获取基本字符(去掉变音符号)
31
- base_char1 = ''.join(c for c in normalized_char1 if unicodedata.category(c) != 'Mn')
32
-
33
- # 判断基本字符是否相同
34
- return base_char1
35
-
36
-
37
29
  def detect_other_languages(text):
38
30
  # 匹配所有非中文、非英文、非数字字符
39
31
  pattern = r'[^\u4E00-\u9FFFa-zA-Z0-9\s.,!?;:\'\"()‑\-–—‐’·˜.]'
@@ -127,6 +119,49 @@ def custom_rstrip(s):
127
119
  return s
128
120
 
129
121
 
122
+ # 分割中文拼音,如"Xiaohong" ————> ['Xiao', 'hong']
123
+ def chinese_pinyin_split_by_rules(input_str):
124
+ # 声母列表(含复合声母)
125
+ initials = {
126
+ 'b', 'p', 'm', 'f', 'd', 't', 'n', 'l', 'g', 'k', 'h',
127
+ 'j', 'q', 'x', 'zh', 'ch', 'sh', 'r', 'z', 'c', 's', 'y', 'w'
128
+ }
129
+ # 韵母列表(部分示例)
130
+ finals = {
131
+ 'a', 'o', 'e', 'ai', 'ei', 'ao', 'ou', 'an', 'en', 'ang', 'eng', 'ong',
132
+ 'i', 'ia', 'ie', 'iao', 'iu', 'ian', 'in', 'iang', 'ing', 'iong',
133
+ 'u', 'ua', 'uo', 'uai', 'ui', 'uan', 'un', 'uang', 'ueng',
134
+ 'v', 've', 'van', 'vn'
135
+ }
136
+ result = []
137
+ while input_str:
138
+ # 尝试匹配最长声母
139
+ max_initial_len = 2 # 最长声母如 'zh'
140
+ matched_initial = ""
141
+ for length in range(max_initial_len, 0, -1):
142
+ candidate = input_str[:length]
143
+ if candidate.lower() in initials:
144
+ matched_initial = candidate
145
+ break
146
+ # 切分声母后的剩余部分
147
+ remaining = input_str[len(matched_initial):]
148
+ # 匹配韵母
149
+ max_final_len = min(4, len(remaining)) # 最长韵母如 'iong'
150
+ matched_final = ""
151
+ for length in range(max_final_len, 0, -1):
152
+ candidate = remaining[:length]
153
+ if candidate.lower() in finals:
154
+ matched_final = candidate
155
+ break
156
+ if matched_final:
157
+ # 合并声母和韵母
158
+ syllable = matched_initial + matched_final
159
+ result.append(syllable)
160
+ input_str = input_str[len(syllable):]
161
+ else:
162
+ return [] # 无法切分
163
+ return result
164
+
130
165
 
131
166
  def AuthorRatio(
132
167
  s1,
@@ -151,8 +186,8 @@ def AuthorRatio(
151
186
  if not s1 or not s2:
152
187
  return 0
153
188
  # 处理音标问题
154
- s1 = get_diacritic_variant(s1)
155
- s2 = get_diacritic_variant(s2)
189
+ s1 = get_diacritic_variant(unidecode(s1))
190
+ s2 = get_diacritic_variant(unidecode(s2))
156
191
  # 这里提出来是为了少计算 但后期需要平衡内存和算力
157
192
  # 移除指定符号 这里做了小写化处理
158
193
  s1_punc = remove_punctuation(s1)
@@ -218,6 +253,10 @@ def AuthorRatio(
218
253
  # 如果两个字符忽略大小写后相同,继续比较下一个字符
219
254
  if i1.lower() == i2.lower():
220
255
  continue
256
+ # 在作者中 有可能错误字母 当单词大于3 且只有一个字母错误或者位置交换时 可以认为这两个单词相同
257
+ # 样例 "De Gusmio, Ana Paula Henriques","De Gusmão, Ana Paula Henriques"
258
+ if len(i1) > 3 and damerau_levenshtein_distance(i1, i2) <= 1:
259
+ continue
221
260
 
222
261
  # 如果其中一个字符的长度为1(即是单个字母),检查它们的首字母是否匹配
223
262
  if len(i1) == 1 or len(i2) == 1:
@@ -260,7 +299,6 @@ def AuthorRatio(
260
299
  if len(sort_l1) == len(sort_l2) and (is_same_or_initials_match(sort_l1, sort_l2) or set(sort_l1) == set(sort_l2)):
261
300
  return 0.99
262
301
 
263
-
264
302
  ##############################################################
265
303
  # 以上为情况穷举情况,以下为其他情况的相似率计算
266
304
  ##############################################################
@@ -0,0 +1,178 @@
1
+ class Node:
2
+ def __init__(self, value, children=None):
3
+ self.value = value
4
+ self.children = children if children is not None else []
5
+
6
+ def __repr__(self):
7
+ return f"Node(value={self.value}, children={self.children})"
8
+
9
+
10
+ def tokenize(expression):
11
+ """将表达式分解为标记(token),仅以 and, or, not 和括号作为分界符
12
+
13
+ Args:
14
+ expression (str): 输入的字符串表达式,例如 'a = 3 + (b > 2) and c'
15
+
16
+ Returns:
17
+ list: 分解后的标记列表,例如 ['a = 3 + (b > 2)', 'and', 'c']
18
+ """
19
+ tokens = [] # 存储最终的标记列表
20
+ current = "" # 当前正在构建的标记字符串
21
+ i = 0 # 当前字符的索引
22
+ length = len(expression) # 输入表达式的长度
23
+
24
+ def is_delimiter_match(expression, i, delimiter_len=3, delimiter="and"):
25
+ """检查当前位置是否匹配指定的分隔符(and, or, not)
26
+
27
+ Args:
28
+ expression (str): 输入的表达式字符串
29
+ i (int): 当前检查的起始索引
30
+ delimiter_len (int): 分隔符的长度,默认为 3(适用于 'and' 和 'not')
31
+ delimiter (str): 要检查的分隔符,默认为 'and'
32
+
33
+ Returns:
34
+ bool: 如果当前位置匹配分隔符且前后有空格,返回 True,否则返回 False
35
+ """
36
+ # 检查索引是否超出范围
37
+ if not i + delimiter_len <= length:
38
+ return False
39
+ # 检查当前位置是否匹配指定分隔符(忽略大小写)
40
+ if not expression[i:i + delimiter_len].lower() == delimiter:
41
+ return False
42
+
43
+ # 检查分隔符前是否有一个空格(如果不是字符串开头)
44
+ if i - 1 >= 0:
45
+ if not expression[i - 1].lower() == ' ':
46
+ return False
47
+
48
+ # 检查分隔符后是否有一个空格(如果不是字符串结尾)
49
+ if i + delimiter_len + 1 <= length:
50
+ if not expression[i + delimiter_len].lower() == ' ':
51
+ return False
52
+ return True
53
+
54
+ # 遍历表达式的每个字符
55
+ while i < length:
56
+ char = expression[i] # 当前处理的字符
57
+
58
+ # 处理括号
59
+ if char in "()":
60
+ if current.strip(): # 如果当前标记有内容,先将其添加到 tokens
61
+ tokens.append(current.strip())
62
+ current = "" # 重置当前标记
63
+ tokens.append(char) # 将括号作为独立标记添加
64
+ i += 1 # 移动到下一个字符
65
+ continue
66
+
67
+ # 检查是否遇到 and, or, not 分隔符
68
+ if is_delimiter_match(expression, i, delimiter_len=3, delimiter="and"):
69
+ if current.strip(): # 如果当前标记有内容,先添加
70
+ tokens.append(current.strip())
71
+ current = "" # 重置当前标记
72
+ tokens.append("and") # 添加 'and' 标记
73
+ i += 3 # 跳过 'and' 的长度
74
+ continue
75
+ elif is_delimiter_match(expression, i, delimiter_len=2, delimiter="or"):
76
+ if current.strip(): # 如果当前标记有内容,先添加
77
+ tokens.append(current.strip())
78
+ current = "" # 重置当前标记
79
+ tokens.append("or") # 添加 'or' 标记
80
+ i += 2 # 跳过 'or' 的长度
81
+ continue
82
+ elif is_delimiter_match(expression, i, delimiter_len=3, delimiter="not"):
83
+ if current.strip(): # 如果当前标记有内容,先添加
84
+ tokens.append(current.strip())
85
+ current = "" # 重置当前标记
86
+ tokens.append("not") # 添加 'not' 标记
87
+ i += 3 # 跳过 'not' 的长度
88
+ continue
89
+
90
+ # 将非分隔符字符追加到当前标记中,包括空格
91
+ current += char
92
+ i += 1 # 移动到下一个字符
93
+
94
+ # 处理最后一个标记(如果有内容)
95
+ if current.strip():
96
+ tokens.append(current.strip())
97
+
98
+ return tokens # 返回标记列表
99
+
100
+
101
+
102
+
103
+ def parse_expression(tokens):
104
+ """递归下降解析表达式"""
105
+
106
+ def parse_or(tokens, pos):
107
+ """解析 OR 级别(最低优先级)"""
108
+ left, pos = parse_and(tokens, pos)
109
+ while pos < len(tokens) and tokens[pos] == 'or':
110
+ pos += 1
111
+ if pos >= len(tokens):
112
+ raise ValueError("Incomplete expression after 'or'")
113
+ right, pos = parse_and(tokens, pos)
114
+ left = Node('or', [left, right])
115
+ return left, pos
116
+
117
+ def parse_and(tokens, pos):
118
+ """解析 AND 级别(次高优先级)"""
119
+ left, pos = parse_not(tokens, pos)
120
+ while pos < len(tokens) and tokens[pos] == 'and':
121
+ pos += 1
122
+ if pos >= len(tokens):
123
+ raise ValueError("Incomplete expression after 'and'")
124
+ right, pos = parse_not(tokens, pos)
125
+ left = Node('and', [left, right])
126
+ return left, pos
127
+
128
+ def parse_not(tokens, pos):
129
+ """解析 NOT 级别(最高优先级)"""
130
+ if pos < len(tokens) and tokens[pos] == 'not':
131
+ pos += 1
132
+ if pos >= len(tokens):
133
+ raise ValueError("Incomplete expression after 'not'")
134
+ child, pos = parse_primary(tokens, pos)
135
+ return Node('not', [child]), pos
136
+ return parse_primary(tokens, pos)
137
+
138
+ def parse_primary(tokens, pos):
139
+ """解析基本单元(条件或括号表达式)"""
140
+ if pos >= len(tokens):
141
+ raise ValueError("Unexpected end of expression")
142
+
143
+ if tokens[pos] == '(':
144
+ pos += 1
145
+ subtree, pos = parse_or(tokens, pos)
146
+ if pos >= len(tokens) or tokens[pos] != ')':
147
+ raise ValueError("Missing closing parenthesis")
148
+ return subtree, pos + 1
149
+ else:
150
+ # 假设这是一个条件(如 A=1)
151
+ return Node(tokens[pos]), pos + 1
152
+
153
+ # 从头开始解析
154
+ tree, pos = parse_or(tokens, 0)
155
+ if pos < len(tokens):
156
+ raise ValueError(f"Extra tokens after expression: {tokens[pos:]}")
157
+ return tree
158
+
159
+
160
+ # 测试代码
161
+ expressions = [
162
+ "not A=1 and B= 2",
163
+ "A=1 and (not B=2 or (C=3 or D=4))",
164
+ "A=1 and not (B=2 or C=3 and D=4 or E=5)",
165
+ "(A=1 and not (B=2 or C=3 or D=4))",
166
+ "A=1 and", # 不完整表达式
167
+ "and A=1", # 不完整表达式
168
+ ]
169
+
170
+ for expr in expressions:
171
+ try:
172
+ print(f"\nExpression: {expr}")
173
+ tokens = tokenize(expr)
174
+ print("Tokens:", tokens)
175
+ tree = parse_expression(tokens)
176
+ print("Tree:", tree)
177
+ except ValueError as e:
178
+ print(f"Error: {e}")
@@ -1,7 +1,7 @@
1
1
  import re
2
2
  import regex
3
3
 
4
- from re_common.v2.baselibrary.utils.stringutils import qj2bj, bj2qj, get_diacritic_variant
4
+ from re_common.v2.baselibrary.utils.stringutils import qj2bj, bj2qj, get_diacritic_variant, clean_html
5
5
 
6
6
 
7
7
  class StringClear(object):
@@ -67,7 +67,6 @@ class StringClear(object):
67
67
  return self
68
68
 
69
69
  def replace_dash_with_space(self):
70
- # 横线换成空格 比 去除符号有时更有用
71
70
  self.obj_str = self.obj_str.replace("-", " ")
72
71
  return self
73
72
 
@@ -88,20 +87,9 @@ class StringClear(object):
88
87
 
89
88
  def remove_html_tag(self):
90
89
  import html
91
- from parsel import Selector
92
90
 
93
91
  self.obj_str = html.unescape(self.obj_str)
94
92
 
95
- def clean_html(html):
96
- sel = Selector(text=html, type='html')
97
- # 移除脚本和样式
98
- sel.xpath('//script').remove()
99
- sel.xpath('//style').remove()
100
-
101
- # 提取文本
102
- text_nodes = sel.xpath('//text()').getall()
103
- return ''.join(t.strip() for t in text_nodes if t.strip())
104
-
105
93
  self.obj_str = clean_html(self.obj_str)
106
94
 
107
95
  return self
@@ -117,7 +105,6 @@ def rel_clear(str_obj):
117
105
  .to_str() # 防止其他类型传入 比如 int double
118
106
  .qj_to_bj() # 全角转半角
119
107
  .remove_html_tag() # html标签清理
120
- .replace_dash_with_space() # 横线转空格 在 英文 title 中更有用
121
108
  .remove_special_chars() # 移除特殊字符,仅保留字母、数字、空格和汉字 \w 已经包括所有 Unicode 字母 下划线 _ 会被保留
122
109
  .collapse_spaces() # 移除多余空格,连续多个空格变一个
123
110
  .lower() # 小写
@@ -1,7 +1,9 @@
1
1
  import re
2
+ import threading
2
3
 
3
4
  import regex
4
5
  import unicodedata
6
+ from html.parser import HTMLParser
5
7
 
6
8
 
7
9
  def bj2qj(src):
@@ -25,6 +27,7 @@ def bj2qj(src):
25
27
 
26
28
  return ''.join(buf)
27
29
 
30
+
28
31
  def qj2bj(src):
29
32
  """
30
33
  全角转半角
@@ -62,6 +65,7 @@ def get_diacritic_variant(char1):
62
65
  # 判断基本字符是否相同
63
66
  return base_char1
64
67
 
68
+
65
69
  def get_alphabetic_ratio(text: str) -> float:
66
70
  # 返回字母型字符所占比例
67
71
  if not text:
@@ -93,4 +97,50 @@ def get_alphabetic_ratio(text: str) -> float:
93
97
  alphabetic_chars = re.findall(alphabetic_pattern, clean_text)
94
98
 
95
99
  # 返回字母型字符所占比例
96
- return len(alphabetic_chars) / len(clean_text)
100
+ return len(alphabetic_chars) / len(clean_text)
101
+
102
+
103
+ class HTMLTextExtractor(HTMLParser):
104
+ _thread_local = threading.local() # 线程局部存储
105
+
106
+ def __init__(self):
107
+ super().__init__()
108
+ self.reset_state()
109
+
110
+ def handle_starttag(self, tag, attrs):
111
+ if tag in ('script', 'style'):
112
+ self.skip = True
113
+
114
+ def handle_endtag(self, tag):
115
+ if tag in ('script', 'style'):
116
+ self.skip = False
117
+
118
+ def handle_data(self, data):
119
+ if not self.skip and data.strip():
120
+ self.text.append(data)
121
+
122
+ def reset_state(self):
123
+ self.reset()
124
+ self.text = []
125
+ self.skip = False
126
+
127
+ def get_text(self):
128
+ return ''.join(self.text).strip()
129
+
130
+ @classmethod
131
+ def get_parser(cls):
132
+ # 每个线程获取独立实例
133
+ if not hasattr(cls._thread_local, 'parser'):
134
+ cls._thread_local.parser = cls()
135
+ return cls._thread_local.parser
136
+
137
+
138
+ def clean_html(html):
139
+ parser = HTMLTextExtractor.get_parser()
140
+ parser.reset_state()
141
+ parser.feed(html)
142
+ parser.close()
143
+ return parser.get_text()
144
+
145
+
146
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: re_common
3
- Version: 10.0.3
3
+ Version: 10.0.5
4
4
  Summary: a library about all python projects
5
5
  Home-page: https://gitee.com/xujiangios/re-common
6
6
  Author: vic
@@ -184,6 +184,7 @@ re_common/v2/baselibrary/utils/author_smi.py
184
184
  re_common/v2/baselibrary/utils/basedict.py
185
185
  re_common/v2/baselibrary/utils/basehdfs.py
186
186
  re_common/v2/baselibrary/utils/json_cls.py
187
+ re_common/v2/baselibrary/utils/n_ary_expression_tree.py
187
188
  re_common/v2/baselibrary/utils/string_bool.py
188
189
  re_common/v2/baselibrary/utils/string_clear.py
189
190
  re_common/v2/baselibrary/utils/stringutils.py
@@ -24,8 +24,7 @@ re_common
24
24
  # new 20250224
25
25
  password_new = pypi-AgEIcHlwaS5vcmcCJDJkMzJhNWZkLTBkOTktNGE4Yi1iN2Q5LWU0ZjNjMGNiNzhjYwACEVsxLFsicmUtY29tbW9uIl1dAAIsWzIsWyIwYWIzYjIzMy0zZTlmLTQ1ZjAtYWQ5OC03NjJhNDM5NjNiZmUiXV0AAAYg0Pu6BqqupvhX7ad69d8e6XS8BmnLav6x6D9HJ-U3gko
26
26
 
27
- pypi-AgEIcHlwaS5vcmcCJDUzNWEzYmFkLTcyMTUtNDE5OS05MGY4LWZlNTZkMDMzM2U2MQACKlszLCJhMjk4YTg3ZS02YjU2LTQzOTMtYjA5YS1kMzEzMzhjZmNiMDYiXQAABiD00KOVAf9T8AyK7F9K1G9LECXl0MdYa3yyODA7ox5qDg
28
-
27
+ pypi-AgEIcHlwaS5vcmcCJDBlMzc1OTU1LWVkOGItNDVjZS1iMGNhLTQwYmNmYmU3NmViMwACEVsxLFsicmUtY29tbW9uIl1dAAIsWzIsWyIwYWIzYjIzMy0zZTlmLTQ1ZjAtYWQ5OC03NjJhNDM5NjNiZmUiXV0AAAYgisva56cDT5J3a9EBb3paplusibupSRSfoZc_L8PUGDY
29
28
  python setup.py sdist bdist_wheel
30
29
  python -m twine upload dist/*
31
30
 
@@ -35,7 +34,7 @@ long_description = """
35
34
  """
36
35
  setuptools.setup(
37
36
  name="re_common",
38
- version="10.0.3",
37
+ version="10.0.5",
39
38
  author="vic",
40
39
  author_email="xujiang5@163.com",
41
40
  description="a library about all python projects",
File without changes
File without changes