pyxllib 0.3.102__tar.gz → 0.3.104__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 (344) hide show
  1. {pyxllib-0.3.102/pyxllib.egg-info → pyxllib-0.3.104}/PKG-INFO +1 -1
  2. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/data/echarts.py +3 -1
  3. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/data/pglib.py +12 -11
  4. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/data/sqlite.py +39 -3
  5. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/JLineViewer.py +13 -0
  6. pyxllib-0.3.104/pyxllib/ext/drissionlib.py +67 -0
  7. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/kq5034lib.py +9 -14
  8. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/robustprocfile.py +39 -8
  9. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/specialist/filelib.py +43 -10
  10. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/xlsxlib.py +82 -19
  11. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/pupil.py +3 -3
  12. {pyxllib-0.3.102 → pyxllib-0.3.104/pyxllib.egg-info}/PKG-INFO +1 -1
  13. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib.egg-info/SOURCES.txt +1 -0
  14. {pyxllib-0.3.102 → pyxllib-0.3.104}/setup.py +1 -1
  15. {pyxllib-0.3.102 → pyxllib-0.3.104}/LICENSE +0 -0
  16. {pyxllib-0.3.102 → pyxllib-0.3.104}/MANIFEST.in +0 -0
  17. {pyxllib-0.3.102 → pyxllib-0.3.104}/README.md +0 -0
  18. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/__init__.py +0 -0
  19. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/__init__.py +0 -0
  20. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/disjoint.py +0 -0
  21. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/geo.py +0 -0
  22. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/intervals.py +0 -0
  23. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/matcher.py +0 -0
  24. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/newbie.py +0 -0
  25. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/pupil.py +0 -0
  26. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/shapelylib.py +0 -0
  27. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/specialist.py +0 -0
  28. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/stat.py +0 -0
  29. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/treelib.py +0 -0
  30. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/algo/unitlib.py +0 -0
  31. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/cv/__init__.py +0 -0
  32. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/cv/expert.py +0 -0
  33. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/cv/imfile.py +0 -0
  34. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/cv/imhash.py +0 -0
  35. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/cv/pupil.py +0 -0
  36. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/cv/rgbfmt.py +0 -0
  37. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/cv/trackbartools.py +0 -0
  38. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/cv/xlcvlib.py +0 -0
  39. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/cv/xlpillib.py +0 -0
  40. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/data/__init__.py +0 -0
  41. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/data/jsonlib.py +0 -0
  42. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/data/oss.py +0 -0
  43. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/data/sqllib.py +0 -0
  44. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/__init__.py +0 -0
  45. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/autogui/__init__.py +0 -0
  46. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/autogui/autogui.py +0 -0
  47. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/autogui/virtualkey.py +0 -0
  48. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/demolib.py +0 -0
  49. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/old.py +0 -0
  50. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/qt.py +0 -0
  51. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/seleniumlib.py +0 -0
  52. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/tk.py +0 -0
  53. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/unixlib.py +0 -0
  54. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/utools.py +0 -0
  55. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/webhook.py +0 -0
  56. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/win32lib.py +0 -0
  57. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/ext/yuquelib.py +0 -0
  58. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/__init__.py +0 -0
  59. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/docxlib.py +0 -0
  60. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/gitlib.py +0 -0
  61. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/movielib.py +0 -0
  62. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/newbie.py +0 -0
  63. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/onenotelib.py +0 -0
  64. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/packlib/__init__.py +0 -0
  65. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/packlib/zipfile.py +0 -0
  66. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/pdflib.py +0 -0
  67. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/pupil.py +0 -0
  68. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/specialist/__init__.py +0 -0
  69. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/specialist/dirlib.py +0 -0
  70. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/file/specialist/download.py +0 -0
  71. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/__init__.py +0 -0
  72. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/deprecatedlib.py +0 -0
  73. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/ipyexec.py +0 -0
  74. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/multiprocs.py +0 -0
  75. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/newbie.py +0 -0
  76. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/sitepackages.py +0 -0
  77. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/specialist/__init__.py +0 -0
  78. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/specialist/bc.py +0 -0
  79. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/specialist/browser.py +0 -0
  80. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/specialist/common.py +0 -0
  81. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/specialist/datetime.py +0 -0
  82. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/specialist/tictoc.py +0 -0
  83. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/specialist/xllog.py +0 -0
  84. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/prog/xlosenv.py +0 -0
  85. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/stdlib/__init__.py +0 -0
  86. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  87. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  88. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  89. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/__init__.py +0 -0
  90. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/ahocorasick.py +0 -0
  91. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/charclasslib.py +0 -0
  92. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/jiebalib.py +0 -0
  93. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/jscode.py +0 -0
  94. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/latex/__init__.py +0 -0
  95. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/levenshtein.py +0 -0
  96. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/nestenv.py +0 -0
  97. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/newbie.py +0 -0
  98. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/pupil/__init__.py +0 -0
  99. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/pupil/common.py +0 -0
  100. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/pupil/xlalign.py +0 -0
  101. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/pycode.py +0 -0
  102. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/specialist/__init__.py +0 -0
  103. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/specialist/common.py +0 -0
  104. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/specialist/ptag.py +0 -0
  105. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/spellchecker.py +0 -0
  106. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/vbacode.py +0 -0
  107. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/text/xmllib.py +0 -0
  108. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/xl.py +0 -0
  109. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib/xlcv.py +0 -0
  110. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib.egg-info/dependency_links.txt +0 -0
  111. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib.egg-info/requires.txt +3 -3
  112. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxllib.egg-info/top_level.txt +0 -0
  113. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/__init__.py +0 -0
  114. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ai/__init__.py +0 -0
  115. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ai/clientlib.py +0 -0
  116. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ai/specialist.py +0 -0
  117. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ai/torch_app.py +0 -0
  118. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ai/xlpaddle.py +0 -0
  119. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ai/xltorch.py +0 -0
  120. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/__init__.py +0 -0
  121. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/coco.py +0 -0
  122. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/datacls.py +0 -0
  123. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/datasets.py +0 -0
  124. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/gptlib.py +0 -0
  125. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/icdar/__init__.py +0 -0
  126. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/icdar/deteval.py +0 -0
  127. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/icdar/icdar2013.py +0 -0
  128. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/icdar/iou.py +0 -0
  129. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  130. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/imtextline.py +0 -0
  131. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/labelme.py +0 -0
  132. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/removeline.py +0 -0
  133. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/data/specialist.py +0 -0
  134. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/eval/__init__.py +0 -0
  135. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/paddleocr.py +0 -0
  136. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/__init__.py +0 -0
  137. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  138. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/__init__.py +0 -0
  139. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  140. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  141. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  142. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  143. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  144. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  145. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  146. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  147. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  148. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  149. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  150. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  151. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  152. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  153. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  154. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  155. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  156. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  157. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  158. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  159. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  160. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  161. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  162. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/__init__.py +0 -0
  163. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  164. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  165. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  166. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  167. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  168. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  169. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  170. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  171. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  172. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  173. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  174. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  175. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  176. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  177. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  178. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  179. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  180. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  181. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  182. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  183. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  184. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  185. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  186. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  187. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  188. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  189. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  190. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  191. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  192. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  193. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  194. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  195. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  196. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  197. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  198. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  199. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  200. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  201. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  202. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  203. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  204. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  205. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  206. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  207. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  208. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  209. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  210. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  211. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  212. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  213. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  214. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  215. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  216. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  217. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  218. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  219. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  220. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  221. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  222. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  223. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  224. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  225. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  226. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  227. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  228. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  229. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  230. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  231. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  232. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  233. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  234. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  235. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  236. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  237. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  238. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  239. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  240. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  241. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  242. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  243. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  244. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  245. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  246. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  247. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  248. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  249. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  250. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  251. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  252. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  253. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  254. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  255. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/__init__.py +0 -0
  256. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/eval.py +0 -0
  257. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/export_center.py +0 -0
  258. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/export_model.py +0 -0
  259. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  260. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  261. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  262. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  263. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  264. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  265. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  266. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  267. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  268. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  269. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  270. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  271. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/program.py +0 -0
  272. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  273. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/train.py +0 -0
  274. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  275. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  276. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/__init__.py +0 -0
  277. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  278. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  279. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  280. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  281. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  282. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  283. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  284. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  285. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  286. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  287. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  288. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  289. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  290. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  291. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  292. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  293. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  294. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  295. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  296. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  297. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  298. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  299. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  300. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  301. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  302. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  303. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  304. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  305. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  306. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  307. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  308. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  309. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  310. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  311. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  312. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  313. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  314. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  315. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  316. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  317. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  318. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  319. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  320. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/iou.py +0 -0
  321. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/logging.py +0 -0
  322. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/network.py +0 -0
  323. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  324. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/profiler.py +0 -0
  325. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/save_load.py +0 -0
  326. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/stats.py +0 -0
  327. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppocr/utils/utility.py +0 -0
  328. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/__init__.py +0 -0
  329. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/predict_system.py +0 -0
  330. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/__init__.py +0 -0
  331. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  332. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/matcher.py +0 -0
  333. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  334. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  335. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  336. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  337. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  338. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  339. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  340. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  341. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/ppstructure/utility.py +0 -0
  342. {pyxllib-0.3.102 → pyxllib-0.3.104}/pyxlpr/xlai.py +0 -0
  343. {pyxllib-0.3.102 → pyxllib-0.3.104}/requirements.txt +0 -0
  344. {pyxllib-0.3.102 → pyxllib-0.3.104}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.102
