pyxllib 0.3.147__tar.gz → 0.3.149__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 (365) hide show
  1. {pyxllib-0.3.147/pyxllib.egg-info → pyxllib-0.3.149}/PKG-INFO +17 -17
  2. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/autogui/uiautolib.py +1 -0
  3. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/autogui/wechat.py +31 -8
  4. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/autogui/wechat_msg.py +2 -0
  5. pyxllib-0.3.149/pyxllib/ext/wpsapi.py +398 -0
  6. pyxllib-0.3.149/pyxllib/prog/filelock.py +42 -0
  7. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/multiprogs.py +1 -1
  8. {pyxllib-0.3.147 → pyxllib-0.3.149/pyxllib.egg-info}/PKG-INFO +17 -17
  9. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib.egg-info/SOURCES.txt +1 -0
  10. {pyxllib-0.3.147 → pyxllib-0.3.149}/setup.py +1 -1
  11. pyxllib-0.3.147/pyxllib/prog/filelock.py +0 -141
  12. {pyxllib-0.3.147 → pyxllib-0.3.149}/LICENSE +0 -0
  13. {pyxllib-0.3.147 → pyxllib-0.3.149}/MANIFEST.in +0 -0
  14. {pyxllib-0.3.147 → pyxllib-0.3.149}/README.md +0 -0
  15. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/__init__.py +0 -0
  16. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/__init__.py +0 -0
  17. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/disjoint.py +0 -0
  18. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/geo.py +0 -0
  19. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/intervals.py +0 -0
  20. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/matcher.py +0 -0
  21. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/newbie.py +0 -0
  22. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/pupil.py +0 -0
  23. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/shapelylib.py +0 -0
  24. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/specialist.py +0 -0
  25. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/stat.py +0 -0
  26. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/treelib.py +0 -0
  27. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/algo/unitlib.py +0 -0
  28. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/autogui/__init__.py +0 -0
  29. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/autogui/activewin.py +0 -0
  30. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/autogui/all.py +0 -0
  31. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/autogui/autogui.py +0 -0
  32. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/autogui/virtualkey.py +0 -0
  33. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/cv/__init__.py +0 -0
  34. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/cv/expert.py +0 -0
  35. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/cv/imfile.py +0 -0
  36. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/cv/imhash.py +0 -0
  37. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/cv/pupil.py +0 -0
  38. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/cv/rgbfmt.py +0 -0
  39. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/cv/trackbartools.py +0 -0
  40. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/cv/xlcvlib.py +0 -0
  41. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/cv/xlpillib.py +0 -0
  42. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/data/__init__.py +0 -0
  43. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/data/echarts.py +0 -0
  44. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/data/jsonlib.py +0 -0
  45. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/data/oss.py +0 -0
  46. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/data/pglib.py +0 -0
  47. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/data/sqlite.py +0 -0
  48. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/data/sqllib.py +0 -0
  49. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/JLineViewer.py +0 -0
  50. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/__init__.py +0 -0
  51. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/demolib.py +0 -0
  52. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/drissionlib.py +0 -0
  53. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/kq5034lib.py +0 -0
  54. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/old.py +0 -0
  55. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/qt.py +0 -0
  56. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/robustprocfile.py +0 -0
  57. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/seleniumlib.py +0 -0
  58. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/tk.py +0 -0
  59. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/unixlib.py +0 -0
  60. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/utools.py +0 -0
  61. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/webhook.py +0 -0
  62. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/win32lib.py +0 -0
  63. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/ext/yuquelib.py +0 -0
  64. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/__init__.py +0 -0
  65. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/docxlib.py +0 -0
  66. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/gitlib.py +0 -0
  67. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/libreoffice.py +0 -0
  68. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/movielib.py +0 -0
  69. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/newbie.py +0 -0
  70. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/onenotelib.py +0 -0
  71. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/packlib/__init__.py +0 -0
  72. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/packlib/zipfile.py +0 -0
  73. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/pdflib.py +0 -0
  74. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/pupil.py +0 -0
  75. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/specialist/__init__.py +0 -0
  76. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/specialist/dirlib.py +0 -0
  77. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/specialist/download.py +0 -0
  78. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/specialist/filelib.py +0 -0
  79. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/xlsxlib.py +0 -0
  80. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/file/xlsyncfile.py +0 -0
  81. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/__init__.py +0 -0
  82. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/cachetools.py +0 -0
  83. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/deprecatedlib.py +0 -0
  84. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/ipyexec.py +0 -0
  85. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/newbie.py +0 -0
  86. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/pupil.py +0 -0
  87. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/sitepackages.py +0 -0
  88. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/specialist/__init__.py +0 -0
  89. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/specialist/bc.py +0 -0
  90. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/specialist/browser.py +0 -0
  91. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/specialist/common.py +0 -0
  92. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/specialist/datetime.py +0 -0
  93. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/specialist/tictoc.py +0 -0
  94. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/specialist/xllog.py +0 -0
  95. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/prog/xlosenv.py +0 -0
  96. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/stdlib/__init__.py +0 -0
  97. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  98. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  99. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  100. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/__init__.py +0 -0
  101. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/ahocorasick.py +0 -0
  102. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/charclasslib.py +0 -0
  103. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/jiebalib.py +0 -0
  104. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/jinjalib.py +0 -0
  105. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/jscode.py +0 -0
  106. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/latex/__init__.py +0 -0
  107. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/levenshtein.py +0 -0
  108. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/nestenv.py +0 -0
  109. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/newbie.py +0 -0
  110. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/pupil/__init__.py +0 -0
  111. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/pupil/common.py +0 -0
  112. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/pupil/xlalign.py +0 -0
  113. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/pycode.py +0 -0
  114. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/specialist/__init__.py +0 -0
  115. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/specialist/common.py +0 -0
  116. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/specialist/ptag.py +0 -0
  117. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/spellchecker.py +0 -0
  118. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/templates/echart_base.html +0 -0
  119. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/templates/highlight_code.html +0 -0
  120. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/templates/latex_editor.html +0 -0
  121. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/vbacode.py +0 -0
  122. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/text/xmllib.py +0 -0
  123. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/xl.py +0 -0
  124. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib/xlcv.py +0 -0
  125. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib.egg-info/dependency_links.txt +0 -0
  126. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib.egg-info/requires.txt +16 -16
  127. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxllib.egg-info/top_level.txt +0 -0
  128. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/__init__.py +0 -0
  129. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ai/__init__.py +0 -0
  130. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ai/clientlib.py +0 -0
  131. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ai/specialist.py +0 -0
  132. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ai/torch_app.py +0 -0
  133. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ai/xlpaddle.py +0 -0
  134. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ai/xltorch.py +0 -0
  135. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/__init__.py +0 -0
  136. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/coco.py +0 -0
  137. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/datacls.py +0 -0
  138. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/datasets.py +0 -0
  139. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/gptlib.py +0 -0
  140. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/icdar/__init__.py +0 -0
  141. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/icdar/deteval.py +0 -0
  142. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/icdar/icdar2013.py +0 -0
  143. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/icdar/iou.py +0 -0
  144. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  145. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/imtextline.py +0 -0
  146. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/labelme.py +0 -0
  147. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/removeline.py +0 -0
  148. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/specialist.py +0 -0
  149. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/data/tiktokenlib.py +0 -0
  150. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/eval/__init__.py +0 -0
  151. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/openai2/__init__.py +0 -0
  152. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/openai2/_core/chat.py +0 -0
  153. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
  154. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/openai2/_core/group_chat.py +0 -0
  155. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/openai2/openai2.py +0 -0
  156. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/paddleocr.py +0 -0
  157. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/__init__.py +0 -0
  158. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  159. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/__init__.py +0 -0
  160. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  161. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  162. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  163. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  164. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  165. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  166. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  167. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  168. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  169. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  170. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  171. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  172. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  173. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  174. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  175. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  176. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  177. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  178. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  179. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  180. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  181. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  182. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  183. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/__init__.py +0 -0
  184. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  185. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  186. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  187. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  188. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  189. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  190. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  191. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  192. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  193. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  194. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  195. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  196. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  197. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  198. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  199. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  200. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  201. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  202. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  203. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  204. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  205. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  206. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  207. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  208. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  209. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  210. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  211. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  212. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  213. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  214. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  215. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  216. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  217. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  218. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  219. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  220. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  221. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  222. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  223. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  224. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  225. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  226. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  227. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  228. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  229. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  230. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  231. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  232. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  233. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  234. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  235. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  236. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  237. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  238. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  239. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  240. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  241. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  242. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  243. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  244. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  245. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  246. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  247. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  248. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  249. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  250. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  251. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  252. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  253. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  254. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  255. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  256. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  257. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  258. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  259. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  260. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  261. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  262. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  263. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  264. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  265. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  266. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  267. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  268. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  269. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  270. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  271. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  272. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  273. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  274. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  275. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  276. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/__init__.py +0 -0
  277. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/eval.py +0 -0
  278. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/export_center.py +0 -0
  279. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/export_model.py +0 -0
  280. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  281. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  282. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  283. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  284. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  285. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  286. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  287. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  288. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  289. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  290. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  291. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  292. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/program.py +0 -0
  293. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  294. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/train.py +0 -0
  295. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  296. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  297. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/__init__.py +0 -0
  298. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  299. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  300. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  301. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  302. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  303. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  304. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  305. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  306. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  307. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  308. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  309. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  310. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  311. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  312. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  313. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  314. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  315. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  316. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  317. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  318. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  319. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  320. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  321. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  322. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  323. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  324. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  325. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  326. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  327. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  328. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  329. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  330. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  331. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  332. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  333. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  334. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  335. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  336. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  337. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  338. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  339. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  340. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  341. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/iou.py +0 -0
  342. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/logging.py +0 -0
  343. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/network.py +0 -0
  344. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  345. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/profiler.py +0 -0
  346. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/save_load.py +0 -0
  347. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/stats.py +0 -0
  348. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppocr/utils/utility.py +0 -0
  349. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/__init__.py +0 -0
  350. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/predict_system.py +0 -0
  351. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/__init__.py +0 -0
  352. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  353. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/matcher.py +0 -0
  354. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  355. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  356. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  357. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  358. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  359. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  360. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  361. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  362. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/ppstructure/utility.py +0 -0
  363. {pyxllib-0.3.147 → pyxllib-0.3.149}/pyxlpr/xlai.py +0 -0
  364. {pyxllib-0.3.147 → pyxllib-0.3.149}/requirements.txt +0 -0
  365. {pyxllib-0.3.147 → pyxllib-0.3.149}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.147
