pyxllib 0.3.28__tar.gz → 0.3.30__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 (330) hide show
  1. {pyxllib-0.3.28/pyxllib.egg-info → pyxllib-0.3.30}/PKG-INFO +1 -1
  2. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/kq5034lib.py +131 -10
  3. pyxllib-0.3.30/pyxllib/ext/seleniumlib.py +63 -0
  4. {pyxllib-0.3.28 → pyxllib-0.3.30/pyxllib.egg-info}/PKG-INFO +1 -1
  5. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib.egg-info/SOURCES.txt +1 -0
  6. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ai/clientlib.py +11 -7
  7. {pyxllib-0.3.28 → pyxllib-0.3.30}/setup.py +1 -1
  8. {pyxllib-0.3.28 → pyxllib-0.3.30}/LICENSE +0 -0
  9. {pyxllib-0.3.28 → pyxllib-0.3.30}/MANIFEST.in +0 -0
  10. {pyxllib-0.3.28 → pyxllib-0.3.30}/README.md +0 -0
  11. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/__init__.py +0 -0
  12. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/__init__.py +0 -0
  13. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/disjoint.py +0 -0
  14. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/geo.py +0 -0
  15. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/intervals.py +0 -0
  16. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/newbie.py +0 -0
  17. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/pupil.py +0 -0
  18. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/shapelylib.py +0 -0
  19. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/specialist.py +0 -0
  20. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/stat.py +0 -0
  21. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/treelib.py +0 -0
  22. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/algo/unitlib.py +0 -0
  23. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/cv/__init__.py +0 -0
  24. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/cv/expert.py +0 -0
  25. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/cv/imfile.py +0 -0
  26. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/cv/imhash.py +0 -0
  27. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/cv/pupil.py +0 -0
  28. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/cv/rgbfmt.py +0 -0
  29. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/cv/trackbartools.py +0 -0
  30. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/cv/xlcvlib.py +0 -0
  31. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/cv/xlpillib.py +0 -0
  32. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/data/__init__.py +0 -0
  33. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/data/echarts.py +0 -0
  34. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/data/oss.py +0 -0
  35. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/data/pglib.py +0 -0
  36. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/data/sqlite.py +0 -0
  37. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/data/sqllib.py +0 -0
  38. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/__init__.py +0 -0
  39. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/autogui/__init__.py +0 -0
  40. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/autogui/autogui.py +0 -0
  41. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/autogui/virtualkey.py +0 -0
  42. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/demolib.py +0 -0
  43. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/old.py +0 -0
  44. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/qt.py +0 -0
  45. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/tk.py +0 -0
  46. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/unixlib.py +0 -0
  47. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/utools.py +0 -0
  48. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/webhook.py +0 -0
  49. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/ext/win32lib.py +0 -0
  50. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/__init__.py +0 -0
  51. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/docxlib.py +0 -0
  52. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/gitlib.py +0 -0
  53. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/movielib.py +0 -0
  54. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/newbie.py +0 -0
  55. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/onenotelib.py +0 -0
  56. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/packlib/__init__.py +0 -0
  57. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/packlib/zipfile.py +0 -0
  58. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/pdflib.py +0 -0
  59. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/pupil.py +0 -0
  60. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/specialist/__init__.py +0 -0
  61. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/specialist/dirlib.py +0 -0
  62. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/specialist/download.py +0 -0
  63. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/specialist/filelib.py +0 -0
  64. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/file/xlsxlib.py +0 -0
  65. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/__init__.py +0 -0
  66. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/deprecatedlib.py +0 -0
  67. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/newbie.py +0 -0
  68. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/pupil.py +0 -0
  69. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/sitepackages.py +0 -0
  70. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/specialist/__init__.py +0 -0
  71. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/specialist/bc.py +0 -0
  72. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/specialist/browser.py +0 -0
  73. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/specialist/common.py +0 -0
  74. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/specialist/datetime.py +0 -0
  75. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/specialist/tictoc.py +0 -0
  76. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/prog/specialist/xllog.py +0 -0
  77. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/stdlib/__init__.py +0 -0
  78. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  79. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  80. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  81. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/__init__.py +0 -0
  82. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/ahocorasick.py +0 -0
  83. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/latex/__init__.py +0 -0
  84. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/levenshtein.py +0 -0
  85. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/nestenv.py +0 -0
  86. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/newbie.py +0 -0
  87. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/pupil/__init__.py +0 -0
  88. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/pupil/common.py +0 -0
  89. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/pupil/xlalign.py +0 -0
  90. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/pycode.py +0 -0
  91. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/specialist/__init__.py +0 -0
  92. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/specialist/common.py +0 -0
  93. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/specialist/ptag.py +0 -0
  94. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/spellchecker.py +0 -0
  95. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/text/xmllib.py +0 -0
  96. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/xl.py +0 -0
  97. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib/xlcv.py +0 -0
  98. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib.egg-info/dependency_links.txt +0 -0
  99. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib.egg-info/requires.txt +5 -5
  100. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxllib.egg-info/top_level.txt +0 -0
  101. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/__init__.py +0 -0
  102. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ai/__init__.py +0 -0
  103. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ai/specialist.py +0 -0
  104. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ai/torch_app.py +0 -0
  105. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ai/xlpaddle.py +0 -0
  106. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ai/xltorch.py +0 -0
  107. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/__init__.py +0 -0
  108. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/coco.py +0 -0
  109. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/datacls.py +0 -0
  110. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/datasets.py +0 -0
  111. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/icdar/__init__.py +0 -0
  112. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/icdar/deteval.py +0 -0
  113. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/icdar/icdar2013.py +0 -0
  114. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/icdar/iou.py +0 -0
  115. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  116. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/imtextline.py +0 -0
  117. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/labelme.py +0 -0
  118. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/removeline.py +0 -0
  119. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/data/specialist.py +0 -0
  120. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/eval/__init__.py +0 -0
  121. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/paddleocr.py +0 -0
  122. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/__init__.py +0 -0
  123. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  124. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/__init__.py +0 -0
  125. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  126. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  127. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  128. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  129. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  130. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  131. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  132. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  133. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  134. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  135. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  136. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  137. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  138. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  139. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  140. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  141. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  142. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  143. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  144. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  145. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  146. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  147. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  148. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/__init__.py +0 -0
  149. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  150. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  151. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  152. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  153. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  154. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  155. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  156. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  157. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  158. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  159. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  160. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  161. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  162. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  163. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  164. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  165. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  166. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  167. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  168. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  169. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  170. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  171. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  172. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  173. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  174. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  175. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  176. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  177. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  178. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  179. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  180. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  181. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  182. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  183. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  184. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  185. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  186. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  187. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  188. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  189. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  190. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  191. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  192. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  193. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  194. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  195. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  196. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  197. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  198. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  199. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  200. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  201. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  202. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  203. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  204. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  205. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  206. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  207. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  208. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  209. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  210. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  211. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  212. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  213. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  214. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  215. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  216. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  217. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  218. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  219. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  220. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  221. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  222. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  223. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  224. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  225. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  226. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  227. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  228. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  229. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  230. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  231. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  232. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  233. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  234. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  235. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  236. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  237. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  238. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  239. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  240. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  241. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/__init__.py +0 -0
  242. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/eval.py +0 -0
  243. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/export_center.py +0 -0
  244. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/export_model.py +0 -0
  245. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  246. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  247. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  248. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  249. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  250. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  251. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  252. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  253. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  254. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  255. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  256. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  257. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/program.py +0 -0
  258. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  259. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/train.py +0 -0
  260. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  261. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  262. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/__init__.py +0 -0
  263. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  264. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  265. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  266. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  267. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  268. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  269. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  270. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  271. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  272. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  273. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  274. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  275. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  276. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  277. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  278. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  279. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  280. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  281. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  282. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  283. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  284. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  285. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  286. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  287. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  288. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  289. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  290. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  291. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  292. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  293. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  294. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  295. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  296. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  297. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  298. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  299. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  300. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  301. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  302. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  303. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  304. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  305. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  306. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/iou.py +0 -0
  307. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/logging.py +0 -0
  308. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/network.py +0 -0
  309. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  310. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/profiler.py +0 -0
  311. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/save_load.py +0 -0
  312. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/stats.py +0 -0
  313. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppocr/utils/utility.py +0 -0
  314. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/__init__.py +0 -0
  315. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/predict_system.py +0 -0
  316. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/__init__.py +0 -0
  317. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  318. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/matcher.py +0 -0
  319. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  320. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  321. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  322. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  323. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  324. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  325. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  326. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  327. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/ppstructure/utility.py +0 -0
  328. {pyxllib-0.3.28 → pyxllib-0.3.30}/pyxlpr/xlai.py +0 -0
  329. {pyxllib-0.3.28 → pyxllib-0.3.30}/requirements.txt +0 -0
  330. {pyxllib-0.3.28 → pyxllib-0.3.30}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.28