3
+ Version: 0.3.104
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -58,7 +58,8 @@ class XlChart(Chart):
58
58
  kwargs['label']['formatter'] = fmt
59
59
 
60
60
  self._append_color(color)
61
- self._append_legend(name, is_selected=True)
61
+ # self._append_legend(name, is_selected=True)
62
+ self._append_legend(name)
62
63
 
63
64
  self.options.get('series').append(
64
65
  {
@@ -192,3 +193,4 @@ def draw_pareto_chart(data, accuracy=0.1, *, title='帕累托累积权重', valu
192
193
  if __name__ == '__main__':
193
194
  with TicToc(__name__):
194
195
  pass
196
+
@@ -49,6 +49,10 @@ from pyxllib.data.sqlite import SqlBase
49
49
 
50
50
  class Connection(psycopg.Connection, SqlBase):
51
51
 
52
+ def __init__(self, *args, **kwargs):
53
+ psycopg.Connection.__init__(self, *args, **kwargs)
54
+ SqlBase.__init__(self, *args, **kwargs)
55
+
52
56
  def __1_库(self):
53
57
  pass
54
58
 
@@ -140,7 +144,7 @@ class Connection(psycopg.Connection, SqlBase):
140
144
  def __5_增删改查(self):
141
145
  pass
142
146
 
143
- def insert_row(self, table_name, cols, *, on_conflict='DO NOTHING', commit=True):
147
+ def insert_row(self, table_name, cols, *, on_conflict='DO NOTHING', commit=False):
144
148
  """ 【增】插入新数据
145
149
 
146
150
  :param dict cols: 用字典表示的要插入的值
@@ -168,11 +172,9 @@ class Connection(psycopg.Connection, SqlBase):
168
172
  on_conflict = f'ON CONFLICT {on_conflict}'
169
173
  query += f' {on_conflict}'
170
174
 
171
- self.execute(query, params)
172
- if commit:
173
- self.commit()
175
+ self.commit_base(commit, query, params)
174
176
 
175
- def insert_rows(self, table_name, keys, ls, *, on_conflict='DO NOTHING', commit=True):
177
+ def insert_rows(self, table_name, keys, ls, *, on_conflict='DO NOTHING', commit=False):
176
178
  """ 【增】插入新数据
177
179
 
178
180
  :param str keys: 要插入的字段名,一个字符串,逗号,隔开属性值
@@ -194,9 +196,7 @@ class Connection(psycopg.Connection, SqlBase):
194
196
  on_conflict = f'ON CONFLICT {on_conflict}'
195
197
  query += f' {on_conflict}'
196
198
 
197
- self.execute(query, params)
198
- if commit:
199
- self.commit()
199
+ self.commit_base(commit, query, params)
200
200
 
201
201
 
202
202
  """
@@ -392,7 +392,7 @@ class XlprDb(Connection):
392
392
  self.insert_row('xlapi', {'input': input, 'output': output,
393
393
  'elapse_ms': elapse_ms, 'update_time': utc_timestamp(8)},
394
394
  on_conflict=on_conflict)
395
-
395
+ self.commit()
396
396
  return self.execute('SELECT id FROM xlapi WHERE input=%s', (input,)).fetchone()[0]
397
397
 
398
398
  def insert_row2xlserver(self, request, xlapi_id=0, **kwargs):
@@ -402,7 +402,7 @@ class XlprDb(Connection):
402
402
  'xlapi_id': xlapi_id}
403
403
  kw.update(kwargs)
404
404
  print(kw) # 监控谁在用api
405
- self.insert_row('xlserver', kw)
405
+ self.insert_row('xlserver', kw, commit=True)
406
406
 
407
407
  def __3_host_trace相关可视化(self):
408
408
  """ TODO dbview 改名 host_trace """
@@ -442,7 +442,8 @@ class XlprDb(Connection):
442
442
 
443
443
  if status:
444
444
  self.insert_row('host_trace',
445
- {'host_name': host_name, 'status': status, 'update_time': utc_timestamp(8)})
445
+ {'host_name': host_name, 'status': status, 'update_time': utc_timestamp(8)},
446
+ commit=True)
446
447
  print()
447
448
 
448
449
  def _get_host_trace_total(self, mode, title, yaxis_name, date_trunc, recent, host_attr):
@@ -8,6 +8,7 @@ import json
8
8
  import re
9
9
  import sqlite3
10
10
  import warnings
11
+ from collections import defaultdict
11
12
 
12
13
  import pandas as pd
13
14
 
@@ -17,6 +18,9 @@ warnings.filterwarnings('ignore', message="pandas only support SQLAlchemy connec
17
18
  class SqlBase:
18
19
  """ Sql语法通用的功能 """
19
20
 
21
+ def __init__(self, *args, **kwargs):
22
+ self._commit_cache = defaultdict(list)
23
+
20
24
  def __1_库(self):
21
25
  pass
22
26
 
@@ -84,6 +88,12 @@ class SqlBase:
84
88
  cols = ','.join(map(str, cols))
85
89
  self.execute(f'CREATE INDEX {index_name} ON {table_name}({cols})')
86
90
 
91
+ def create_index2(self, table_name, cols):
92
+ """ 创建一个简单的索引,索引名字自动生成 """
93
+ if not isinstance(cols, str):
94
+ cols = ','.join(map(str, cols))
95
+ self.execute(f'CREATE INDEX idx_{table_name}_{cols.replace(",", "_")} ON {table_name}({cols})')
96
+
87
97
  def keep_top_n_rows(self, table_name, num, col_name='id'):
88
98
  """ 只保留一小部分数据,常用来做lite、demo数据示例文件
89
99
 
@@ -155,6 +165,32 @@ class SqlBase:
155
165
  def __5_增删改查(self):
156
166
  pass
157
167
 
168
+ def commit_base(self, commit_type, query, params=None):
169
+ """
170
+ :param commit_type:
171
+ -1,先真正缓存在本地
172
+ False,传统的事务机制,虽然不会更新数据,但每一条依然会连接数据库,其实速度回挺慢的
173
+ True,传统的事务机制,但每条都作为独立事务,直接更新了
174
+ """
175
+ if commit_type == -1:
176
+ self._commit_cache[query].append(params)
177
+ elif commit_type is False:
178
+ self.execute(query, params)
179
+ elif commit_type is True:
180
+ self.execute(query, params)
181
+ self.commit()
182
+
183
+ def commit_all(self):
184
+ if not self._commit_cache:
185
+ self.commit()
186
+ return
187
+
188
+ for query, params in self._commit_cache.items():
189
+ cur = self.cursor()
190
+ cur.executemany(query, params)
191
+ cur.close()
192
+ self.commit()
193
+
158
194
  def update_row(self, table_name, cols, where, *, commit=False):
159
195
  """ 【改】更新数据
160
196
 
@@ -170,9 +206,9 @@ class SqlBase:
170
206
  kvs = ','.join([f'{k}=%s' for k in cols.keys()])
171
207
  ops = ' AND '.join([f'{k}=%s' for k in where.keys()])
172
208
  vals = list(cols.values()) + list(where.values())
173
- self.execute(f'UPDATE {table_name} SET {kvs} WHERE {ops}', self.cvt_types(vals))
174
- if commit:
175
- self.commit()
209
+ self.commit_base(commit,
210
+ f'UPDATE {table_name} SET {kvs} WHERE {ops}',
211
+ self.cvt_types(vals))
176
212
 
177
213
  def select_col(self, table_name, col):
178
214
  """ 获得一列数据,常使用的功能,所以做了一个封装
@@ -390,9 +390,22 @@ class JLineViewer(QMainWindow):
390
390
  if parent is None:
391
391
  parent = QStandardItemModel()
392
392
  parent.setHorizontalHeaderLabels(['Key', 'Value'])
393
+
394
+ # if isinstance(data, dict):
395
+ # for key, value in data.items():
396
+ # self.dataToModel(key, value, parent)
397
+
398
+ # 判断数据类型,并相应处理
393
399
  if isinstance(data, dict):
394
400
  for key, value in data.items():
395
401
  self.dataToModel(key, value, parent)
402
+ elif isinstance(data, list):
403
+ # 处理列表:创建一个无key的父项,将列表元素作为子项添加
404
+ self.dataToModel("List", data, parent)
405
+ else:
406
+ # 处理基本数据类型:创建一个单独的条目
407
+ self.dataToModel("Value", data, parent)
408
+
396
409
  return parent
397
410
 
398
411
  def dataToModel(self, key, value, parent):
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # @Author : 陈坤泽
4
+ # @Email : 877362867@qq.com
5
+ # @Date : 2024/04/12
6
+
7
+ from pyxllib.prog.pupil import check_install_package
8
+
9
+ check_install_package('DrissionPage')
10
+
11
+ import re
12
+ from urllib.parse import unquote
13
+
14
+ from DrissionPage import ChromiumPage
15
+
16
+
17
+ def get_latest_not_dev_tab(page=None):
18
+ """ 开发工具本身也会算一个tab,这个函数返回最新的一个不是开发工具的tab """
19
+ if page is None:
20
+ page = ChromiumPage()
21
+ tabs = page.get_tabs()
22
+ for tab in tabs:
23
+ if tab.url.startswith('devtools://'):
24
+ continue
25
+ return tab
26
+
27
+
28
+ def set_input_text(input_ele, text):
29
+ """ 因为input输入框可能原本就自带了内容,为了不重复输入,先清空再输入 """
30
+ input_ele.clear()
31
+ input_ele.input(text)
32
+
33
+
34
+ def get_download_files(page=None):
35
+ """ 获取下载列表
36
+
37
+ :param search_name: 搜索文件名,输入该参数时,只会从上往下找到第一个匹配的文件
38
+ 否则返回一个list结构,存储下载清单里的文件
39
+ :return:
40
+
41
+ todo 默认应该显示是不全的,有时间可以考虑往下滑动继续检索的功能
42
+ """
43
+ if page is None:
44
+ page = ChromiumPage()
45
+
46
+ files = []
47
+ page2 = page.new_tab('chrome://downloads/')
48
+ items = page2('tag:downloads-manager', timeout=1).sr('#mainContainer')('#downloadsList').eles('tag:downloads-item')
49
+ for item in items:
50
+ loc = unquote(item.sr('tag:img').attr('src'))
51
+ file = re.search(r'path=(.+?)(&scale=\d+x)?$', loc).group(1)
52
+
53
+ files.append({
54
+ 'file': file,
55
+ 'url': unquote(item.sr('#url').attr('href'))
56
+ })
57
+
58
+ page2.close()
59
+
60
+ return files
61
+
62
+
63
+ def search_download_file(file_name):
64
+ files = get_download_files()
65
+ for file in files:
66
+ if file_name in file['file']:
67
+ return file
@@ -45,26 +45,19 @@ class Xiaoetong:
45
45
  """
46
46
 
47
47
  def __init__(self):
48
- self.app_id = ''
49
- self.client_id = ''
50
- self.secret_key = ''
51
48
  self.token = ''
52
49
 
53
50
  def login(self, app_id, client_id, secret_key):
54
51
  """ 登录,获取token
55
52
  """
56
- self.app_id = app_id
57
- self.client_id = client_id
58
- self.secret_key = secret_key
59
-
60
53
  # 启用缓存
61
- requests_cache.install_cache('access_token_cache', expire_after=600) # 设置缓存过期时间xx(单位:秒)
54
+ # requests_cache.install_cache('access_token_cache', expire_after=None) # 设置缓存过期时间xx(单位:秒)
62
55
  # 接口地址
63
56
  url = "https://api.xiaoe-tech.com/token"
64
57
  params = {
65
- "app_id": self.app_id,
66
- "client_id": self.client_id,
67
- "secret_key": self.secret_key,
58
+ "app_id": app_id,
59
+ "client_id": client_id,
60
+ "secret_key": secret_key,
68
61
  "grant_type": "client_credential"
69
62
  }
70
63
  response = requests.get(url, params=params)
@@ -77,7 +70,8 @@ class Xiaoetong:
77
70
  raise Exception("Error getting access token: {}".format(result['msg']))
78
71
  else:
79
72
  raise Exception("HTTP request failed with status code {}".format(response.status_code))
80
-
73
+ # return result['data']['access_token']
74
+
81
75
  def get_alive_user_list(self, resource_id, page_size=100):
82
76
  """ 获取直播间用户
83
77
  """
@@ -966,7 +960,8 @@ class 网课考勤2(网课考勤):
966
960
  self.xe.login(self.app_id,
967
961
  self.client_id,
968
962
  self.secret_key) # 获取了token
969
-
963
+
964
+ return self.xe.token
970
965
  # 依据课程链接,获取资源id(与课次)
971
966
  def 获取课次与资源id(self):
972
967
  课程链接 = self.课程链接[1:]
@@ -1074,7 +1069,7 @@ class 网课考勤2(网课考勤):
1074
1069
  self.获取打卡参与用户(activity_id, self.root / "数据表" / path)
1075
1070
 
1076
1071
 
1077
- class KqDb(Connection):
1072
+ class OldKqDb(Connection):
1078
1073
  """ 五一身心行修考勤工具 """
1079
1074
 
1080
1075
  def __init__(self, dbfile='5034.db', wbpath='考勤.xlsx', *args, **kwargs):
@@ -107,7 +107,7 @@ def process_dir_base(file_func, dir_path, correct_tag, error_tag,
107
107
 
108
108
  files = list(dir_path.rglob(pattern))
109
109
  for idx, file in enumerate(files, start=1):
110
- tprint(f'处理第{idx}/{len(files)}个文件: {file.name} ==> {correct_tag}')
110
+ tprint(f'处理完第{idx}/{len(files)}个文件: {file.name} ==> {correct_tag}')
111
111
  process_file_base(file_func, file, correct_tag, error_tag,
112
112
  correct_dir=correct_dir, error_dir=error_dir, reset=reset,
113
113
  **kwargs)
@@ -281,7 +281,14 @@ def process_single_file(root,
281
281
  if_exists='skip',
282
282
  group_func=None,
283
283
  batch_size=2000,
284
- debug=False):
284
+ debug=False,
285
+ show_tqdm=False):
286
+ def finished():
287
+ if total:
288
+ tprint(f'处理第{cur_idx}/{total}个文件:{infile.name} ==> {tag}')
289
+ else:
290
+ tprint(f'处理文件:{infile.name} ==> {tag}')
291
+
285
292
  # 1 缓存路径
286
293
  srcdir = XlPath(root)
287
294
  infile = XlPath.init(infile, root=srcdir)
@@ -309,6 +316,7 @@ def process_single_file(root,
309
316
 
310
317
  if check_files:
311
318
  if if_exists == 'skip':
319
+ finished()
312
320
  return
313
321
  elif if_exists == 'overwrite':
314
322
  for f in check_files:
@@ -316,6 +324,7 @@ def process_single_file(root,
316
324
  elif if_exists == 'error':
317
325
  raise FileExistsError(f'目标文件已存在:{check_files}')
318
326
  else:
327
+ finished()
319
328
  return
320
329
 
321
330
  # 3 处理数据
@@ -326,7 +335,7 @@ def process_single_file(root,
326
335
  if debug: # 如果开启调试模式,则单独分错误文件
327
336
  errcgf = dstcgf
328
337
 
329
- for line in tqdm(infile.yield_line(), disable=total):
338
+ for line in tqdm(infile.yield_line(), desc=f'{infile.name} ==> {tag}', disable=not show_tqdm):
330
339
  # todo 出错的数据,应该添加错误信息,也存成一个新的jsonl格式
331
340
  row = row_func(line)
332
341
  if row and (not isinstance(row, dict) or row.get('status', 'ok') == 'ok'):
@@ -339,10 +348,7 @@ def process_single_file(root,
339
348
 
340
349
  dstcgf.save_all()
341
350
  errcgf.save_all()
342
- if total:
343
- tprint(f'处理第{cur_idx}/{total}个文件:{infile.name} ==> {tag}')
344
- else:
345
- tprint(f'处理文件:{infile.name} ==> {tag}')
351
+ finished()
346
352
 
347
353
 
348
354
  class StructureAnalyzer:
@@ -418,6 +424,30 @@ class StructureAnalyzer:
418
424
 
419
425
  return res
420
426
 
427
+ @classmethod
428
+ def compare_keys(cls, items):
429
+ """ 对从 get_items_structures 获得的数据,对比structure的覆盖情况 """
430
+ import pandas as pd
431
+ from pyxllib.algo.stat import custom_fillna
432
+
433
+ ls = []
434
+ for x in items:
435
+ row = {}
436
+ row['__depth'] = x['depth']
437
+ row['__count'] = x['count']
438
+ if isinstance(x['structure'], dict):
439
+ row.update(x['structure'])
440
+ elif isinstance(x['structure'], list):
441
+ row.update({f'[{k}]': v for k, v in enumerate(x['structure'])})
442
+ ls.append(row)
443
+
444
+ df = pd.DataFrame.from_dict(ls)
445
+ # 筛选df,depth中没有'-'
446
+ df = df[df['__depth'].apply(lambda x: '-' not in x)]
447
+ df = custom_fillna(df).T
448
+
449
+ return df
450
+
421
451
 
422
452
  def process_batch_files(srcdir,
423
453
  dsttag,
@@ -460,7 +490,8 @@ def process_batch_files(srcdir,
460
490
  if_exists=if_exists,
461
491
  group_func=group_func,
462
492
  batch_size=batch_size,
463
- debug=debug)
493
+ debug=debug,
494
+ show_tqdm=processes_num == 1)
464
495
  tasks.append(task)
465
496
 
466
497
  Parallel(n_jobs=processes_num, backend=backend)(tasks)
@@ -1140,12 +1140,12 @@ class XlPath(type(pathlib.Path())):
1140
1140
  f = open(self, 'r', encoding=encoding)
1141
1141
  return chunked(f, batch_size)
1142
1142
 
1143
- def write_text(self, data, encoding='utf8', errors=None, newline=None):
1144
- with open(self, 'w', encoding=encoding, errors=errors, newline=newline) as f:
1143
+ def write_text(self, data, encoding='utf8', mode='w', errors=None, newline=None):
1144
+ with open(self, mode, encoding=encoding, errors=errors, newline=newline) as f:
1145
1145
  return f.write(data)
1146
1146
 
1147
- def write_text_unix(self, data, encoding='utf8', errors=None, newline='\n'):
1148
- with open(self, 'w', encoding=encoding, errors=errors, newline=newline) as f:
1147
+ def write_text_unix(self, data, encoding='utf8', mode='w', errors=None, newline='\n'):
1148
+ with open(self, mode, encoding=encoding, errors=errors, newline=newline) as f:
1149
1149
  return f.write(data)
1150
1150
 
1151
1151
  def read_pkl(self):
@@ -1214,10 +1214,15 @@ class XlPath(type(pathlib.Path())):
1214
1214
  else:
1215
1215
  return data
1216
1216
 
1217
- def write_jsonl(self, list_data, ensure_ascii=False, default=None):
1217
+ def write_jsonl(self, list_data, ensure_ascii=False, default=None, mode='w'):
1218
1218
  """ 由于这种格式主要是跟商汤这边对接,就尽量跟它们的格式进行兼容 """
1219
1219
  content = '\n'.join([json.dumps(x, ensure_ascii=ensure_ascii, default=default) for x in list_data])
1220
- self.write_text_unix(content + '\n')
1220
+ self.write_text_unix(content + '\n', mode=mode)
1221
+
1222
+ def add_json_line(self, data, ensure_ascii=False, default=None, mode='a'):
1223
+ """ 在文件末尾添加一行JSON数据 """
1224
+ content = json.dumps(data, ensure_ascii=ensure_ascii, default=default)
1225
+ self.write_text_unix(content + '\n', mode=mode)
1221
1226
 
1222
1227
  def read_csv(self, encoding='utf8', *, errors='strict', return_mode: bool = False,
1223
1228
  delimiter=',', quotechar='"', **kwargs):
@@ -1437,10 +1442,6 @@ class XlPath(type(pathlib.Path())):
1437
1442
  shutil.copytree(self, dst)
1438
1443
 
1439
1444
  def move(self, dst, if_exists=None):
1440
- return self.rename2(dst, if_exists)
1441
-
1442
- def rename2(self, dst, if_exists=None):
1443
- """ 相比原版的rename,搞了更多骚操作,但性能也会略微下降,所以重写一个功能名 """
1444
1445
  if not self.exists():
1445
1446
  return self
1446
1447
 
@@ -1456,6 +1457,34 @@ class XlPath(type(pathlib.Path())):
1456
1457
  self.rename(dst)
1457
1458
  return dst
1458
1459
 
1460
+ def rename2(self, new_name, if_exists=None):
1461
+ """ 相比原版的rename,搞了更多骚操作,但性能也会略微下降,所以重写一个功能名
1462
+
1463
+ 240416周二12:49,这个接口将真的只做重命名,不做移动!所以将会不再支持dst中出现"/"路径配置
1464
+ """
1465
+ if not self.exists():
1466
+ return self
1467
+
1468
+ if '/' in new_name:
1469
+ raise ValueError(f'rename2只能做重命名操作,目标路径中不能包含"/"')
1470
+ elif '\\' in new_name:
1471
+ raise ValueError(f'rename2只能做重命名操作,目标路径中不能包含"\\"')
1472
+
1473
+ if self.name == new_name: # 没有修改名称,跟原来相同
1474
+ return self
1475
+
1476
+ dst = self.parent / new_name
1477
+ if self == dst:
1478
+ # 同一个文件,可能是调整了大小写名称
1479
+ if self.as_posix() != dst.as_posix():
1480
+ tmp = self.tempfile(dir=self.parent) # self不一定是file,也可能是dir,但这个名称通用
1481
+ self.rename(tmp)
1482
+ self.delete()
1483
+ tmp.rename(dst)
1484
+ elif dst.exist_preprcs(if_exists):
1485
+ self.rename(dst)
1486
+ return dst
1487
+
1459
1488
  def delete(self):
1460
1489
  if self.is_file():
1461
1490
  os.remove(self)
@@ -1621,6 +1650,10 @@ class XlPath(type(pathlib.Path())):
1621
1650
 
1622
1651
  ext = '.' + t.extension
1623
1652
  ext0 = file_path.suffix
1653
+ if ext == ext0:
1654
+ continue
1655
+ elif ext == '.xls' and ext0 == '.et':
1656
+ continue
1624
1657
 
1625
1658
  if ext0 in ('.docx', '.xlsx', '.pptx', '.xlsm'):
1626
1659
  ext0 = '.zip'