3
+ Version: 0.3.149
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -38,33 +38,33 @@ Requires-Dist: Jinja2
38
38
  Requires-Dist: pandas>=0.23.4
39
39
  Requires-Dist: pillow
40
40
  Provides-Extra: xlcv
41
- Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
42
41
  Requires-Dist: pillow; extra == "xlcv"
43
42
  Requires-Dist: opencv-python; extra == "xlcv"
43
+ Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
44
44
  Provides-Extra: xlai
45
- Requires-Dist: pynvml; extra == "xlai"
46
- Requires-Dist: visdom; extra == "xlai"
47
45
  Requires-Dist: pillow; extra == "xlai"
48
- Requires-Dist: opsdroid-get-image-size; extra == "xlai"
49
46
  Requires-Dist: opencv-python; extra == "xlai"
47
+ Requires-Dist: visdom; extra == "xlai"
48
+ Requires-Dist: opsdroid-get-image-size; extra == "xlai"
49
+ Requires-Dist: pynvml; extra == "xlai"
50
50
  Provides-Extra: xlall
51
+ Requires-Dist: pillow; extra == "xlall"
52
+ Requires-Dist: opencv-python; extra == "xlall"
53
+ Requires-Dist: flask-cors; extra == "xlall"
54
+ Requires-Dist: zhconv; extra == "xlall"
55
+ Requires-Dist: sentencepiece; extra == "xlall"
51
56
  Requires-Dist: ujson; extra == "xlall"