3
+ Version: 0.3.30
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -20,6 +20,7 @@ import datetime
20
20
  import math
21
21
  import os
22
22
  import re
23
+ import time
23
24
 
24
25
  import fire
25
26
  import pandas as pd
@@ -28,10 +29,12 @@ from tqdm import tqdm
28
29
  from pyxllib.text.pupil import chinese2digits, grp_chinese_char
29
30
  from pyxllib.file.xlsxlib import openpyxl
30
31
  from pyxllib.file.specialist import XlPath
31
- from pyxllib.prog.specialist import parse_datetime, browser, TicToc
32
+ from pyxllib.prog.specialist import parse_datetime, browser, TicToc, dprint
32
33
  from pyxllib.cv.rgbfmt import RgbFormatter
33
34
  from pyxllib.data.sqlite import Connection
34
35
 
36
+ from pyxllib.ext.seleniumlib import XlChrome
37
+
35
38
 
36
39
  class 网课考勤:
37
40
  def __init__(self, today=None):
@@ -43,9 +46,14 @@ class 网课考勤:
43
46
  self.打卡返款 = {5: 100, 10: 150, 15: 200} # 打卡满5/10/15次的返款额
44
47
  self._init(today)
45
48
 
49
+ self.driver = None # 浏览器脚本
50
+
51
+ def __1_基础数据处理(self):
52
+ pass
53
+
46
54
  def _init(self, today=None):
