pyxllib 0.3.118__tar.gz → 0.3.120__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.
- {pyxllib-0.3.118/pyxllib.egg-info → pyxllib-0.3.120}/PKG-INFO +1 -1
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/drissionlib.py +67 -8
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/kq5034lib.py +0 -22
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/utools.py +105 -105
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/specialist/filelib.py +24 -11
- {pyxllib-0.3.118 → pyxllib-0.3.120/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.118 → pyxllib-0.3.120}/setup.py +1 -1
- {pyxllib-0.3.118 → pyxllib-0.3.120}/LICENSE +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/MANIFEST.in +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/README.md +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/file/xlsxlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/cachetools.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/pupil.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/scheduler.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/jinjalib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib.egg-info/requires.txt +11 -11
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/requirements.txt +0 -0
- {pyxllib-0.3.118 → pyxllib-0.3.120}/setup.cfg +0 -0
@@ -3,6 +3,7 @@
|
|
3
3
|
# @Author : 陈坤泽
|
4
4
|
# @Email : 877362867@qq.com
|
5
5
|
# @Date : 2024/04/12
|
6
|
+
import time
|
6
7
|
|
7
8
|
from pyxllib.prog.pupil import check_install_package
|
8
9
|
|
@@ -13,10 +14,42 @@ from urllib.parse import unquote
|
|
13
14
|
|
14
15
|
import DrissionPage
|
15
16
|
from DrissionPage import ChromiumPage
|
17
|
+
from DrissionPage._pages.chromium_base import ChromiumBase
|
18
|
+
from DrissionPage._pages.chromium_tab import ChromiumTab
|
16
19
|
from DrissionPage._base.base import BasePage, BaseElement
|
17
20
|
|
18
21
|
from pyxllib.prog.pupil import inject_members
|
19
22
|
from pyxllib.text.pupil import strfind
|
23
|
+
from pyxllib.file.specialist import GetEtag
|
24
|
+
|
25
|
+
|
26
|
+
def get_dp_page(dp_page=None) -> 'XlPage':
|
27
|
+
"""
|
28
|
+
|
29
|
+
:param dp_page:
|
30
|
+
默认None, 返回默认的page,一般就是当前页面
|
31
|
+
True, 新建一个page
|
32
|
+
str, 新建一个对应url的page
|
33
|
+
func(tab), 通过规则筛选tab,返回符合条件的第1个tab,否则新建一个tab
|
34
|
+
"""
|
35
|
+
|
36
|
+
if isinstance(dp_page, ChromiumPage):
|
37
|
+
return dp_page
|
38
|
+
elif isinstance(dp_page, ChromiumTab):
|
39
|
+
return dp_page.page
|
40
|
+
elif callable(dp_page):
|
41
|
+
page0 = ChromiumPage()
|
42
|
+
for tab in page0.get_tabs():
|
43
|
+
if dp_page(tab):
|
44
|
+
return tab.page
|
45
|
+
return page0.new_tab().page
|
46
|
+
elif dp_page is True:
|
47
|
+
return ChromiumPage().new_tab().page
|
48
|
+
elif isinstance(dp_page, str):
|
49
|
+
return ChromiumPage().new_tab(dp_page).page
|
50
|
+
else:
|
51
|
+
return ChromiumPage()
|
52
|
+
|
20
53
|
|
21
54
|
def get_latest_not_dev_tab(page=None):
|
22
55
|
""" 开发工具本身也会算一个tab,这个函数返回最新的一个不是开发工具的tab """
|
@@ -45,7 +78,7 @@ def search_download_file(file_name):
|
|
45
78
|
return file
|
46
79
|
|
47
80
|
|
48
|
-
class
|
81
|
+
class XlChromiumBase(ChromiumBase):
|
49
82
|
def get2(self, url, show_errmsg=False, retry=None, interval=None):
|
50
83
|
"""
|
51
84
|
240418周四21:57,DrissionPage-4.0.4.21 官方自带page.get,有时候会有bug,不会实际刷新url,这里加个代码进行fix
|
@@ -64,7 +97,7 @@ class XlBasePage(BasePage):
|
|
64
97
|
except DrissionPage.errors.ElementLostError:
|
65
98
|
return self
|
66
99
|
|
67
|
-
def get_download_files(self):
|
100
|
+
def get_download_files(self: ChromiumPage):
|
68
101
|
""" 获取下载列表
|
69
102
|
|
70
103
|
:param search_name: 搜索文件名,输入该参数时,只会从上往下找到第一个匹配的文件
|
@@ -90,14 +123,40 @@ class XlBasePage(BasePage):
|
|
90
123
|
|
91
124
|
return files
|
92
125
|
|
126
|
+
def wait_page_not_change(self, interval=3):
|
127
|
+
""" 等待直到页面内容不再变化
|
128
|
+
|
129
|
+
:param interval: 时间间隔,需要判断当前内容和interval秒后的内容,看内容是否欧发生改变
|
130
|
+
"""
|
131
|
+
last_html, last_etag = None, None
|
132
|
+
while True:
|
133
|
+
html = self.html
|
134
|
+
etag = GetEtag.from_text(html)
|
135
|
+
if etag == last_etag:
|
136
|
+
break
|
137
|
+
|
138
|
+
last_html, last_etag = html, etag
|
139
|
+
time.sleep(interval)
|
140
|
+
return last_html
|
141
|
+
|
142
|
+
def action_type(self, ele, text, clear=True):
|
143
|
+
""" 基于action实现的重写入,常用于日期相关操作
|
144
|
+
因为很多日期类组件,直接使用ele.input是不生效的,哪怕看似显示了文本,但其实并没有触发js改动,需要用动作链来实现
|
145
|
+
"""
|
146
|
+
from DrissionPage.common import Keys
|
147
|
+
if clear:
|
148
|
+
self.actions.click(ele).key_down(Keys.CTRL).type('a').key_up(Keys.CTRL).type(text)
|
149
|
+
else:
|
150
|
+
self.actions.click(ele).type(text)
|
151
|
+
|
93
152
|
|
94
|
-
inject_members(
|
153
|
+
inject_members(XlChromiumBase, ChromiumBase)
|
95
154
|
|
96
155
|
|
97
|
-
class
|
98
|
-
|
99
|
-
|
100
|
-
self.input(vals)
|
156
|
+
class XlPage(XlChromiumBase, ChromiumTab, ChromiumPage):
|
157
|
+
""" 只作为一个类型标记,无实质功能。在猴子补丁背景下,让ide能正确跳转函数定义。 """
|
158
|
+
pass
|
101
159
|
|
102
160
|
|
103
|
-
|
161
|
+
def wait_page_not_change(page, interval=3):
|
162
|
+
page.wait_page_not_change(interval)
|
@@ -883,10 +883,6 @@ class 网课考勤:
|
|
883
883
|
# 然后自己手动操作验证码
|
884
884
|
# 以及选择"店铺"
|
885
885
|
|
886
|
-
def 登录微信支付(self):
|
887
|
-
driver = self.ensure_driver()
|
888
|
-
driver.get('https://pay.weixin.qq.com/index.php/core/home/login')
|
889
|
-
|
890
886
|
def 下载课次考勤数据(self, 起始课=None, 终止课=None, 文件名前缀=''):
|
891
887
|
if 起始课 is None:
|
892
888
|
起始课 = max(1, self.结束课次)
|
@@ -941,19 +937,6 @@ class 网课考勤:
|
|
941
937
|
else:
|
942
938
|
time.sleep(1)
|
943
939
|
|
944
|
-
def 批量退款(self):
|
945
|
-
self.driver.get('https://pay.weixin.qq.com/index.php/xphp/cbatchrefund/batch_refund#/pages/index/index')
|
946
|
-
|
947
|
-
def 申请单条退款(self, 凭证号, 退款金额=0, 退款原因=''):
|
948
|
-
driver = self.ensure_driver()
|
949
|
-
driver.get('https://pay.weixin.qq.com/index.php/core/refundapply')
|
950
|
-
driver.locate('//*[@id="app"]/div/div[2]/div[2]/div[2]/div/span/input').send_keys(凭证号)
|
951
|
-
driver.click('//*[@id="applyRefundBtn"]') # 申请退款
|
952
|
-
driver.locate('//*[@id="app"]/div/div[2]/div[2]/div[3]/div[2]/div/div[1]/div/span[1]/input').send_keys(
|
953
|
-
str(退款金额))
|
954
|
-
driver.locate('//*[@id="textInput"]').send_keys(退款原因)
|
955
|
-
# driver.click('//*[@id="commitRefundApplyBtn"]') # 建议手动点"提交申请"
|
956
|
-
|
957
940
|
|
958
941
|
class 网课考勤2(网课考勤):
|
959
942
|
def login_xe(self):
|
@@ -1695,11 +1678,6 @@ def 下载课次考勤数据(课程链接, 检查文本=''):
|
|
1695
1678
|
driver.click('//*[@id="data-export-container"]/div/div[2]/div/div[2]/div[2]/button[2]/span/span') # 导出
|
1696
1679
|
|
1697
1680
|
|
1698
|
-
def 登录微信支付():
|
1699
|
-
driver = get_driver()
|
1700
|
-
driver.get('https://pay.weixin.qq.com/index.php/core/home/login')
|
1701
|
-
|
1702
|
-
|
1703
1681
|
def 聚合读取考勤数据(data_dir, name, judge_minute=30):
|
1704
1682
|
"""
|
1705
1683
|
1、在目录"data_folder"下,找前缀包含name的所有文件
|
@@ -113,6 +113,9 @@ class UtoolsBase:
|
|
113
113
|
|
114
114
|
self.outfmt = self.cmds['outfmt'] if 'outfmt' in self.cmds else outfmt
|
115
115
|
|
116
|
+
|
117
|
+
class UtoolsName(UtoolsBase):
|
118
|
+
|
116
119
|
def check_cmds(self):
|
117
120
|
""" 显示所有参数值 """
|
118
121
|
df = pd.DataFrame.from_records([(k, v) for k, v in self.cmds.items()],
|
@@ -134,110 +137,6 @@ class UtoolsBase:
|
|
134
137
|
f2.write_text(self.cmds['ClipText'] + '\n')
|
135
138
|
bcompare(f1, f2, wait=False)
|
136
139
|
|
137
|
-
|
138
|
-
class UtoolsFile(UtoolsBase):
|
139
|
-
""" 文件相关操作工具 """
|
140
|
-
|
141
|
-
def __init__(self, cmds, *, outfmt='text'):
|
142
|
-
super().__init__(cmds, outfmt=outfmt)
|
143
|
-
|
144
|
-
# 如果是window等模式,补充 MatchedFiles
|
145
|
-
if 'MatchedFiles' in self.cmds:
|
146
|
-
self.paths = [pathlib.Path(f['path']) for f in self.cmds['MatchedFiles']]
|
147
|
-
else:
|
148
|
-
self.paths = [pathlib.Path(os.path.abspath(f)).resolve() for f in os.listdir('../robot')]
|
149
|
-
|
150
|
-
@classmethod
|
151
|
-
def is_image(cls, f):
|
152
|
-
return bool(re.match('jpe?g|png|gif|bmp', f.suffix.lower()[1:]))
|
153
|
-
|
154
|
-
def codefile(self):
|
155
|
-
""" 多用途文件处理器
|
156
|
-
|
157
|
-
核心理念是不设定具体功能,而是让用户在 subinput 自己写需要执行的py代码功能
|
158
|
-
而在subinput,可以用一些特殊的标识符来传参
|
159
|
-
|
160
|
-
以file为例,有4类参数:
|
161
|
-
file,处理当前目录 文件
|
162
|
-
rfile,递归处理所有目录下 文件
|
163
|
-
files,当前目录 所有文件
|
164
|
-
rfiles,递归获取所有目录下 所有文件
|
165
|
-
|
166
|
-
类型上,file可以改为
|
167
|
-
dir,只分析目录
|
168
|
-
path,所有文件和目录
|
169
|
-
|
170
|
-
扩展了一些特殊的类型:
|
171
|
-
imfile,图片文件
|
172
|
-
"""
|
173
|
-
from functools import reduce
|
174
|
-
try:
|
175
|
-
from xlproject.xyz.kzconfig import KzDataSync
|
176
|
-
from pyxlpr.data.labelme import reduce_labelme_jsonfile
|
177
|
-
except ModuleNotFoundError:
|
178
|
-
pass
|
179
|
-
|
180
|
-
tt = TicToc()
|
181
|
-
|
182
|
-
# 1 获得所有标识符
|
183
|
-
# 每个单词前后都有空格,方便定界
|
184
|
-
keywords = filter(lambda x: re.match(r'[a-zA-Z_]+$', x),
|
185
|
-
set(re.findall(r'\.?[a-zA-Z_]+\(?', self.cmds['subinput'])))
|
186
|
-
keywords = ' ' + ' '.join(keywords) + ' '
|
187
|
-
# print('keywords:', keywords)
|
188
|
-
|
189
|
-
# 2 生成一些备用的智能参数
|
190
|
-
# 一级目录下选中的文件
|
191
|
-
paths = self.paths
|
192
|
-
# 用正则判断一些智能参数是否要计算,注意不能只判断files,如果出现file,也是要引用files的
|
193
|
-
files = [XlPath(p) for p in paths if p.is_file()] if re.search(r'files? ', keywords) else []
|
194
|
-
imfiles = [f for f in files if self.is_image(f)] if re.search(r' imfiles? ', keywords) else []
|
195
|
-
# 出现r系列的递归操作,都是要计算出dirs的
|
196
|
-
dirs = [XlPath(p) for p in paths if p.is_dir()] if re.search(r' (dirs?|r[a-zA-Z_]+) ', keywords) else []
|
197
|
-
|
198
|
-
# 递归所有的文件
|
199
|
-
rpaths = reduce(lambda x, y: x + y.select('**/*').subpaths(), [paths] + dirs) \
|
200
|
-
if re.search(r' (r[a-zA-Z_]+) ', keywords) else []
|
201
|
-
rfiles = [XlPath(p) for p in rpaths if p.is_file()] if re.search(r' (r(im)?files?) ', keywords) else []
|
202
|
-
rimfiles = [f for f in rfiles if self.is_image(f)] if re.search(r' rimfiles? ', keywords) else []
|
203
|
-
rdirs = [XlPath(p) for p in rpaths if p.is_dir()] if re.search(r' (rdirs?) ', keywords) else []
|
204
|
-
|
205
|
-
# 3 判断是否要智能开循环处理
|
206
|
-
m = re.search(r' (r?(path|(im)?file|dir)) ', keywords)
|
207
|
-
if m:
|
208
|
-
name = m.group(1)
|
209
|
-
objs = eval(name + 's')
|
210
|
-
print('len(' + name + 's)=', len(objs))
|
211
|
-
for x in objs:
|
212
|
-
locals()[name] = x
|
213
|
-
eval(self.cmds['subinput'])
|
214
|
-
else: # 没有的话就直接处理所有文件
|
215
|
-
eval(self.cmds['subinput'])
|
216
|
-
|
217
|
-
# 4 运行结束标志
|
218
|
-
print(f'finished in {format_timespan(tt.tocvalue())}.')
|
219
|
-
|
220
|
-
def open_jsonl(self):
|
221
|
-
""" 打开jsonl文件 """
|
222
|
-
from pyxllib.ext.JLineViewer import start_jlineviewer
|
223
|
-
start_jlineviewer(self.paths[0].as_posix())
|
224
|
-
|
225
|
-
def open_jsonl_with_excel(self):
|
226
|
-
""" 用excel打开jsonl文件 """
|
227
|
-
from pyxllib.algo.stat import write_dataframes_to_excel
|
228
|
-
|
229
|
-
file = self.paths[0].as_posix()
|
230
|
-
data = XlPath(file).read_jsonl()
|
231
|
-
|
232
|
-
file = XlPath.create_tempfile_path('.xlsx')
|
233
|
-
df = pd.DataFrame.from_dict(data)
|
234
|
-
write_dataframes_to_excel(file, {'Sheet1': df})
|
235
|
-
|
236
|
-
os.startfile(file)
|
237
|
-
|
238
|
-
|
239
|
-
class UtoolsText(UtoolsBase):
|
240
|
-
|
241
140
|
@clipboard_decorator(copy=False, typing=True)
|
242
141
|
def common_dir(self):
|
243
142
|
# 目录路径生成工具
|
@@ -315,7 +214,7 @@ class UtoolsText(UtoolsBase):
|
|
315
214
|
fire.Fire(func, self.cmds['subinput'], 'create_text_image')
|
316
215
|
|
317
216
|
|
318
|
-
class
|
217
|
+
class UtoolsText(UtoolsBase):
|
319
218
|
def __init__(self, cmds, *, outfmt='text'):
|
320
219
|
super().__init__(cmds, outfmt=outfmt)
|
321
220
|
|
@@ -346,6 +245,107 @@ class UtoolsRegex(UtoolsBase):
|
|
346
245
|
bcompare(text1, text2)
|
347
246
|
|
348
247
|
|
248
|
+
class UtoolsFile(UtoolsBase):
|
249
|
+
""" 文件相关操作工具 """
|
250
|
+
|
251
|
+
def __init__(self, cmds, *, outfmt='text'):
|
252
|
+
super().__init__(cmds, outfmt=outfmt)
|
253
|
+
|
254
|
+
# 如果是window等模式,补充 MatchedFiles
|
255
|
+
if 'MatchedFiles' in self.cmds:
|
256
|
+
self.paths = [pathlib.Path(f['path']) for f in self.cmds['MatchedFiles']]
|
257
|
+
else:
|
258
|
+
self.paths = [pathlib.Path(os.path.abspath(f)).resolve() for f in os.listdir('../robot')]
|
259
|
+
|
260
|
+
@classmethod
|
261
|
+
def is_image(cls, f):
|
262
|
+
return bool(re.match('jpe?g|png|gif|bmp', f.suffix.lower()[1:]))
|
263
|
+
|
264
|
+
def codefile(self):
|
265
|
+
""" 多用途文件处理器
|
266
|
+
|
267
|
+
核心理念是不设定具体功能,而是让用户在 subinput 自己写需要执行的py代码功能
|
268
|
+
而在subinput,可以用一些特殊的标识符来传参
|
269
|
+
|
270
|
+
以file为例,有4类参数:
|
271
|
+
file,处理当前目录 文件
|
272
|
+
rfile,递归处理所有目录下 文件
|
273
|
+
files,当前目录 所有文件
|
274
|
+
rfiles,递归获取所有目录下 所有文件
|
275
|
+
|
276
|
+
类型上,file可以改为
|
277
|
+
dir,只分析目录
|
278
|
+
path,所有文件和目录
|
279
|
+
|
280
|
+
扩展了一些特殊的类型:
|
281
|
+
imfile,图片文件
|
282
|
+
"""
|
283
|
+
from functools import reduce
|
284
|
+
try:
|
285
|
+
from xlproject.xyz.kzconfig import KzDataSync
|
286
|
+
from pyxlpr.data.labelme import reduce_labelme_jsonfile
|
287
|
+
except ModuleNotFoundError:
|
288
|
+
pass
|
289
|
+
|
290
|
+
tt = TicToc()
|
291
|
+
|
292
|
+
# 1 获得所有标识符
|
293
|
+
# 每个单词前后都有空格,方便定界
|
294
|
+
keywords = filter(lambda x: re.match(r'[a-zA-Z_]+$', x),
|
295
|
+
set(re.findall(r'\.?[a-zA-Z_]+\(?', self.cmds['subinput'])))
|
296
|
+
keywords = ' ' + ' '.join(keywords) + ' '
|
297
|
+
# print('keywords:', keywords)
|
298
|
+
|
299
|
+
# 2 生成一些备用的智能参数
|
300
|
+
# 一级目录下选中的文件
|
301
|
+
paths = self.paths
|
302
|
+
# 用正则判断一些智能参数是否要计算,注意不能只判断files,如果出现file,也是要引用files的
|
303
|
+
files = [XlPath(p) for p in paths if p.is_file()] if re.search(r'files? ', keywords) else []
|
304
|
+
imfiles = [f for f in files if self.is_image(f)] if re.search(r' imfiles? ', keywords) else []
|
305
|
+
# 出现r系列的递归操作,都是要计算出dirs的
|
306
|
+
dirs = [XlPath(p) for p in paths if p.is_dir()] if re.search(r' (dirs?|r[a-zA-Z_]+) ', keywords) else []
|
307
|
+
|
308
|
+
# 递归所有的文件
|
309
|
+
rpaths = reduce(lambda x, y: x + y.select('**/*').subpaths(), [paths] + dirs) \
|
310
|
+
if re.search(r' (r[a-zA-Z_]+) ', keywords) else []
|
311
|
+
rfiles = [XlPath(p) for p in rpaths if p.is_file()] if re.search(r' (r(im)?files?) ', keywords) else []
|
312
|
+
rimfiles = [f for f in rfiles if self.is_image(f)] if re.search(r' rimfiles? ', keywords) else []
|
313
|
+
rdirs = [XlPath(p) for p in rpaths if p.is_dir()] if re.search(r' (rdirs?) ', keywords) else []
|
314
|
+
|
315
|
+
# 3 判断是否要智能开循环处理
|
316
|
+
m = re.search(r' (r?(path|(im)?file|dir)) ', keywords)
|
317
|
+
if m:
|
318
|
+
name = m.group(1)
|
319
|
+
objs = eval(name + 's')
|
320
|
+
print('len(' + name + 's)=', len(objs))
|
321
|
+
for x in objs:
|
322
|
+
locals()[name] = x
|
323
|
+
eval(self.cmds['subinput'])
|
324
|
+
else: # 没有的话就直接处理所有文件
|
325
|
+
eval(self.cmds['subinput'])
|
326
|
+
|
327
|
+
# 4 运行结束标志
|
328
|
+
print(f'finished in {format_timespan(tt.tocvalue())}.')
|
329
|
+
|
330
|
+
def open_jsonl(self):
|
331
|
+
""" 打开jsonl文件 """
|
332
|
+
from pyxllib.ext.JLineViewer import start_jlineviewer
|
333
|
+
start_jlineviewer(self.paths[0].as_posix())
|
334
|
+
|
335
|
+
def open_jsonl_with_excel(self):
|
336
|
+
""" 用excel打开jsonl文件 """
|
337
|
+
from pyxllib.algo.stat import write_dataframes_to_excel
|
338
|
+
|
339
|
+
file = self.paths[0].as_posix()
|
340
|
+
data = XlPath(file).read_jsonl()
|
341
|
+
|
342
|
+
file = XlPath.create_tempfile_path('.xlsx')
|
343
|
+
df = pd.DataFrame.from_dict(data)
|
344
|
+
write_dataframes_to_excel(file, {'Sheet1': df})
|
345
|
+
|
346
|
+
os.startfile(file)
|
347
|
+
|
348
|
+
|
349
349
|
if __name__ == '__main__':
|
350
350
|
with TicToc('utools'):
|
351
351
|
pass
|
@@ -1476,20 +1476,33 @@ class XlPath(type(pathlib.Path())):
|
|
1476
1476
|
else:
|
1477
1477
|
return shutil.copytree(self, dst)
|
1478
1478
|
|
1479
|
-
def move(self, dst, if_exists=None):
|
1479
|
+
def move(self, dst, *, cross_disk=False, if_exists=None):
|
1480
|
+
"""
|
1481
|
+
:param cross_disk: 是否可能涉及跨磁盘操作
|
1482
|
+
"""
|
1480
1483
|
if not self.exists():
|
1481
1484
|
return self
|
1482
1485
|
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
|
1486
|
+
if cross_disk: # 显式设置跨磁盘操作
|
1487
|
+
dst = self.copy(dst, if_exists=if_exists)
|
1488
|
+
self.delete()
|
1489
|
+
return dst
|
1490
|
+
|
1491
|
+
try:
|
1492
|
+
dst = XlPath(dst)
|
1493
|
+
if self == dst:
|
1494
|
+
# 同一个文件,可能是调整了大小写名称
|
1495
|
+
if self.as_posix() != dst.as_posix():
|
1496
|
+
tmp = self.tempfile(dir=self.parent) # self不一定是file,也可能是dir,但这个名称通用
|
1497
|
+
self.rename(tmp)
|
1498
|
+
self.delete()
|
1499
|
+
tmp.rename(dst)
|
1500
|
+
elif dst.exist_preprcs(if_exists):
|
1501
|
+
self.rename(dst)
|
1502
|
+
except OSError:
|
1503
|
+
# 有可能是跨磁盘操作,这个时候就只能先拷贝再删除了
|
1504
|
+
dst = self.copy(dst, if_exists=if_exists)
|
1505
|
+
self.delete()
|
1493
1506
|
return dst
|
1494
1507
|
|
1495
1508
|
def rename2(self, new_name, if_exists=None):
|
@@ -45,7 +45,7 @@ _dir = Path(__file__).parent
|
|
45
45
|
|
46
46
|
setup(
|
47
47
|
name='pyxllib', # pip 安装时用的名字
|
48
|
-
version='0.3.
|
48
|
+
version='0.3.120', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
49
49
|
author='code4101',
|
50
50
|
author_email='877362867@qq.com',
|
51
51
|
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
|
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
|
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
|
File without changes
|
File without changes
|