52
- Requires-Dist: flask; extra == "xlall"
53
57
  Requires-Dist: html2text; extra == "xlall"
54
- Requires-Dist: zhconv; extra == "xlall"
55
- Requires-Dist: arts; extra == "xlall"
58
+ Requires-Dist: openai2; extra == "xlall"
59
+ Requires-Dist: opsdroid-get-image-size; extra == "xlall"
60
+ Requires-Dist: uvicorn; extra == "xlall"
61
+ Requires-Dist: flask; extra == "xlall"
62
+ Requires-Dist: fastapi; extra == "xlall"
56
63
  Requires-Dist: xlrd; extra == "xlall"
57
- Requires-Dist: flask-cors; extra == "xlall"
64
+ Requires-Dist: arts; extra == "xlall"
58
65
  Requires-Dist: flask-restful; extra == "xlall"
59
- Requires-Dist: flask-wtf; extra == "xlall"
60
- Requires-Dist: fastapi; extra == "xlall"
61
- Requires-Dist: pillow; extra == "xlall"
62
- Requires-Dist: sentencepiece; extra == "xlall"
63
- Requires-Dist: uvicorn; extra == "xlall"
64
66
  Requires-Dist: flask-jwt-extended; extra == "xlall"
65
- Requires-Dist: opsdroid-get-image-size; extra == "xlall"
66
- Requires-Dist: openai2; extra == "xlall"
67
- Requires-Dist: opencv-python; extra == "xlall"
67
+ Requires-Dist: flask-wtf; extra == "xlall"
68
68
 
69
69
  # 1 install
70
70
 
@@ -14,6 +14,7 @@ import textwrap
14
14
  import time
15
15
  from typing import Iterable, Callable, List
16
16
  import subprocess
17
+ import tempfile
17
18
 
18
19
  import psutil
19
20
  import pandas as pd
@@ -10,21 +10,15 @@
10
10
 
11
11
  import time
12
12
  from copy import deepcopy
13
- from typing import Iterable
14
- import os
15
13
  from typing import (Iterable, Callable, List)
16
- import json
17
- import re
18
- import textwrap
14
+ from typing import Optional
19
15
 
20
16
  import uiautomation as auto
21
- from anytree import NodeMixin, RenderTree
22
17
 
23
18
  import win32con
24
19
  import win32gui
25
20
 
26
- from pyxllib.prog.pupil import print2string
27
- from pyxllib.autogui.wechat_msg import msg_parsers
21
+ from pyxllib.prog.filelock import get_autoui_lock
28
22
  from pyxllib.autogui.uiautolib import find_ctrl, UiCtrlNode, copy_files_to_clipboard
29
23
 
30
24
 