47
55
  """ 可以手动指定today,适合某些场景下的调试 """
48
- self.课次数 = 21 # 课次一般都是固定21课,不用改
56
+ self.课次数 = len(self.课程链接) - 1 # 课次一般都是固定21课,不用改
49
57
  self.达标时长 = 30 # 单位:分钟。在线听课的时长达到此标准以上,才计算为完成一节课的学习
50
58
  # 一般是3天,因为回放第1、2、3天都会数额,第4天就没数额了,所以第4天返款
51
59
  self.回放返款天数 = sum((x > 0) for x in self.视频返款[1:])
@@ -61,8 +69,10 @@ class 网课考勤:
61
69
  self.开课日期 = date.fromisoformat(self.开课日期)
62
70
  # self.觉观禅课 = (self.开课日期.day == 1)
63
71
  self.觉观禅课 = '觉观' in self.返款标题
64
- self.当天课次 = (self.today - self.开课日期).days + 1
65
- self.结束课次 = self.当天课次 - len(self.视频返款) + 1
72
+ self.当天课次 = (self.today - self.开课日期).days + 1 # 这是用于逻辑运算的,可能超过实际课次数
73
+ self.当天课次2 = min(self.当天课次, self.课次数)
74
+ self.结束课次 = self.当天课次 - len(self.视频返款) + 1 # 这是用于逻辑运算的,可能有负值
75
+ self.结束课次2 = max(0, self.结束课次)
66
76
  self.用户列表 = pd.read_csv(self.get_file('数据表/用户列表导出*.csv'))
67
77
  # 用户列表 = 用户列表[用户列表['账号状态'] == '正常']
68
78
 
@@ -530,14 +540,29 @@ class 网课考勤:
530
540
  # for idx, row in df.iterrows():
531
541
  # data[row['用户id']] = row['打卡次数']
532
542
 
533
- # df = pd.read_excel(files[-1]) # 220804周四08:28,小鹅通更新了模板
534
- df = pd.read_csv(files[-1]) # 221005周三09:19,小鹅通又双叒更新了
535
- # df.columns = df.columns.str.replace('\t', '')
536
- # data = Counter([x.strip() for x in df['用户id']])
543
+ df = None
544
+ try:
545
+ df = pd.read_excel(files[-1]) # 220804周四08:28,小鹅通更新了模板
546
+ except ValueError:
547
+ pass
548
+
549
+ if df is None:
550
+ try:
551
+ df = pd.read_csv(files[-1]) # 221005周三09:19,小鹅通又双叒更新了
552
+ except UnicodeDecodeError:
553
+ pass
554
+
555
+ if df is None:
556
+ raise ValueError
557
+
558
+ df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)
559
+ df.columns = df.columns.map(lambda x: x.strip() if isinstance(x, str) else x)
560
+
561
+ # data = Counter([x for x in df['用户id']])
537
562
  try:
