re-common 10.0.42__tar.gz → 10.0.44__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.
- {re_common-10.0.42/re_common.egg-info → re_common-10.0.44}/PKG-INFO +11 -2
- re_common-10.0.44/re_common/v2/baselibrary/s3object/baseaioboto3.py +122 -0
- re_common-10.0.44/re_common/v2/baselibrary/s3object/huaweiobs.py +80 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/data_processer/data_processer.py +1 -1
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/hdfs_base_processor.py +3 -1
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/db.py +1 -27
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/string_bool.py +51 -41
- {re_common-10.0.42 → re_common-10.0.44/re_common.egg-info}/PKG-INFO +11 -2
- {re_common-10.0.42 → re_common-10.0.44}/re_common.egg-info/SOURCES.txt +1 -0
- {re_common-10.0.42 → re_common-10.0.44}/setup.py +1 -1
- re_common-10.0.42/re_common/v2/baselibrary/s3object/baseaioboto3.py +0 -48
- {re_common-10.0.42 → re_common-10.0.44}/LICENSE +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/README.md +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/pyproject.toml +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/baseabs/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/baseabs/baseabs.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/database/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/database/mbuilder.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/database/moudle.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/database/msqlite3.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/database/mysql.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/database/sql_factory.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/mthread/MThreadingRun.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/mthread/MThreadingRunEvent.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/mthread/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/mthread/mythreading.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/pakge_other/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/pakge_other/socks.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/readconfig/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/readconfig/config_factory.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/readconfig/ini_config.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/readconfig/toml_config.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/temporary/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/temporary/envdata.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/all_requests/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/all_requests/aiohttp_request.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/all_requests/httpx_requet.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/all_requests/mrequest.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/all_requests/requests_request.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/batch_compre/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/batch_compre/bijiao_batch.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/contrast_db3.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/copy_file.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/db3_2_sizedb3.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/foreachgz.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/get_attr.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/image_to_pdf.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/java_code_deal.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/javacode.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mdb_db3.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/merge_file.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/merge_gz_file.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mhdfstools/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mhdfstools/hdfst.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mongo_tools.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/move_file.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/move_mongo/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/move_mongo/move_mongo_table.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/move_mongo/use_mttf.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/move_mongo/use_mv.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mpandas/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mpandas/pandas_visualization.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/myparsel.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/rename_dir_file.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/sequoiadb_utils.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/split_line_to_many.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/stringtodicts.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/workwechant_bot.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseaiohttp.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseaiomysql.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseallstep.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseavro.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseboto3.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basecsv.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basedict.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basedir.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseencode.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseencoding.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseesdsl.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseexcel.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseexcept.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basefile.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseftp.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basegzip.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basehdfs.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basehttpx.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseip.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basejson.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baselist.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basemotor.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basemssql.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseodbc.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basepandas.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basepeewee.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basepika.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basepydash.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basepymongo.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basequeue.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baserar.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baserequest.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseset.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basesmb.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basestring.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basetime.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basetuple.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/baseurl.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/basezip.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/core/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/core/bottomutils.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/core/mdeprecated.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/core/mlamada.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/core/msginfo.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/core/requests_core.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/fateadm.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/importfun.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/mfaker.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/my_abc/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/my_abc/better_abc.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/mylogger.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/myredisclient.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/pipupgrade.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/ringlist.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/version_compare.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/utils/ydmhttp.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/facade/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/facade/lazy_import.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/facade/loggerfacade.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/facade/mysqlfacade.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/facade/now.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/facade/sqlite3facade.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/facade/use/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/facade/use/mq_use_facade.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/facade/use/proxy_use_facade.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/base_dict_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/baseavro_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/basefile_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/basemssql_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/baseodbc_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/basepandas_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/get_attr_test/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/get_attr_test/get_attr_test_settings.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/get_attr_test/settings.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/idencode_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/iniconfig_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/ip_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/merge_file_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/mfaker_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/mm3_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/mylogger_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/myparsel_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/mysql_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/pymongo_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/split_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/sqlite3_merge_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/sqlite3_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/tomlconfig_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/use_tools_test/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/libtest/user/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/studio/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/studio/assignment_expressions.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/studio/mydash/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/studio/mydash/test1.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/studio/pydashstudio/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/studio/pydashstudio/first.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/studio/streamlitstudio/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/studio/streamlitstudio/first_app.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/studio/streamlitstudio/uber_pickups.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/studio/test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/business_utils/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/business_utils/baseencodeid.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/business_utils/full_doi_path.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/business_utils/rel_tools.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/decorators/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/decorators/utils.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/helpers/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/helpers/search_packge/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/helpers/search_packge/test.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/s3object/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/s3object/baseboto3.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/WeChatRobot.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/ac_ahocorasick.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/concurrency.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/data_processer/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/data_processer/base.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/data_processer/data_reader.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/data_processer/data_writer.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/dict_tools.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/dir_file_tools.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/dolphinscheduler.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/hdfs_data_processer.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/hdfs_line_processor.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/list_tools.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/resume_tracker.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/search_hash_tools.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/text_matcher.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/tree_processor/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/tree_processor/builder.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/tree_processor/node.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/unionfind_tools.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/BusinessStringUtil.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/api_net_utils.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/author_smi.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/base_string_similarity.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/basedict.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/basehdfs.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/basepika.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/basetime.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/elasticsearch.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/json_cls.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/mq.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/n_ary_expression_tree.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/pinyin_utils.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/string_clear.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/string_smi.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/utils/stringutils.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/base_step_process.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/baseencodeid.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/changetaskname.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/core_var.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/mmh3Hash.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/proxy/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/proxy/allproxys.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/proxy/allproxys_thread.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/proxy/cnki_proxy.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/proxy/kuaidaili.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/proxy/proxy_all.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/proxy/update_kuaidaili_0.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/proxy/wanfang_proxy.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/proxy/wp_proxy_all.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/read_rawid_to_txt.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/title/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/title/transform/TransformBookTitleToZt.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/title/transform/TransformConferenceTitleToZt.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/title/transform/TransformCstadTitleToZt.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/title/transform/TransformJournalTitleToZt.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/title/transform/TransformPatentTitleToZt.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/title/transform/TransformRegulationTitleToZt.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/title/transform/TransformStandardTitleToZt.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/title/transform/TransformThesisTitleToZt.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common/vip/title/transform/__init__.py +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common.egg-info/dependency_links.txt +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/re_common.egg-info/top_level.txt +0 -0
- {re_common-10.0.42 → re_common-10.0.44}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: re_common
|
|
3
|
-
Version: 10.0.
|
|
3
|
+
Version: 10.0.44
|
|
4
4
|
Summary: a library about all python projects
|
|
5
5
|
Home-page: https://gitee.com/xujiangios/re-common
|
|
6
6
|
Author: vic
|
|
@@ -11,6 +11,15 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: >=3.6
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
+
Dynamic: author
|
|
15
|
+
Dynamic: author-email
|
|
16
|
+
Dynamic: classifier
|
|
17
|
+
Dynamic: description
|
|
18
|
+
Dynamic: description-content-type
|
|
19
|
+
Dynamic: home-page
|
|
20
|
+
Dynamic: license-file
|
|
21
|
+
Dynamic: requires-python
|
|
22
|
+
Dynamic: summary
|
|
14
23
|
|
|
15
24
|
|
|
16
25
|
这是一个基础类,依赖很多的第三方包,是一个用得到的第三方库的封装,可以在此基础上迅速构建项目
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import gzip
|
|
2
|
+
import io
|
|
3
|
+
from typing import Protocol
|
|
4
|
+
|
|
5
|
+
import aioboto3
|
|
6
|
+
import aiofiles
|
|
7
|
+
from aiobotocore.config import AioConfig
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class AsyncReadable(Protocol):
|
|
11
|
+
async def read(self, n: int = -1) -> bytes:
|
|
12
|
+
...
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# config = AioConfig(connect_timeout=600000, read_timeout=600000, retries={'max_attempts': 3},
|
|
16
|
+
# max_pool_connections=10)
|
|
17
|
+
|
|
18
|
+
class BaseAioBoto3(object):
|
|
19
|
+
|
|
20
|
+
def __init__(self, aws_access_key_id, aws_secret_access_key, endpoint_url,
|
|
21
|
+
config=AioConfig(max_pool_connections=10)):
|
|
22
|
+
"""
|
|
23
|
+
初始化华为云 OBS 客户端
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
access_key: 华为云 Access Key
|
|
27
|
+
secret_key: 华为云 Secret Key
|
|
28
|
+
region: 区域,如 'cn-north-4'
|
|
29
|
+
endpoint: 华为云 OBS 端点,可选
|
|
30
|
+
"""
|
|
31
|
+
self.aws_access_key_id = aws_access_key_id
|
|
32
|
+
self.aws_secret_access_key = aws_secret_access_key
|
|
33
|
+
self.endpoint_url = endpoint_url
|
|
34
|
+
self.config = config
|
|
35
|
+
self.boto_session = None
|
|
36
|
+
|
|
37
|
+
async def initialize_class_variable(self):
|
|
38
|
+
if self.boto_session is None:
|
|
39
|
+
self.boto_session = aioboto3.Session(
|
|
40
|
+
aws_access_key_id=self.aws_access_key_id,
|
|
41
|
+
aws_secret_access_key=self.aws_secret_access_key
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
async def read_minio_data(self, bucket, key):
|
|
45
|
+
await self.initialize_class_variable()
|
|
46
|
+
async with self.boto_session.client("s3", endpoint_url=self.endpoint_url, config=self.config) as s3:
|
|
47
|
+
s3_ob = await s3.get_object(Bucket=bucket, Key=key)
|
|
48
|
+
result = await s3_ob["Body"].read()
|
|
49
|
+
return result
|
|
50
|
+
|
|
51
|
+
def ungzip(self, raw_bytes, encoding="utf-8"):
|
|
52
|
+
with gzip.GzipFile(fileobj=io.BytesIO(raw_bytes)) as gz:
|
|
53
|
+
return gz.read().decode(encoding)
|
|
54
|
+
|
|
55
|
+
# 异步下载大文件
|
|
56
|
+
async def download_file(self, bucket: str, key: str, local_path: str):
|
|
57
|
+
await self.initialize_class_variable()
|
|
58
|
+
async with self.boto_session.client("s3", endpoint_url=self.endpoint_url, config=self.config) as s3:
|
|
59
|
+
response = await s3.get_object(Bucket=bucket, Key=key)
|
|
60
|
+
body = response["Body"]
|
|
61
|
+
|
|
62
|
+
# 用异步方式写入本地
|
|
63
|
+
async with aiofiles.open(local_path, "wb") as f:
|
|
64
|
+
while True:
|
|
65
|
+
chunk = await body.read(10 * 1024 * 1024) # 每次读 10MB
|
|
66
|
+
if not chunk:
|
|
67
|
+
break
|
|
68
|
+
await f.write(chunk)
|
|
69
|
+
|
|
70
|
+
return local_path
|
|
71
|
+
|
|
72
|
+
async def list_files(self, bucket: str, prefix: str, recursive: bool = True):
|
|
73
|
+
"""
|
|
74
|
+
获取 bucket 下某个“目录”(prefix) 的文件列表
|
|
75
|
+
|
|
76
|
+
单文件返回样例 ['server_data/api-title-roc/py_full_organ_dic/', 'server_data/api-title-roc/py_full_organ_dic/part-00000.gz']
|
|
77
|
+
|
|
78
|
+
:param bucket: bucket 名
|
|
79
|
+
:param prefix: 目录前缀,如 'server_data/api-title-roc/'
|
|
80
|
+
:param recursive: 是否递归子目录
|
|
81
|
+
:return: List[str] 文件 key 列表
|
|
82
|
+
"""
|
|
83
|
+
await self.initialize_class_variable()
|
|
84
|
+
keys = []
|
|
85
|
+
|
|
86
|
+
# 非递归时,用 delimiter 模拟目录
|
|
87
|
+
extra_args = {}
|
|
88
|
+
if not recursive:
|
|
89
|
+
extra_args["Delimiter"] = "/"
|
|
90
|
+
|
|
91
|
+
async with self.boto_session.client(
|
|
92
|
+
"s3",
|
|
93
|
+
endpoint_url=self.endpoint_url,
|
|
94
|
+
config=self.config
|
|
95
|
+
) as s3:
|
|
96
|
+
|
|
97
|
+
continuation_token = None
|
|
98
|
+
|
|
99
|
+
while True:
|
|
100
|
+
kwargs = {
|
|
101
|
+
"Bucket": bucket,
|
|
102
|
+
"Prefix": prefix,
|
|
103
|
+
**extra_args
|
|
104
|
+
}
|
|
105
|
+
# 下一页的“游标”
|
|
106
|
+
if continuation_token:
|
|
107
|
+
kwargs["ContinuationToken"] = continuation_token
|
|
108
|
+
|
|
109
|
+
resp = await s3.list_objects_v2(**kwargs)
|
|
110
|
+
|
|
111
|
+
# 文件
|
|
112
|
+
for obj in resp.get("Contents", []):
|
|
113
|
+
keys.append(obj["Key"])
|
|
114
|
+
|
|
115
|
+
# 是否还有下一页
|
|
116
|
+
if resp.get("IsTruncated"): # 说明还有下一页
|
|
117
|
+
# 下一页从哪里继续查
|
|
118
|
+
continuation_token = resp.get("NextContinuationToken")
|
|
119
|
+
else:
|
|
120
|
+
break
|
|
121
|
+
|
|
122
|
+
return keys
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# pip install pycryptodome==3.10.1
|
|
2
|
+
# pip install esdk-obs-python
|
|
3
|
+
# 引入模块
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
from obs import ObsClient, GetObjectHeader
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class BaseObsClient(object):
|
|
10
|
+
|
|
11
|
+
def __init__(self, aws_access_key_id="", aws_secret_access_key="", endpoint_url=""):
|
|
12
|
+
self.aws_access_key_id = aws_access_key_id
|
|
13
|
+
self.aws_secret_access_key = aws_secret_access_key
|
|
14
|
+
self.endpoint_url = endpoint_url
|
|
15
|
+
self.client = None
|
|
16
|
+
if self.aws_access_key_id and self.aws_secret_access_key and self.endpoint_url:
|
|
17
|
+
self.get_client()
|
|
18
|
+
|
|
19
|
+
def get_client(self):
|
|
20
|
+
self.client = ObsClient(access_key_id=self.aws_access_key_id,
|
|
21
|
+
secret_access_key=self.aws_secret_access_key,
|
|
22
|
+
server=self.endpoint_url)
|
|
23
|
+
return self
|
|
24
|
+
|
|
25
|
+
def close(self):
|
|
26
|
+
self.client.close()
|
|
27
|
+
|
|
28
|
+
def put_object(self, bucket_name, objectKey, body):
|
|
29
|
+
"""
|
|
30
|
+
直接写内容到文件
|
|
31
|
+
Args:
|
|
32
|
+
bucket_name:
|
|
33
|
+
key:
|
|
34
|
+
body: 需要
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
"""
|
|
38
|
+
# 上传文本对象
|
|
39
|
+
resp = self.client.putContent(bucket_name, objectKey, body)
|
|
40
|
+
# 返回码为2xx时,接口调用成功,否则接口调用失败
|
|
41
|
+
if resp.status < 300:
|
|
42
|
+
return True, resp
|
|
43
|
+
else:
|
|
44
|
+
return False, resp
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def download_memobj(self, bucket_name, objectKey):
|
|
48
|
+
"""
|
|
49
|
+
return: None
|
|
50
|
+
"""
|
|
51
|
+
# 指定loadStreamInMemory为True忽略downloadpath路径,将文件的二进制流下载到内存
|
|
52
|
+
# 二进制下载对象
|
|
53
|
+
resp = self.client.getObject(bucketName=bucket_name, objectKey=objectKey, loadStreamInMemory=True)
|
|
54
|
+
# 返回码为2xx时,接口调用成功,否则接口调用失败
|
|
55
|
+
if resp.status < 300:
|
|
56
|
+
return True, resp
|
|
57
|
+
else:
|
|
58
|
+
return False, resp
|
|
59
|
+
|
|
60
|
+
def download_file(self, bucket_name, objectKey,downloadPath):
|
|
61
|
+
"""
|
|
62
|
+
return: None
|
|
63
|
+
"""
|
|
64
|
+
headers = GetObjectHeader()
|
|
65
|
+
resp = self.client.getObject(bucket_name, objectKey, downloadPath, headers=headers)
|
|
66
|
+
# 返回码为2xx时,接口调用成功,否则接口调用失败
|
|
67
|
+
if resp.status < 300:
|
|
68
|
+
return True, resp
|
|
69
|
+
else:
|
|
70
|
+
return False, resp
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def list_prefixes(self,bucket_name,prefix, max_keys = 100):
|
|
74
|
+
# 列举桶内对象
|
|
75
|
+
resp = self.client.listObjects(bucket_name, prefix, max_keys=max_keys, encoding_type='url')
|
|
76
|
+
# 返回码为2xx时,接口调用成功,否则接口调用失败
|
|
77
|
+
if resp.status < 300:
|
|
78
|
+
return True, resp
|
|
79
|
+
else:
|
|
80
|
+
return False, resp
|
{re_common-10.0.42 → re_common-10.0.44}/re_common/v2/baselibrary/tools/hdfs_base_processor.py
RENAMED
|
@@ -34,6 +34,7 @@ class HDFSBaseProcessor(abc.ABC):
|
|
|
34
34
|
read_mode: Literal["all", "stream"] = "all",
|
|
35
35
|
retries: int = 3,
|
|
36
36
|
pool_factory: Callable[[], Awaitable[Any]] = None,
|
|
37
|
+
pool_factory_kwargs: dict = None,
|
|
37
38
|
max_processes: int = None, # 添加多进程支持
|
|
38
39
|
result_dir: str = None,
|
|
39
40
|
):
|
|
@@ -48,6 +49,7 @@ class HDFSBaseProcessor(abc.ABC):
|
|
|
48
49
|
self.retries = retries
|
|
49
50
|
self.result_dir = result_dir
|
|
50
51
|
self.pool_factory = pool_factory
|
|
52
|
+
self.pool_factory_kwargs = pool_factory_kwargs
|
|
51
53
|
self.max_processes = max_processes or max(multiprocessing.cpu_count() - 1, 1) # 默认使用CPU核心数-1
|
|
52
54
|
self._client = None
|
|
53
55
|
|
|
@@ -64,7 +66,7 @@ class HDFSBaseProcessor(abc.ABC):
|
|
|
64
66
|
return None
|
|
65
67
|
global _pool
|
|
66
68
|
if _pool is None:
|
|
67
|
-
_pool = await self.pool_factory()
|
|
69
|
+
_pool = await self.pool_factory(self.pool_factory_kwargs)
|
|
68
70
|
return _pool
|
|
69
71
|
|
|
70
72
|
def _list_gz_files(self) -> List[str]:
|
|
@@ -9,33 +9,7 @@ from collections import namedtuple
|
|
|
9
9
|
|
|
10
10
|
from aiomysql import Pool, Connection, Cursor
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
"host": "192.168.98.64",
|
|
14
|
-
"port": 4000,
|
|
15
|
-
"user": "dataware_house_baseUser",
|
|
16
|
-
"password": "FF19AF831AEBD580B450B16BF9264200",
|
|
17
|
-
"db": "dataware_house_base",
|
|
18
|
-
"charset": "utf8mb4",
|
|
19
|
-
"minsize": 16, # 最小连接数
|
|
20
|
-
"maxsize": 128, # 最大连接数
|
|
21
|
-
"autocommit": False, # 自动提交事务
|
|
22
|
-
"pool_recycle": 3600, # 每个连接的回收时间(秒),超过此时间后连接将被关闭并重新创建,避免失效连接
|
|
23
|
-
"echo": False, # 打印SQL语句
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
DB_CONFIG1 = {
|
|
27
|
-
"host": "192.168.98.64",
|
|
28
|
-
"port": 4000,
|
|
29
|
-
"user": "foreign_fulltextUser",
|
|
30
|
-
"password": "i4hIeasw1qpmhGN2nwL7",
|
|
31
|
-
"db": "foreign_fulltext",
|
|
32
|
-
"charset": "utf8mb4",
|
|
33
|
-
"minsize": 16, # 最小连接数
|
|
34
|
-
"maxsize": 128, # 最大连接数
|
|
35
|
-
"autocommit": False, # 自动提交事务
|
|
36
|
-
"pool_recycle": 3600, # 每个连接的回收时间(秒),超过此时间后连接将被关闭并重新创建,避免失效连接
|
|
37
|
-
"echo": False, # 打印SQL语句
|
|
38
|
-
}
|
|
12
|
+
|
|
39
13
|
|
|
40
14
|
|
|
41
15
|
async def get_pool_only(_DB_CONFIG: dict = None):
|
|
@@ -3,6 +3,8 @@ import re
|
|
|
3
3
|
import regex
|
|
4
4
|
import unicodedata
|
|
5
5
|
|
|
6
|
+
from re_common.v2.baselibrary.decorators.utils import deprecated
|
|
7
|
+
|
|
6
8
|
|
|
7
9
|
def is_ascii_alnum(char: str) -> bool:
|
|
8
10
|
# 精准判断是否为英文或数字字符(ASCII 范围)
|
|
@@ -15,6 +17,20 @@ def is_all_english_chars(s):
|
|
|
15
17
|
|
|
16
18
|
|
|
17
19
|
def contains_chinese_chars(s):
|
|
20
|
+
"""
|
|
21
|
+
判断字符串中是否包含中文(汉字)字符
|
|
22
|
+
|
|
23
|
+
使用 regex 库(不是内置 re),通过 Unicode 属性 IsHan
|
|
24
|
+
来匹配任意一个汉字。
|
|
25
|
+
|
|
26
|
+
参数:
|
|
27
|
+
s (str): 待检测的字符串
|
|
28
|
+
|
|
29
|
+
返回:
|
|
30
|
+
bool:
|
|
31
|
+
True - 字符串中至少包含一个中文字符
|
|
32
|
+
False - 字符串中不包含任何中文字符
|
|
33
|
+
"""
|
|
18
34
|
return bool(regex.search(r"[\p{IsHan}]", s))
|
|
19
35
|
|
|
20
36
|
|
|
@@ -108,56 +124,50 @@ def is_all_symbols(text):
|
|
|
108
124
|
# 检查每个字符是否属于符号类别
|
|
109
125
|
return all(unicodedata.category(char).startswith(('P', 'S')) for char in text)
|
|
110
126
|
|
|
111
|
-
|
|
112
|
-
|
|
127
|
+
def is_whole_word_en_re(sub_str: str, long_str: str) -> bool:
|
|
128
|
+
"""
|
|
129
|
+
与 is_whole_word_en 效果一致
|
|
113
130
|
"""
|
|
114
|
-
|
|
131
|
+
if not sub_str or not long_str:
|
|
132
|
+
return False
|
|
115
133
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
long_str: 被搜索的字符串
|
|
134
|
+
pattern = rf"(^|[^a-z0-9-]){re.escape(sub_str)}([^a-z0-9-]|$)"
|
|
135
|
+
return re.search(pattern, long_str) is not None
|
|
119
136
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
""
|
|
123
|
-
# 用于 忽略大小写 进行匹配
|
|
124
|
-
regex_pattern = re.compile(r"[^a-z0-9]", re.IGNORECASE) # 用于判断非字母数字字符
|
|
137
|
+
@deprecated("请使用 is_whole_word_en_re 中的方法代替。")
|
|
138
|
+
def is_whole_word_en(sub_str: str, long_str: str) -> bool:
|
|
139
|
+
regex_pattern = re.compile(r"[^a-z0-9-]", re.IGNORECASE)
|
|
125
140
|
|
|
126
141
|
if not sub_str or not long_str:
|
|
127
142
|
return False
|
|
128
143
|
|
|
129
|
-
#
|
|
130
|
-
if long_str ==
|
|
144
|
+
# 使用 startsWith 和 endsWith 检查边界
|
|
145
|
+
if long_str.startswith(sub_str) and long_str.endswith(sub_str) and len(sub_str) == len(long_str):
|
|
131
146
|
return True
|
|
132
147
|
|
|
133
|
-
#
|
|
134
|
-
index =
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if index
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
148
|
+
# 检查是否在中间位置,且前后有非字母数字字符
|
|
149
|
+
# index = long_str.find(sub_str)
|
|
150
|
+
index_list = [m.start() for m in re.finditer(re.escape(sub_str), long_str)]
|
|
151
|
+
|
|
152
|
+
def get_bools(index):
|
|
153
|
+
if index >= 0:
|
|
154
|
+
is_start = False
|
|
155
|
+
is_end = False
|
|
156
|
+
if index == 0:
|
|
157
|
+
is_start = True
|
|
158
|
+
else:
|
|
159
|
+
is_start = bool(regex_pattern.match(long_str[index - 1]))
|
|
160
|
+
|
|
161
|
+
if len(long_str) == len(sub_str) + index:
|
|
162
|
+
is_end = True
|
|
163
|
+
else:
|
|
164
|
+
is_end = bool(regex_pattern.match(long_str[index + len(sub_str)]))
|
|
165
|
+
|
|
166
|
+
return is_start and is_end
|
|
144
167
|
else:
|
|
145
|
-
|
|
168
|
+
return False
|
|
146
169
|
|
|
147
|
-
|
|
148
|
-
end_index = index + len(sub_str)
|
|
149
|
-
if end_index == len(long_str):
|
|
150
|
-
is_end = True
|
|
151
|
-
else:
|
|
152
|
-
is_end = bool(regex_pattern.match(long_str[end_index]))
|
|
153
|
-
|
|
154
|
-
if is_start and is_end:
|
|
155
|
-
return True
|
|
156
|
-
|
|
157
|
-
# 移动索引继续查找
|
|
158
|
-
index += 1
|
|
159
|
-
|
|
160
|
-
return False
|
|
170
|
+
return any([get_bools(index) for index in index_list])
|
|
161
171
|
|
|
162
172
|
|
|
163
173
|
def is_whole_word(sub_str: str, long_str: str) -> bool:
|
|
@@ -178,10 +188,10 @@ def is_whole_word(sub_str: str, long_str: str) -> bool:
|
|
|
178
188
|
# 是否是字母数字
|
|
179
189
|
if is_ascii_alnum(sub_str[0]) or is_ascii_alnum(sub_str[-1]):
|
|
180
190
|
# 表示中英文混合 看是否是截断单词即可
|
|
181
|
-
return
|
|
191
|
+
return is_whole_word_en_re(sub_str, long_str)
|
|
182
192
|
else:
|
|
183
193
|
# 中文子串只要被包含即可视为“完整词”
|
|
184
194
|
return is_contain
|
|
185
195
|
else:
|
|
186
196
|
# 英文使用完整单词判断逻辑
|
|
187
|
-
return
|
|
197
|
+
return is_whole_word_en_re(sub_str, long_str)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: re_common
|
|
3
|
-
Version: 10.0.
|
|
3
|
+
Version: 10.0.44
|
|
4
4
|
Summary: a library about all python projects
|
|
5
5
|
Home-page: https://gitee.com/xujiangios/re-common
|
|
6
6
|
Author: vic
|
|
@@ -11,6 +11,15 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: >=3.6
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
+
Dynamic: author
|
|
15
|
+
Dynamic: author-email
|
|
16
|
+
Dynamic: classifier
|
|
17
|
+
Dynamic: description
|
|
18
|
+
Dynamic: description-content-type
|
|
19
|
+
Dynamic: home-page
|
|
20
|
+
Dynamic: license-file
|
|
21
|
+
Dynamic: requires-python
|
|
22
|
+
Dynamic: summary
|
|
14
23
|
|
|
15
24
|
|
|
16
25
|
这是一个基础类,依赖很多的第三方包,是一个用得到的第三方库的封装,可以在此基础上迅速构建项目
|
|
@@ -187,6 +187,7 @@ re_common/v2/baselibrary/helpers/search_packge/test.py
|
|
|
187
187
|
re_common/v2/baselibrary/s3object/__init__.py
|
|
188
188
|
re_common/v2/baselibrary/s3object/baseaioboto3.py
|
|
189
189
|
re_common/v2/baselibrary/s3object/baseboto3.py
|
|
190
|
+
re_common/v2/baselibrary/s3object/huaweiobs.py
|
|
190
191
|
re_common/v2/baselibrary/tools/WeChatRobot.py
|
|
191
192
|
re_common/v2/baselibrary/tools/__init__.py
|
|
192
193
|
re_common/v2/baselibrary/tools/ac_ahocorasick.py
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import aioboto3
|
|
2
|
-
import aiofiles
|
|
3
|
-
from aiobotocore.config import AioConfig
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# config = AioConfig(connect_timeout=600000, read_timeout=600000, retries={'max_attempts': 3},
|
|
7
|
-
# max_pool_connections=10)
|
|
8
|
-
|
|
9
|
-
class BaseAioBoto3(object):
|
|
10
|
-
|
|
11
|
-
def __init__(self, aws_access_key_id, aws_secret_access_key, endpoint_url,
|
|
12
|
-
config=AioConfig(max_pool_connections=10)):
|
|
13
|
-
self.aws_access_key_id = aws_access_key_id
|
|
14
|
-
self.aws_secret_access_key = aws_secret_access_key
|
|
15
|
-
self.endpoint_url = endpoint_url
|
|
16
|
-
self.config = config
|
|
17
|
-
self.boto_session = None
|
|
18
|
-
|
|
19
|
-
async def initialize_class_variable(self):
|
|
20
|
-
if self.boto_session is None:
|
|
21
|
-
self.boto_session = aioboto3.Session(
|
|
22
|
-
aws_access_key_id=self.aws_access_key_id,
|
|
23
|
-
aws_secret_access_key=self.aws_secret_access_key,
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
async def read_minio_data(self, bucket, key):
|
|
27
|
-
await self.initialize_class_variable()
|
|
28
|
-
async with self.boto_session.client("s3", endpoint_url=self.endpoint_url, config=self.config) as s3:
|
|
29
|
-
s3_ob = await s3.get_object(Bucket=bucket, Key=key)
|
|
30
|
-
result = await s3_ob["Body"].read()
|
|
31
|
-
return result
|
|
32
|
-
|
|
33
|
-
# 异步下载大文件
|
|
34
|
-
async def download_file(self, bucket: str, key: str, local_path: str):
|
|
35
|
-
await self.initialize_class_variable()
|
|
36
|
-
async with self.boto_session.client("s3", endpoint_url=self.endpoint_url, config=self.config) as s3:
|
|
37
|
-
response = await s3.get_object(Bucket=bucket, Key=key)
|
|
38
|
-
body = response["Body"]
|
|
39
|
-
|
|
40
|
-
# 用异步方式写入本地
|
|
41
|
-
async with aiofiles.open(local_path, "wb") as f:
|
|
42
|
-
while True:
|
|
43
|
-
chunk = await body.read(10 * 1024 * 1024) # 每次读 10MB
|
|
44
|
-
if not chunk:
|
|
45
|
-
break
|
|
46
|
-
await f.write(chunk)
|
|
47
|
-
|
|
48
|
-
return local_path
|
|
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
|
{re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/all_requests/__init__.py
RENAMED
|
File without changes
|
{re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/all_requests/aiohttp_request.py
RENAMED
|
File without changes
|
{re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/all_requests/httpx_requet.py
RENAMED
|
File without changes
|
{re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/all_requests/mrequest.py
RENAMED
|
File without changes
|
{re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/all_requests/requests_request.py
RENAMED
|
File without changes
|
{re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/batch_compre/__init__.py
RENAMED
|
File without changes
|
{re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/batch_compre/bijiao_batch.py
RENAMED
|
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
|
{re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py
RENAMED
|
File without changes
|
|
File without changes
|
{re_common-10.0.42 → re_common-10.0.44}/re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|