@@ -456,6 +450,35 @@ class WeChatMainWnd(UiCtrlNode):
456
450
  time.sleep(1) # 等待发送动作完成
457
451
 
458
452
 
453
+ class WeChatSingletonLock:
454
+ """ 基于 get_autoui_lock 的微信全局唯一单例控制器,确保同一时间仅有一个微信自动化程序在操作 """
455
+
456
+ def __init__(self, lock_timeout: Optional[float] = -1):
457
+ # 初始化全局锁
458
+ self.lock = get_autoui_lock(timeout=lock_timeout)
459
+ self.wechat = WeChatMainWnd()
460
+
461
+ def __enter__(self):
462
+ # 获取锁并激活微信窗口
463
+ self.lock.acquire()
464
+ self.wechat.activate()
465
+ return self.wechat
466
+
467
+ def __exit__(self, exc_type, exc_value, traceback):
468
+ # 释放锁
469
+ self.lock.release()
470
+
471
+
472
+ def wechat_lock_send(user, text=None, files=None, *, timeout=-1):
473
+ """ 使用全局唯一单例锁,确保同一时间仅有一个微信自动化程序在操作 """
474
+ with WeChatSingletonLock(timeout) as we:
475
+ we.set_chat_with(user)
476
+ if text:
477
+ we.send_text(user, text)
478
+ if files:
479
+ we.send_files(files)
480
+
481
+
459
482
  def __4_wx():
460
483
  """ 别人的原版实现 """
461
484
 
@@ -6,6 +6,8 @@
6
6
 
7
7
  """
8
8
  微信 消息框中不同消息结构的解析器 工具
9
+
10
+ todo 这个文件很多值可以写成枚举类型更规范?
9
11
  """
10
12
 
11
13
  import re