538
563
  data = {row['用户id']: row['打卡次数'] for _, row in df.iterrows()}
539
564
  except KeyError: # 230202周四19:49,另一种实际是xlsx格式,然后再转出csv的情况
540
- data = Counter([row['user_id'].strip() for _, row in df.iterrows()])
565
+ data = Counter([row['user_id'] for _, row in df.iterrows()])
541
566
 
542
567
  # 3 将打卡次数写入表格
543
568
  ls = [] # 返款汇总
@@ -559,7 +584,7 @@ class 网课考勤:
559
584
  if 返款额 <= 0:
560
585
  color = RgbFormatter(255, 0, 0)
561
586
  elif 返款额 < 最高返款额:
562
- color = RgbFormatter(255, 255, 0).light(1-返款额/最高返款额)
587
+ color = RgbFormatter(255, 255, 0).light(1 - 返款额 / 最高返款额)
563
588
  elif 返款额 == 最高返款额: # 最高返款额
564
589
  color = RgbFormatter(0, 255, 0)
565
590
 
@@ -646,6 +671,102 @@ class 网课考勤:
646
671
  def __call__(self, *args, **kwargs):
647
672
  print('程序测试通过,可正常使用')
648
673
 
674
+ def 表格内容对齐(self, ws_name1, ws_name2, col_name):
675
+ wb = self.wb
676
+ wb.merge_sheets_by_keycol([wb[ws_name1], wb[ws_name2]], col_name)
677
+
678
+ # 保存。一般不用重新再加载self.wb、self.ws,因为这里需求本来基本都是要分段重新执行程序的。
679
+ wb.save(self.表格路径)
680
+
681
+ def __2_自动浏览网页(self):
682
+ pass
683
+
684
+ def ensure_driver(self):
685
+ if not self.driver:
686
+ self.driver = XlChrome()
687
+ return self.driver
688
+
689
+ def 登录小鹅通(self, name, passwd):
690
+ # 登录小鹅通
691
+ driver = self.ensure_driver()
692
+ driver.get('https://admin.xiaoe-tech.com/t/login#/acount')
693
+ driver.locate('//*[@id="common_template_mounted_el_container"]'
694
+ '/div/div[1]/div[3]/div/div[4]/div/div[1]/div[1]/div/div[2]/input').send_keys(name)
695
+ driver.locate('//*[@id="common_template_mounted_el_container"]'
696
+ '/div/div[1]/div[3]/div/div[4]/div/div[1]/div[2]/div/div/input').send_keys(passwd)
697
+ driver.click('//*[@id="common_template_mounted_el_container"]/div/div[1]/div[3]/div/div[4]/div/div[2]')
698
+
699
+ # 然后自己手动操作验证码
700
+ # 以及选择"店铺"
701
+
702
+ def 登录微信支付(self):
703
+ driver = self.ensure_driver()
704
+ driver.get('https://pay.weixin.qq.com/index.php/core/home/login')
705
+
706
+ def 下载课次考勤数据(self, 起始课=None, 终止课=None, 文件名前缀=''):
707
+ if 起始课 is None:
708
+ 起始课 = max(1, self.结束课次)
709
+ if 终止课 is None:
710
+ 终止课 = min(self.当天课次, self.课次数)
711
+
712
+ # 1 遍历课程下载表格
713
+ driver = self.driver
714
+ for i in range(起始课, 终止课 + 1):
715
+ print(f'第{i}课', self.课程链接[i])
716
+ driver.get('https://admin.xiaoe-tech.com/t/data_center/index') # 必须要找个过渡页,不然不会更新课程链接
717
+ driver.get(self.课程链接[i])
718
+ driver.locate_text('//*[@id="app"]/div/div/div[1]/div[2]/div[1]/div[2]', f'第{i}课') # 检查页面
719
+
720
+ driver.click('//*[@id="tab-studentTab"]/span') # 直播间用户
721
+ driver.click('//*[@id="pane-studentTab"]/div/div[2]/div[2]/form/div[2]/button[2]/span/span') # 导出列表
722
+ driver.click('//*[@id="data-export-container"]/div/div[2]/div/div[2]/div[2]/button[2]/span/span') # 导出
723
+ time.sleep(1)
724
+
725
+ # 2 下载表格
726
+ # 2.1 等待下载文件生成完毕
727
+ while True:
728
+ driver.get('https://admin.xiaoe-tech.com/t/basic-platform/downloadCenter')
729
+ if '任务撤回' in driver.locate('//*[@id="downloadsCenter"]/div[4]/div/div[4]/div[2]/table/tbody/tr[1]/'
730
+ 'td[9]/div/div/span').text:
731
+ time.sleep(1)
732
+ else:
733
+ break
734
+
735
+ # 2.2 下载表格
736
+ files = []
737
+ for i in range(1, 终止课 - 起始课 + 2):
738
+ driver.click(f'//*[@id="downloadsCenter"]/div[4]/div/div[4]/div[2]/table/tbody/tr[{i}]/'
739
+ f'td[9]/div/div/span[1]')
740
+ file = driver.locate(f'//*[@id="downloadsCenter"]/div[4]/div/div[3]/table/tbody/tr[{i}]/'
741
+ f'td[1]/div/div/div').text + '.csv' # 下载后还会再多一个csv后缀
742
+ files.append(file)
743
+ time.sleep(1)
744
+
745
+ # 2.3 移动表格
746
+ time.sleep(1)
747
+ download_path = XlPath(os.path.join(os.environ['USERPROFILE'], 'Downloads'))
748
+ for file in files:
749
+ src_file = (download_path / file)
750
+ while True:
751
+ if src_file.is_file():
752
+ src_file.move(self.root / '数据表' / (文件名前缀 + file), if_exists='replace')
753
+ break
754
+ else:
755
+ time.sleep(1)
756
+
757
+ def 批量退款(self):
758
+ self.driver.get('https://pay.weixin.qq.com/index.php/xphp/cbatchrefund/batch_refund#/pages/index/index')
759
+
760
+ def 申请单条退款(self, 凭证号, 退款金额=0, 退款原因=''):
761
+ driver = self.ensure_driver()
762
+ driver.get('https://pay.weixin.qq.com/index.php/core/refundapply')
763
+ driver.locate('//*[@id="app"]/div/div[2]/div[2]/div[2]/div/span/input').send_keys(凭证号)
764
+ driver.click('//*[@id="applyRefundBtn"]') # 申请退款
765
+ driver.locate('//*[@id="app"]/div/div[2]/div[2]/div[3]/div[2]/div/div[1]/div/span[1]/input').send_keys(
766
+ str(退款金额))
767
+ driver.locate('//*[@id="textInput"]').send_keys(退款原因)
768
+ # driver.click('//*[@id="commitRefundApplyBtn"]') # 建议手动点"提交申请"
769
+
649
770
 
650
771
  class KqDb(Connection):
651
772
  """ 五一身心行修考勤工具 """
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # @Author : 陈坤泽
4
+ # @Email : 877362867@qq.com
5
+ # @Date : 2023/03/28
6
+
7
+ import time
8
+
9
+ from selenium import webdriver
10
+ from selenium.webdriver.common.by import By
11
+ from selenium.webdriver.support.ui import WebDriverWait
12
+ from selenium.webdriver.support import expected_conditions as EC
13
+ from selenium.common.exceptions import ElementClickInterceptedException, NoSuchWindowException
14
+
15
+
16
+ class element_has_text(object):
17
+ def __init__(self, locator, text):
18
+ self.locator = locator
19
+ self.text = text
20
+
21
+ def __call__(self, driver):
22
+ element = driver.find_element(*self.locator)
23
+ if self.text in element.text:
24
+ return element
25
+ else:
26
+ return False
27
+
28
+
29
+ class XlChrome(webdriver.Chrome):
30
+ def __init__(self, *args, **kwargs):
31
+ super().__init__(*args, **kwargs)
32
+ self.maximize_window()
33
+
34
+ def locate(self, locator, seconds=10):
35
+ """ 定位一个元素 """
36
+ if isinstance(locator, str): # 默认是XPATH格式
37
+ locator = (By.XPATH, locator)
38
+ return WebDriverWait(self, seconds).until(EC.presence_of_element_located(locator))
39
+
40
+ def click(self, locator, seconds=10):
41
+ """ 点击一个元素 """
42
+ if isinstance(locator, str):
43
+ locator = (By.XPATH, locator)
44
+ element = WebDriverWait(self, seconds).until(EC.element_to_be_clickable(locator))
45
+ try:
46
+ element.click()
47
+ except ElementClickInterceptedException:
48
+ # 特殊情况,例如小鹅通下载页面的"下载"按钮没法正常click,要用js脚本去click
49
+ self.execute_script("arguments[0].click();", element)
50
+
51
+ def locate_text(self, locator, text, seconds=10):
52
+ """ 判断指定元素位置是否含有指定文本 """
53
+ if isinstance(locator, str):
54
+ locator = (By.XPATH, locator)
55
+ return WebDriverWait(self, seconds).until(element_has_text(locator, text))
56
+
57
+ def __bool__(self):
58
+ """ 判断driver是否还存在,如果已被手动关闭,这个值会返回False """
59
+ try:
60
+ self.title
61
+ return True
62
+ except NoSuchWindowException:
63
+ return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.28
3
+ Version: 0.3.30
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -42,6 +42,7 @@ pyxllib/ext/demolib.py
42
42
  pyxllib/ext/kq5034lib.py