@@ -0,0 +1,398 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # @Author : 陈坤泽
4
+ # @Date : 2024/07/31
5
+
6
+ import time
7
+ import json
8
+ from pathlib import Path
9
+ from unittest.mock import MagicMock
10
+ import traceback
11
+ import datetime
12
+ import tempfile
13
+
14
+ import requests
15
+
16
+ from DrissionPage import ChromiumPage
17
+ from DrissionPage._pages.chromium_tab import ChromiumTab
18
+
19
+
20
+ def format_exception(e, mode=3):
21
+ if mode == 1:
22
+ # 仅获取异常类型的名称
23
+ text = ''.join(traceback.format_exception_only(type(e), e)).strip()
24
+ elif mode == 2:
25
+ # 获取异常类型的名称和附加的错误信息
26
+ text = f"{type(e).__name__}: {e}"
27
+ elif mode == 3:
28
+ text = ''.join(traceback.format_exception(type(e), e, e.__traceback__))
29
+ else:
30
+ raise ValueError
31
+ return text
32
+
33
+
34
+ def get_dp_tab(dp_page=None):
35
+ """ 智能获取一个标签页tab
36
+
37
+ :param dp_page:
38
+ 默认None, 返回默认的page,一般就是当前页面
39
+ True, 新建一个page
40
+ str, 新建一个对应url的page
41
+ func(tab), 通过规则筛选tab,返回符合条件的第1个tab,否则新建一个tab
42
+ """
43
+
44
+ if isinstance(dp_page, ChromiumPage):
45
+ return dp_page.latest_tab
46
+ elif isinstance(dp_page, ChromiumTab):
47
+ return dp_page
48
+ elif callable(dp_page):
49
+ page0 = ChromiumPage()
50
+ for tab in page0.get_tabs():
51
+ if dp_page(tab):
52
+ return tab
53
+ return page0.new_tab()
54
+ elif dp_page is True:
55
+ return ChromiumPage().new_tab()
56
+ elif isinstance(dp_page, str):
57
+ return ChromiumPage().new_tab(dp_page)
58
+ else:
59
+ return ChromiumPage().latest_tab
60
+
61
+
62
+ class WpsApi:
63
+ """ 基于wps给的一些基础api,进行了一定的增强封装
64
+
65
+ 官方很多功能都没有提供,所以有些功能都是做了一些"骚操作"的
66
+ 以及对高并发稳定性的考虑等
67
+ """
68
+
69
+ def __init__(self, token, *, name=None, base_url=None, logger=None,
70
+ folder_id=None):
71
+ """
72
+ :param str token: 登录的token
73
+ :param str name: 记一个账号昵称,方便区分,默认会有token后6位
74
+ :param str base_url: 基础url,一般不用改
75
+ :param logger: 日志记录器,可以不输入,默认置空不记录
76
+ :param folder_id: 默认的文件夹id,有些文件操作相关的功能,需要放到指定目录下
77
+ """
78
+ # 这里登录获得的是自己账号的token
79
+ # Get the token from https://solution.wps.cn/weboffice-go-sdk/api/script/token
80
+ self.token = token
81
+ self.name = name or self.token[-6:]
82
+ self.base_url = base_url or 'https://solution.wps.cn/weboffice-go-sdk/api'
83
+ self.default_template = 'https://kdocs.cn/l/cjVHm9Zy9jU1' # 空白表格,默认的一个表格模板文件,用于创建新文件、测试等
84
+
85
+ self.logger = logger or MagicMock()
86
+ self._folder_id = folder_id or None
87
+
88
+ def __1_基本请求(self):
89
+ pass
90
+
91
+ def request(self, method, endpoint, data=None, **kwargs):
92
+ headers = {
93
+ 'Authorization': self.token,
94
+ 'Content-Type': 'application/json',
95
+ }
96
+ # 重试机制
97
+ for i in range(5):
98
+ try:
99
+ # 根据 method 动态选择请求方式
100
+ resp = requests.request(method, f"{self.base_url}/{endpoint}", headers=headers,
101
+ data=json.dumps(data), timeout=5, **kwargs)
102
+ return resp.json()
103
+ except Exception as e:
104
+ self.logger.warning(f'wps api {self.name} 请求失败,重试第{i + 1}次,{endpoint},{format_exception(e)}')
105
+ time.sleep(5) # 等待5秒后再重试
106
+ return {'error': 'requests.exceptions.Timeout', 'stack': ''}
107
+
108
+ def post(self, endpoint, data=None, **kwargs):
109
+ headers = {
110
+ 'Authorization': self.token,
111
+ 'Content-Type': 'application/json',
112
+ }
113
+ # 重试机制
114
+ for i in range(5):
115
+ try:
116
+ resp = requests.post(f"{self.base_url}/{endpoint}", headers=headers,
117
+ data=json.dumps(data), timeout=5, **kwargs)
118
+ return resp.json()
119
+ except Exception as e:
120
+ self.logger.warning(f'wps api {self.name} 请求失败,重试第{i + 1}次,{endpoint},{format_exception(e)}')
121
+ time.sleep(5) # 等待5秒后再重试
122
+ return {'error': 'requests.exceptions.Timeout', 'stack': ''}
123
+
124
+ def put(self, endpoint, data=None, **kwargs):
125
+ """ 主要是上传文件用的 """
126
+ headers = { # 注意这个相比post删掉了'Content-Type'
127
+ 'Authorization': self.token,
128
+ }
129
+ # 重试机制
130
+ for i in range(5):
131
+ try:
132
+ # 注意put版本相比post,不仅改了requests.put,还改了data的传输形式
133
+ resp = requests.put(f"{self.base_url}/{endpoint}", headers=headers,
134
+ data=data, timeout=5, **kwargs)
135
+ return resp.json()
136
+ except Exception as e:
137
+ self.logger.warning(f'wps api {self.name} 请求失败,重试第{i + 1}次,{endpoint},{format_exception(e)}')
138
+ time.sleep(5) # 等待5秒后再重试
139
+ return {'error': 'requests.exceptions.Timeout', 'stack': ''}
140
+
141
+ def __2_目录操作(self):
142
+ pass
143
+
144
+ def create_folder(self, name):
145
+ """ 创建目录
146
+
147
+ wps未提供
148
+ 检索已创建成功目录id
149
+ 删除指定目录
150
+ """
151
+ resp_json = self.post('files/folder', {'name': name})
152
+ # 创建成功返回:{'folder_id': 316928828842}
153
+ # 如果文件已存在,返回的是:{'msg': '文件名冲突', 'result': 'fileNameConflict'}
154
+ return resp_json['folder_id']
155
+
156
+ def get_folder_id(self, check_folder=True):
157
+ """
158
+ :param bool check_folder: 是否严格校验缓存的目录是否有效,如果无效会自动重置
159
+ 一般情况下为了效率的话,可以不开
160
+ 为了保险稳定性的话,最好打开
161
+ """
162
+ if self._folder_id is None:
163
+ # 1 看本地是否有缓存folder_id
164
+ config_dir = Path(tempfile.gettempdir()) / 'WpsApiPresetFolders'
165
+ config_dir.mkdir(exist_ok=True)
166
+ config_file = config_dir / f'{self.token}.txt'
167
+ if config_file.is_file():
168
+ self._folder_id = config_file.read_text()
169
+
170
+ if check_folder:
171
+ try:
172
+ file_id = self.save_as_file()
173
+ self.delete_file(file_id)
174
+ return self._folder_id
175
+ except ValueError as e: # 目录可能被删掉了,还是要重新创建的
176
+ self._folder_id = None
177
+ else:
178
+ return self._folder_id
179
+
180
+ # 2 获得folder_id,并保存到本地
181
+ for i in range(5):
182
+ try:
183
+ now_tag = datetime.datetime.now().strftime('%Y%m%d_%H%M%S_%f') # 以当前时间点新建一个目录
184
+ self._folder_id = str(self.create_folder(now_tag)) # 虽然是一串数字,但大部分场合都是要当做str形式使用
185
+ config_file.write_text(self._folder_id)
186
+ break
187
+ except KeyError as e:
188
+ self.logger.warning(f'wps api {self.name} 请求失败,重试第{i + 1}次,{format_exception(e)}')
189
+ time.sleep(2)
190
+ else:
191
+ raise ValueError('无法获取folder_id,命名全部冲突的概率极低,请检查是否联网')
192
+
193
+ return self._folder_id
194
+
195
+ @property
196
+ def folder_id(self):
197
+ self.get_folder_id()
198
+ return self._folder_id
199
+
200
+ def __3_基础功能(self):
201
+ pass
202
+
203
+ def save_as_file(self, src_file_id=None, dst_folder_id=None):
204
+ """ 另存文件 """
205
+ # 1
206
+ if src_file_id is None:
207
+ src_file_id = self.default_template.split('/')[-1]
208
+ if dst_folder_id is None:
209
+ dst_folder_id = self.folder_id
210
+
211
+ # 2
212
+ resp_json = self.post('files/save_as', {
213
+ 'source_fileid': str(src_file_id),
214
+ 'target_parentid': int(dst_folder_id),
215
+ })
216
+
217
+ # 3
218
+ if 'new_fileid' in resp_json:
219
+ return resp_json['new_fileid']
220
+ else:
221
+ traceback.print_exc()
222
+ raise ValueError
223
+
224
+ def delete_file(self, file_id):
225
+ """ 这里要输入的是表格的url
226
+
227
+ 删除成功:{'result': 'ok'}
228
+ 如果不存在,返回:{'result': 'fileNotExists', 'msg': '文件(夹)不存在'}
229
+ 注意这个接口其实不支持删除目录,输入目录类id会得到:{'result': 'InvalidArgument', 'msg': '请求参数错误'}
230
+ """
231
+ return self.post('files/delete', {'file_id': str(file_id)})
232
+
233
+ def download(self, source_file_id, target_file_path):
234
+ """ 下载文件到本地
235
+
236
+ 注意使用团队版api上传的文件,如果不是.ksheet而是.xlsx等类型,这里下载会报错:{'result': 'InvalidArgument'}
237
+ """
238
+ resp_json = self.post('files/export_xlsx', {'file_id': str(source_file_id)})
239
+ # 使用requests下载文件
240
+ with requests.get(resp_json['url'], stream=True) as r:
241
+ r.raise_for_status()
242
+ with open(target_file_path, 'wb') as f:
243
+ for chunk in r.iter_content(chunk_size=8192):
244
+ if chunk:
245
+ f.write(chunk)
246
+
247
+ def run_airscript(self, file_id, code, return_mode=None):
248
+ """ 执行as/jsa脚本
249
+
250
+ :param return_mode: 返回格式
251
+ None,提取到的结果
252
+ json: 返回json格式
253
+ """
254
+ reply = self.post('script/evaluate', {
255
+ 'file_id': str(file_id),
256
+ 'code': code,
257
+ })
258
+
259
+ if return_mode == 'json':
260
+ return reply
261
+
262
+ if 'error' in reply:
263
+ raise Exception('evaluate script failed: {}\nstack: {}'.format(reply['error'], reply['stack']))
264
+
265
+ return reply['return']
266
+
267
+
268
+ class WpsGroupApi(WpsApi):
269
+ """ 团队版的api
270
+ """
271
+
272
+ def __init__(self, token, *, group_id=None, group_folder_id=None, **kwargs):
273
+ super().__init__(token, **kwargs)
274
+ self.group_id = group_id
275
+ self.group_folder_id = group_folder_id # 团队版的默认存储目录
276
+
277
+ def upload_file(self, local_file, remote_file_name=None, group_folder_id=None, group_id=None):
278
+ """ 只有团队版才有上传文件的功能,但上传后的文件,和其他文件功能,爬虫的处理,都是兼容的
279
+
280
+ :param local_file: 要上传的本地文件
281
+ :param remote_file_name: 存储在远程的参考文件名
282
+ 注意这个是要写后缀的,否则会成为无法识别类型的文件
283
+ 写xlsx是可以的,但是一般建议是写成 .ksheet,这是官方标准的智能表格格式,目前测试也只有这种格式才支持api再重复下载
284
+ :param group_folder_id: 团队目录id
285
+ :param group_id: 团队id
286
+ """
287
+ # 1 配置参数
288
+ local_file = Path(local_file)
289
+ remote_file_name = remote_file_name or local_file.name
290
+ group_folder_id = group_folder_id or self.group_folder_id
291
+ group_id = group_id or self.group_id
292
+
293
+ # 2 上传文件
294
+ files = {
295
+ "file": (remote_file_name, open(local_file, "rb"))
296
+ }
297
+ data = {
298
+ "group_id": str(group_id),
299
+ "parent_id": str(group_folder_id)
300
+ }
301
+ resp = self.put('files/upload', data, files=files)
302
+ print(resp)
303
+ # {'result': 'InvalidArguments', 'msg': "request Content-Type isn't multipart/form-data"}
304
+ return resp.get('file_id', '')
305
+
306
+
307
+ class WpsWeb:
308
+ """ wps网页版的爬虫 """
309
+
310
+ def __init__(self, dp_page=None):
311
+ """ 初始化及登录 """
312
+ # 1 找是否已经存在页面,确定页面的复用规则,并激活窗口
313
+ if dp_page is None:
314
+ def dp_page(tab):
315
+ if tab.url.startswith('https://www.kdocs.cn'):
316
+ return tab
317
+
318
+ tab = get_dp_tab(dp_page)
319
+ tab.set.activate()
320
+
321
+ # # 2 看是否需要登录
322
+ while not tab.url == 'https://www.kdocs.cn/latest':
323
+ tab.get('https://www.kdocs.cn')
324
+
325
+ self.tab = tab
326
+ self.page = self.tab.page
327
+
328
+ def get_token(self):
329
+ """ 获取token的值
330
+ 需要确保账号提前有登录好
331
+ """
332
+ tab = self.page.new_tab('https://solution.wps.cn/weboffice-go-sdk/api/script/token')
333
+ tab.wait.load_start()
334
+ token = json.loads(tab('tag:pre').inner_html)['token']
335
+ return token
336
+
337
+ def share_file(self, file_id, link_permission=1):
338
+ """ 分享文件
339
+
340
+ :param link_permission:
341
+ 0,关闭分享
342
+ 1,查看权限
343
+ 2,评论权限
344
+ 3,编辑权限
345
+ """
346
+ # 1 访问文档
347
+ if not str(file_id).startswith('https://www.kdocs.cn/l/'):
348
+ file_id = f'https://www.kdocs.cn/l/{file_id}'
349
+ tab = self.tab
350
+ tab.get(file_id)
351
+
352
+ # 2 获得当前文档的权限设置情况
353
+ tab('tag:span@@text()=分享').click()
354
+ for i in range(5):
355
+ eles = tab.eles('tag:div@@class=kso-group-item__after')
356
+ if len(eles) > 2:
357
+ break
358
+ tab.wait(1)
359
+ if '开启后分享' in eles[0].text:
360
+ cur_permission = 0
361
+ else:
362
+ eles[1].click() # 点开按钮触发后,才能获得当前文件权限
363
+ premission_text = eles[1]('tag:span@@class=permission-text').text
364
+ if '可查看' in premission_text:
365
+ cur_permission = 1
366
+ elif '可评论' in premission_text:
367
+ cur_permission = 2
368
+ elif '可编辑' in premission_text:
369
+ cur_permission = 3
370
+ else:
371
+ raise ValueError
372
+
373
+ # 3 是否需要修改权限
374
+ if cur_permission != link_permission:
375
+ if link_permission == 0: # 目标是关闭分享
376
+ eles[0].click()
377
+ else:
378
+ # 其他都是要开启分享,如果当前没启用分享,要先启用
379
+ if cur_permission == 0:
380
+ eles[0].click()
381
+ tab.wait(2)
382
+ eles[1].click() # trick, 这句是写在if里面的,只有这种情况需要重新点链接权限,否则前面已经点开确认过
383
+ dst_text = ['查看', '查看和评论', '编辑'][link_permission - 1]
384
+ eles2 = tab.eles('tag:div@@class=kso-shareV3-menu-item') # 这一组标签比较特别,需要自己遍历处理
385
+ for ele in eles2:
386
+ if ele.text == dst_text:
387
+ # DrissionPage.errors.NoRectError: 该元素没有位置及大小。
388
+ ele.wait.clickable(timeout=10)
389
+ ele.click()
390
+ break
391
+
392
+
393
+ class WpsScriptApi:
394
+ """ wps的"脚本令牌"调用模式 """
395
+
396
+
397
+ if __name__ == '__main__':
398
+ pass
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # @Author : 陈坤泽
4
+ # @Email : 877362867@qq.com
5
+ # @Date : 2024/11/13
6
+
7
+ import os
8
+ import tempfile
9
+ import time
10
+
11
+ from filelock import FileLock, Timeout
12
+
13
+
14
+ class XlFileLock(FileLock):
15
+ def __init__(self, lock_file: str, timeout: float = -1, **kwargs):
16
+ """
17
+ 初始化 XlFileLock 实例,锁文件默认存储在系统临时目录中。
18
+
19
+ :param str filename: 锁文件的文件名(不包含路径)。
20
+ :param float timeout: 获取锁的超时时间(以秒为单位),默认值为 -1 表示无限等待。
21
+ """
22
+ lock_file_path = os.path.join(tempfile.gettempdir(), lock_file)
23
+ super().__init__(lock_file=lock_file_path, timeout=timeout, **kwargs)
24
+
25
+
26
+ def get_autoui_lock(lock_file='autoui.lock', timeout=-1):
27
+ """
28
+ 注意:XlFileLock中的lock_file无法设置默认值,这跟FileLock的底层有关
29
+ 所以无法继承一个AutoUiLock类,但是可以通过这种函数的方式,绕开它特殊的初始化限制
30
+ """
31
+ lock = XlFileLock(lock_file=lock_file, timeout=timeout)
32
+ return lock
33
+
34
+
35
+ if __name__ == "__main__":
36
+ try:
37
+ with get_autoui_lock(timeout=5):
38
+ print("Lock acquired, doing some work...")
39
+ time.sleep(3)
40
+ print("Work done.")
41
+ except Timeout:
42
+ print("Failed to acquire lock within the timeout.")
@@ -799,7 +799,7 @@ class LauncherDashboard:
799
799
 