43
43
  pyxllib/ext/old.py
44
44
  pyxllib/ext/qt.py
45
+ pyxllib/ext/seleniumlib.py
45
46
  pyxllib/ext/tk.py
46
47
  pyxllib/ext/unixlib.py
47
48
  pyxllib/ext/utools.py
@@ -273,7 +273,7 @@ class XlAiClient:
273
273
  self._priu_host = host
274
274
  connent = True
275
275
  break
276
- except requests.exceptions.ConnectionError:
276
+ except (requests.exceptions.ConnectionError, requests.exceptions.ReadTimeout):
277
277
  continue
278
278
 
279
279
  if not connent:
@@ -1042,12 +1042,15 @@ class XlAiClient:
1042
1042
 
1043
1043
  def func(buffer, options):
1044
1044
  image_uri = f'data:image/jpg;base64,' + base64.b64encode(buffer).decode()
1045
- try:
1046
- r = requests.post('https://api.mathpix.com/v3/latex',
1047
- data=json.dumps({'src': image_uri}),
1048
- headers=self._mathpix_header)
1049
- return json.loads(r.text)
1050
- except requests.exceptions.ConnectionError:
1045
+ for i in range(10): # 尝试10次,10次都失败就无语了~
1046
+ try:
1047
+ r = requests.post('https://api.mathpix.com/v3/latex',
1048
+ data=json.dumps({'src': image_uri}),
1049
+ headers=self._mathpix_header)
1050
+ return json.loads(r.text)
1051
+ except requests.exceptions.ConnectionError:
1052
+ pass
1053
+ else:
1051
1054
  return {'latex': '', 'error': 'requests.exceptions.ConnectionError'}
1052
1055
 
1053
1056
  # mathpix的接口没有说限制图片大小,但我还是按照百度的规范处理下更好
@@ -1097,6 +1100,7 @@ class XlAiClient:
1097
1100
  data['options'] = options
1098
1101
  if meta_opts:
1099
1102
  data.update(meta_opts)
1103
+
1100
1104
  # TODO 增加超时timeout=seconds参数?
1101
1105
  r = requests.post(f'{self._priu_host}/api/{mode}', json=data, headers=self._priu_header)
1102
1106
  if r.status_code == 200:
@@ -30,7 +30,7 @@ _dir = Path(__file__).parent
30
30
 
31
31
  setup(
32
32
  name='pyxllib', # pip 安装时用的名字
33
- version='0.3.28', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
33
+ version='0.3.30', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
34
34
  author='code4101',
35
35
  author_email='877362867@qq.com',
36
36
  url='https://github.com/XLPRUtils/pyxllib',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -21,14 +21,14 @@ Jinja2
21
21
  pandas>=0.23.4
22
22
 
23
23
  [xlai]
24
- pillow
25
- opencv-python
26
- visdom
27
- xlcocotools
28
24
  opsdroid-get-image-size
25
+ xlcocotools
26
+ visdom
27
+ opencv-python
29
28
  pynvml
29
+ pillow
30
30
 
31
31
  [xlcv]
32
+ opsdroid-get-image-size
32
33
  opencv-python
33
34
  pillow
34
- opsdroid-get-image-size
File without changes
File without changes
File without changes
File without changes
File without changes