800
800
  # 处理 port 和 locations
801
801
  port = row['port'] if not pd.isna(row['port']) else "N/A"
802
- locations = ", ".join(row['locations']) if isinstance(row['locations'], list) else "N/A"
802
+ locations = str(row['locations'])
803
803
 
804
804
  # 格式化输出
805
805
  output.append(f"{idx:<5} {name:<15} {pid:<10} {status:<10} {port:<10} {locations:<20} {args_str}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.147
3
+ Version: 0.3.149
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -38,33 +38,33 @@ Requires-Dist: Jinja2
38
38
  Requires-Dist: pandas>=0.23.4
39
39
  Requires-Dist: pillow
40
40
  Provides-Extra: xlcv
41
- Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
42
41
  Requires-Dist: pillow; extra == "xlcv"
43
42
  Requires-Dist: opencv-python; extra == "xlcv"
43
+ Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
44
44
  Provides-Extra: xlai
45
- Requires-Dist: pynvml; extra == "xlai"
46
- Requires-Dist: visdom; extra == "xlai"
47
45
  Requires-Dist: pillow; extra == "xlai"
48
- Requires-Dist: opsdroid-get-image-size; extra == "xlai"
49
46
  Requires-Dist: opencv-python; extra == "xlai"
47
+ Requires-Dist: visdom; extra == "xlai"
48
+ Requires-Dist: opsdroid-get-image-size; extra == "xlai"
49
+ Requires-Dist: pynvml; extra == "xlai"
50
50
  Provides-Extra: xlall
51
+ Requires-Dist: pillow; extra == "xlall"
52
+ Requires-Dist: opencv-python; extra == "xlall"
53
+ Requires-Dist: flask-cors; extra == "xlall"
54
+ Requires-Dist: zhconv; extra == "xlall"
55
+ Requires-Dist: sentencepiece; extra == "xlall"
51
56
  Requires-Dist: ujson; extra == "xlall"
52
- Requires-Dist: flask; extra == "xlall"
53
57
  Requires-Dist: html2text; extra == "xlall"
54
- Requires-Dist: zhconv; extra == "xlall"
55
- Requires-Dist: arts; extra == "xlall"
58
+ Requires-Dist: openai2; extra == "xlall"
59
+ Requires-Dist: opsdroid-get-image-size; extra == "xlall"
60
+ Requires-Dist: uvicorn; extra == "xlall"
61
+ Requires-Dist: flask; extra == "xlall"
62
+ Requires-Dist: fastapi; extra == "xlall"
56
63
  Requires-Dist: xlrd; extra == "xlall"
57
- Requires-Dist: flask-cors; extra == "xlall"
64
+ Requires-Dist: arts; extra == "xlall"
58
65
  Requires-Dist: flask-restful; extra == "xlall"
59
- Requires-Dist: flask-wtf; extra == "xlall"
60
- Requires-Dist: fastapi; extra == "xlall"
61
- Requires-Dist: pillow; extra == "xlall"
62
- Requires-Dist: sentencepiece; extra == "xlall"
63
- Requires-Dist: uvicorn; extra == "xlall"
64
66
  Requires-Dist: flask-jwt-extended; extra == "xlall"
65
- Requires-Dist: opsdroid-get-image-size; extra == "xlall"
66
- Requires-Dist: openai2; extra == "xlall"
67
- Requires-Dist: opencv-python; extra == "xlall"
67
+ Requires-Dist: flask-wtf; extra == "xlall"
68
68
 
69
69
  # 1 install
70
70
 
@@ -61,6 +61,7 @@ pyxllib/ext/unixlib.py
61
61
  pyxllib/ext/utools.py
62
62
  pyxllib/ext/webhook.py
63
63
  pyxllib/ext/win32lib.py
64
+ pyxllib/ext/wpsapi.py
64
65
  pyxllib/ext/yuquelib.py
65
66
  pyxllib/file/__init__.py
66
67
  pyxllib/file/docxlib.py
@@ -50,7 +50,7 @@ _dir = Path(__file__).parent
50
50
 
51
51
  setup(
52
52
  name='pyxllib', # pip 安装时用的名字
53
- version='0.3.147', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
53
+ version='0.3.149', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
54
54
  author='code4101',
55
55
  author_email='877362867@qq.com',
56
56
  url='https://github.com/XLPRUtils/pyxllib',