MeUtils 2025.4.18.14.53.20__py3-none-any.whl → 2025.4.19.13.52.36__py3-none-any.whl

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.
@@ -249,7 +249,7 @@ examples/wget/demo.py,sha256=b-wASDBKND8_TtdIorNXV45sMjbWnfsYCBVk6XXee3o,438
249
249
  examples/wget/progress_bar/__init__.py,sha256=mlmNLOEplBy1h_Me-UWbgidVNrkie5okV1A8HQ0Ihy8,271
250
250
  examples/文档智能/__init__.py,sha256=JKHlkF5vTvwFJnFLIT7raQxsvBoK12b8lvVz-c03Uec,271
251
251
  meutils/__init__.py,sha256=X_i77Bvnt4-c4XUwuzGZTvXP2doPtTBqQsHl9DE455E,348
252
- meutils/_utils.py,sha256=5oL-s4vM0DZSyI9j1Qoo999PcJagMKNZ9ZPaXFo9tp4,1999
252
+ meutils/_utils.py,sha256=bnT4-8C_o4ctat-iWAMzaGX21ppjkr0WI-YSOaqf5HA,2107
253
253
  meutils/cache_utils.py,sha256=6vz3G8wZ5iOXH91J-dp7ciU_BuLDzjjQUi4Hl8rrzOY,8425
254
254
  meutils/common.py,sha256=3Baz2iIIgrMCdxkSZCtLOlvihcLMGMLIeS2Du6vAhhg,16851
255
255
  meutils/date_utils.py,sha256=--rh58qfa2iagLjgA0eh1myyvaZ0hgxHiy-WCsrNsuk,2497
@@ -344,7 +344,7 @@ meutils/apis/audio/__init__.py,sha256=y7Rpn90LocHhA0ywrDP_fT4QAK7sr4JsIX5wLJgkNH
344
344
  meutils/apis/audio/deepinfra.py,sha256=O-IpAnHfx25QCjhB5xaIYVBy5AbyPzmVz-Pr40gpnsM,1773
345
345
  meutils/apis/audio/fish.py,sha256=jPvTveRcDtvGDgRT6EA9WJitAQxftneHxvEJ63yY_cM,8392
346
346
  meutils/apis/baidu/__init__.py,sha256=XPkz3DHrDdxCneaZct3y7MaX0Aw9IIseOYOn1YuVBII,243
347
- meutils/apis/baidu/bdaitpzs.py,sha256=iV34wkJzN-XUxWVI9IThT__5htC9KFCHxk9kqUmNvKo,12852
347
+ meutils/apis/baidu/bdaitpzs.py,sha256=d8UStmi0ABEr8Zy1uoTux-ryAs2aw3XNwAJSRhi40BQ,12685
348
348
  meutils/apis/baidu/test.py,sha256=nb9ivelHIw84-d1V-MNGRpGoTpLFsNXPk-TTKpjwOfQ,2058
349
349
  meutils/apis/chatglm/__init__.py,sha256=uFuc9qY-ZjGqbsfcdGZkcEkhjATojWpzk2WXTTujc70,271
350
350
  meutils/apis/chatglm/glm_video.py,sha256=9LA9pyeIcDDHXGhJbZSJfjxrLeNC3SIuCKJwDIXRKR8,14015
@@ -395,7 +395,7 @@ meutils/apis/images/deepinfra.py,sha256=lMqfU0LIXEzHiAS31dCcoTnPIE6tpoDJhq61H0TV
395
395
  meutils/apis/images/demo.py,sha256=Cjk-EKMKbp44czykW_44qR0TzElX8nNCALqXBBw5sJA,4405
396
396
  meutils/apis/images/edits.py,sha256=4DDBkr-n_5F6N1bLkSS2puznyPv1cROFhohZc7wVSpY,10155
397
397
  meutils/apis/images/eidt.py,sha256=s8IBbCjwwoogIUf-d2O7nkawUmly9n19nvLYPaLEeg4,1217
398
- meutils/apis/images/recraft.py,sha256=S-ldPRM_Ad92rqq2EKIUerb78uuWag_cIomjOTcWeuE,72270
398
+ meutils/apis/images/recraft.py,sha256=E-hr6lCzqA6z732DPwbtZFTlu-g04aQ7rHk8OUPyg54,72356
399
399
  meutils/apis/images/flux/__init__.py,sha256=W_PZabQm6EmtJYmzEiEpL_WCXTAW0AiJ-t_n5UTrE8c,271
400
400
  meutils/apis/images/flux/fluxpro.py,sha256=NFl9t9C3R3jsNJpez4o9tOz3r-fjRXj-vKMxCSTRDTU,4022
401
401
  meutils/apis/images/flux/mystic.py,sha256=cUkqaMAbd3dSBCvFEoNBBoEoWCGzvBJWPEkEq1Q8xzw,3616
@@ -438,7 +438,7 @@ meutils/apis/monica/llm.py,sha256=gYyBPOTvmoNFaa1KmW3OlSsRKeN7C97EyPUa264nJ08,26
438
438
  meutils/apis/napkin/__init__.py,sha256=EWwpRJEbN46d6Dk9PHAZvsYmqD_EOK0jjKQL1kYtcKs,271
439
439
  meutils/apis/napkin/icons.py,sha256=_L8EaSeQ6ChT5w7q3jnj_AcRhKvNiBg3-qUKo9JQ12o,2217
440
440
  meutils/apis/oneapi/__init__.py,sha256=wg_kqNkFqOkP70vnOHvAeKREps57Rqliu5yKC0gsgLk,284
441
- meutils/apis/oneapi/channel.py,sha256=AxUsQj6muOLrj9IuMt2QJtTmTpR0MvJz1v-r3Ex75hE,2012
441
+ meutils/apis/oneapi/channel.py,sha256=o-nNTrTUObWhhkYp23pFqSNKXNRYpQhlm9FPkmiJplU,2039
442
442
  meutils/apis/oneapi/common.py,sha256=AIs8ro-1qui3FG42msBY6dL_zt9QJ0jS63qtp-XTlY4,3617
443
443
  meutils/apis/oneapi/log.py,sha256=dOmyldX5DyJO7mMw4EzYorTIsdLKqZ3AZiV0z0tEpWE,1377
444
444
  meutils/apis/oneapi/token.py,sha256=LaKwkHXNvF46wXEVtbSNwfi0ujuQo7oRyln39MOPKX0,1638
@@ -450,7 +450,7 @@ meutils/apis/pixverse/pixverse.py,sha256=dvnyYVUXCEY_cLnmX9lvq9TesvplCMCuJmmP7Sh
450
450
  meutils/apis/proxy/__init__.py,sha256=by7_6GT3xeDjAWLLqbw8uvGaZ3RdprEW-zJ2DFLOdwA,271
451
451
  meutils/apis/proxy/demo.py,sha256=-huvtmltbKXa6cS77k61ts-Kjd5ccSAgXzNrotIvIKA,1642
452
452
  meutils/apis/proxy/ips.py,sha256=3McLniROteSBqAtcMH8xKbUBfhVc4ZyGuRwMvgEryKg,5023
453
- meutils/apis/proxy/kdlapi.py,sha256=e1UGwmjJG8d28Cjb3LQXdPT1VlLneOqOwlfoO0o0tgU,1545
453
+ meutils/apis/proxy/kdlapi.py,sha256=1JDknUVBQDQgGeNIdxNcVjyH1j_0EurJ1B-U8V3RBPs,1557
454
454
  meutils/apis/remini/__init__.py,sha256=8TbAnbI_bDfH8g0Y9EHXHBum7C0rZt9MzgAAz_MbAeI,271
455
455
  meutils/apis/remini/remini.py,sha256=bJjvtqrCNlAu7No4gYGjoWAM0ch6dCsofYSy2jPZrXg,4239
456
456
  meutils/apis/replicateai/__init__.py,sha256=PK7e7-xhn5aj5WOyGHLzpsHQvpeM5uTOiMylvj40ZmU,272
@@ -507,7 +507,7 @@ meutils/apis/voice_clone/__init__.py,sha256=y7Rpn90LocHhA0ywrDP_fT4QAK7sr4JsIX5w
507
507
  meutils/apis/voice_clone/fish.py,sha256=6m8zcS2KEqmalKy2ArnOaNovyxsQp_sw4d_O1kVZR2s,7146
508
508
  meutils/apis/voice_clone/fish_api.py,sha256=pDpE-B8HFiGIOV3NVd1HmFrCC2GQc3wH-81oNbTS0mY,307
509
509
  meutils/apis/volcengine_apis/__init__.py,sha256=PnngoI3Qk6n_axdOLgENCFYlKsmohgzYVW1HUg7L8gI,271
510
- meutils/apis/volcengine_apis/images.py,sha256=lsrNZ19gqEUDARo8SsXhtcCc1TzazVOuOsjx1LrewzQ,5015
510
+ meutils/apis/volcengine_apis/images.py,sha256=lFuwFjHKYnoYnC-9PKWgox3LOZGCZMivWUJ8I5rTfPM,5117
511
511
  meutils/async_task/__init__.py,sha256=45cUr-GWvQ1JFYGOYPOIkHLyTR3JbfP_PEYrmktpMLo,367
512
512
  meutils/async_task/celery_config.py,sha256=BX1h3jY34aO6UmUFakdBUwOdsEiOxCGuUtYDUKFtafc,3461
513
513
  meutils/async_task/common.py,sha256=ZJ4e0CsEJf1ppPmGSwPCwhZBAkUL5xsi_t1ny-bJuko,845
@@ -527,8 +527,8 @@ meutils/async_utils/background.py,sha256=dl6UaMIFBZDB1uxSZzGFJdSnpt3Xo0flK7gwsok
527
527
  meutils/async_utils/common.py,sha256=bfZkUlQz21WHAh2W7SDxFtrvUYNBnRfVxIUgMmT7o1Q,5212
528
528
  meutils/async_utils/test.py,sha256=lkZdgSzzgVg8hYVcaBNEJ3KBvFTEfjbXZVvtknQZsRQ,1155
529
529
  meutils/caches/__init__.py,sha256=hIUEqNnmhukkbKK2F39bXe-MGDwzeUoTOf_sYly53xo,291
530
- meutils/caches/acache.py,sha256=vyGwc6PLJmGt8tOe_gxP9tfL2QcMjVdpq_O2Dy7lPeo,3196
531
- meutils/caches/common.py,sha256=8C6KiHYAeRVguQxOh2ocNCxq9BxuemLOHSEL_xTAtOM,1774
530
+ meutils/caches/acache.py,sha256=iykItx1iSEmTTg8zmM02LZm09M-HuEDN413sKr15QLY,2900
531
+ meutils/caches/common.py,sha256=GvAPsXjZchhlBL8KczGAII6xAtUy_BqB7NmNLPWNHcc,1962
532
532
  meutils/caches/redis_cache.py,sha256=oXGk_CZhjp9P_z1TG_zhmma4iGepK-iIWY_ZYQWSkFg,1395
533
533
  meutils/caches/redis_mulit.py,sha256=WQrNmH98S0D9mG5eixqPtrYvOPi62T4w2ZvNETB4eU4,597
534
534
  meutils/clis/__init__.py,sha256=2Fhn43X8kFP6FpAnnAMiPcdnjUwQaukiIr2uGB6mGAY,279
@@ -556,7 +556,7 @@ meutils/config_utils/lark_utils/demo.py,sha256=3g0Fs7oLaeW75T60gYWMLgyNg1OnfOjfH
556
556
  meutils/config_utils/lark_utils/x.py,sha256=MlMQGhehP9xMEgetxVCX68XFaosfKoW1JA5cZ3JqN2w,1857
557
557
  meutils/crawlers/__init__.py,sha256=TBU4xA-IOsHV-0yIkW7YXxn_QT7TT8NncqxO7IykEfs,271
558
558
  meutils/data/SimHei.ttf,sha256=-XEnekS5yHP_URkT4XBI2w22ylV-KxudhkeIYFbrILA,10062565
559
- meutils/data/VERSION,sha256=98nUDoCFC_wwNFcFXT_ZNKfOhdd9boUOke0YJnD96PU,19
559
+ meutils/data/VERSION,sha256=l_srvdhRZQK6C91QKKv188SIHfXIQN46T8Mq-TWrgos,19
560
560
  meutils/data/_FLAG,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
561
561
  meutils/data/_SUCCESS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
562
562
  meutils/data/__init__.py,sha256=Hfwkkxs4zHqKhxht0YrhS566a9P5axtmgNvM5wF8ceQ,243
@@ -576,7 +576,7 @@ meutils/decorators/__init__.py,sha256=hgpHo40pfFWYXEnrW74o8W7SIfCD0GHr3gnujBw1hI
576
576
  meutils/decorators/cache.py,sha256=-sqhCuiSYZK1UtsRw7bBog19G65O9N27DVTAp_nlBk4,2972
577
577
  meutils/decorators/catch.py,sha256=JMYXNQ-9P0qic-Jtjtm8o9gCisTvDeUvVkSbPZxcdUM,1555
578
578
  meutils/decorators/common.py,sha256=Y-6FIQf4GqllYOGmyzorrLFEbx3MguLsjFmWcnbIaKg,14334
579
- meutils/decorators/contextmanagers.py,sha256=DPffNQJeGwNwrO14zddioSunsxYde9CLEEBe3mQB24c,5150
579
+ meutils/decorators/contextmanagers.py,sha256=DXInOzFrRF2k00lvtTT1wTOnng4c6Ul6fCUU0scVtdg,5000
580
580
  meutils/decorators/decorator.py,sha256=njwKhWhnvAXgHd_8h50V5jj5XZoK7_HM12rFDlmXc8c,15570
581
581
  meutils/decorators/decorator_demo.py,sha256=JLCulTW04uYHzLg6jRxVseaAdU-YeyL8Z2p-e_y-rsg,754
582
582
  meutils/decorators/demo.py,sha256=VmHYNkQQG_CT8js3uxXCaO7HmBbvVy0bQeE7QgPDdTw,1980
@@ -603,7 +603,7 @@ meutils/init/evn.py,sha256=GPw9Un8YbgYJmjwd-uYWQ8JeVr6pRxwyYbDv3W8fb1s,1588
603
603
  meutils/init/oo.py,sha256=jXWaCWWFYVPGgTIas47Z3J7sIq-CD7DyK6fKDBsq8GA,12884
604
604
  meutils/io/__init__.py,sha256=uW43ZfdWu7adRvwvcTzUGtn4CseRmbzEJdlZV-oqHEA,2107
605
605
  meutils/io/_openai_files.py,sha256=UIiu6Zg7iSFIn1xIcpLznFlnfCxAJFGuvuPtxvTNHfI,1005
606
- meutils/io/files_utils.py,sha256=T-cbr2wi0mHk7WqoJ1w2SZgMZlsZzRXNsdijIjD1mG4,8508
606
+ meutils/io/files_utils.py,sha256=PoWfh2L6bC5QrS5fBPoVOEhwjuIJrswBEbhAB0wClfA,8660
607
607
  meutils/io/image.py,sha256=BJmYzx7o66X7C32gOfVmfr5tBRXOi0IYQY7BpGLsGrg,6926
608
608
  meutils/io/minio_utils.py,sha256=i1YuxwDJzLse0smMXuPqnD1wirBBb8psmB_kd1oPoVU,1274
609
609
  meutils/io/openai_files.py,sha256=wi4qp-olva8aF6AfBiUBfb_QlHzHolJJbH4UbHpRrB0,6032
@@ -674,7 +674,7 @@ meutils/llm/completions/rag/qwen.py,sha256=1dBNLLbQDRsM-7EGaStcWFU8HRa-rp3RxJ9cp
674
674
  meutils/llm/completions/rag/rag.py,sha256=mnC4bZUMuNYuPFXMBqXMofj_ms8uP5MMw1leJ5jXA_k,1209
675
675
  meutils/llm/functions/__init__.py,sha256=It6pcNwRBSh3Em45ooi61lc5tFg8eOYv0BvEFuRjSGQ,271
676
676
  meutils/llm/openai_polling/__init__.py,sha256=qmAMITPtrTD-y57RiJXewuOic7iLKBhx8mz5uvcxsy8,270
677
- meutils/llm/openai_polling/chat.py,sha256=QPG8wZAUs3zK-l3B6z5arqlhG3xD-e0lDeOkpYd54Sk,3840
677
+ meutils/llm/openai_polling/chat.py,sha256=l8qRBFlVd-asLWAphMfNAArswDPmgH0ny3FqoVF5xOo,6592
678
678
  meutils/llm/openai_polling/images.py,sha256=qKMk3vCvamS_48ceC-_y2LPpP5XsD476FHG9MUu8kks,1042
679
679
  meutils/llm/openai_utils/__init__.py,sha256=MWyNhP2K49oaHGEZlInZc3XlwqlStFultP8k7HDPAwk,290
680
680
  meutils/llm/openai_utils/common.py,sha256=GGctOMlg8xT2A5H-8hMow0VfOZHCDdIPjd12597Nohs,9754
@@ -690,7 +690,7 @@ meutils/logging/log_utils.py,sha256=Sa5-Y4fWNTKQw2fIb1dbPgOypl6S6m7EOrbciSqEt5A,
690
690
  meutils/logging/logger.py,sha256=-J_tWYfAvPhSTshVWIiN-6zTZnjkFuwDfMtxUtuNkuY,6183
691
691
  meutils/notice/__init__.py,sha256=BVbcBx4ks-BH_63gEcjMxL67oX1_aWdaM8r3TDo8Ogg,248
692
692
  meutils/notice/emails.py,sha256=TvC1xv3MpFC2HU0lTQW5SmNuj7UMlgjpsUImMp9jKOw,2403
693
- meutils/notice/feishu.py,sha256=iCoEGL75NUAVQk7Bb3NyyYfKM3ToQGb5nLOm4zQ6XR8,4271
693
+ meutils/notice/feishu.py,sha256=Sp3gaxDiUFHc_XvFRZFbN-g1zu3hxybq4U0gr599TrY,4417
694
694
  meutils/notice/file_post.py,sha256=KQ8iQUM30vF7T6ZZPahdLps4dLXK2s3nzdFYbty6M5E,953
695
695
  meutils/notice/load_emailfile - 副本.py,sha256=f-Kq3UKZut_P0bmumV1y4PXuPtatjl-5SLUH5LShBUY,7331
696
696
  meutils/notice/wechat.py,sha256=-HU5oSvpZrVnjjU76ky7_j0yg5ivn5mIlJ7JJVtlrnY,4082
@@ -818,7 +818,7 @@ meutils/schemas/db/__init__.py,sha256=m1maURVoM6dIW0yt6ELZrZTzULtkHybVOSXtHNJRVI
818
818
  meutils/schemas/db/oneapi_types.py,sha256=3t2m0H80saEXmYUZfVFrtEaY117GjZTsSa1GKgkJzqQ,3896
819
819
  meutils/schemas/oneapi/__init__.py,sha256=uevbi3QAvFzN9WPbx9bYKTDyKt7P2ueZO6W0nSiD0sk,289
820
820
  meutils/schemas/oneapi/_types.py,sha256=ClvAaNy3SahEN8lL8KEErHTD6HANelXUeKc_3iLfosQ,1488
821
- meutils/schemas/oneapi/common.py,sha256=ybmtQ2xDVDxneE1BbKRN2eX-7jskTW5DBzIMv7aRIRM,35331
821
+ meutils/schemas/oneapi/common.py,sha256=UMc9oftLv-DK-YO7r8DOa30y-rRkgPD6rC03L_Z5Eyo,35496
822
822
  meutils/schemas/oneapi/icons.py,sha256=T7W5gInBJoHe62wzMimbG_UI-wn3_-rmQ1O4O2z-CQY,1089
823
823
  meutils/schemas/oneapi/model_group_info.py,sha256=rGtflYJuFIjk5MsVEvK9JUR4IciX8jfErqeLqf8DIlQ,1586
824
824
  meutils/schemas/oneapi/model_info.py,sha256=_uwKEPIIqm7ZYfhmpxtXB2QNsS83SpJY-OaBzvogC9w,772
@@ -844,7 +844,7 @@ meutils/serving/fastapi/__demo/__init__.py,sha256=TxXjqy2ZxAkadPxqN92Xq3ixCUYkQ-
844
844
  meutils/serving/fastapi/__demo/异步任务.py,sha256=60_ruA4ljlTLIP5zxcejmm9WJ0SDuqpsO49SZK9vA_s,1444
845
845
  meutils/serving/fastapi/dependencies/__init__.py,sha256=TQcxvWqZdA2jZZX84NtAij-bhS7ihcMLx1-xsbSpV4g,384
846
846
  meutils/serving/fastapi/dependencies/auth.py,sha256=3dgfBLbu6VdzB1-7vaEtfXy6oOawIcGiaQZU2fBNXZM,2166
847
- meutils/serving/fastapi/dependencies/headers.py,sha256=QHsWn8w_9f4_WoYTAOJzzb38FVQdRgbNATLdChWaVGg,916
847
+ meutils/serving/fastapi/dependencies/headers.py,sha256=ddifDCJyELqfPwuUX12x-lH0KNylu2iidc7Mupcvl6k,922
848
848
  meutils/serving/fastapi/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
849
849
  meutils/serving/fastapi/exceptions/http_error.py,sha256=-cBBWNJH3qp1GMSaa9AlojJ18lBLFEk0KHoGUnmV3u4,2601
850
850
  meutils/serving/fastapi/exceptions/validation_error.py,sha256=Q71wYfzGsVjLA-SQ3R5a8iT0kDG01mwriVUXHhvsTv0,1234
@@ -947,9 +947,9 @@ meutils/tools/seize.py,sha256=nOKAS63w-Lbi48I0m2MPhdsokUTwxco0laPxYVmW4Mw,1064
947
947
  meutils/tools/service_monitor.py,sha256=ibsLtBN2g2DL7ZnLJ8vhiZOiOcqTAyx711djDdBK-3M,1255
948
948
  meutils/tools/sys_monitor.py,sha256=6MoyzrItqDUOSjfHcMJmMofQkEPTW36CT_aKui0rg84,429
949
949
  meutils/tools/token_monitor.py,sha256=Np-YK-R4P4IPAXyZvMxwvXI4sFmNJQAQK1lSegNaYpA,997
950
- MeUtils-2025.4.18.14.53.20.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
951
- MeUtils-2025.4.18.14.53.20.dist-info/METADATA,sha256=TzJyXD1YXuW7qOZEGDRq5SHugPRKigLQ9mVHfelpBIE,32834
952
- MeUtils-2025.4.18.14.53.20.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
953
- MeUtils-2025.4.18.14.53.20.dist-info/entry_points.txt,sha256=lufZlBHRqqZKdY-ZQJ4CSZb0qhV5hQC37egZna9M7ug,357
954
- MeUtils-2025.4.18.14.53.20.dist-info/top_level.txt,sha256=cInfxMmkgNOskurdjwP5unau4rA7Uw48nu07tYhS7KY,22
955
- MeUtils-2025.4.18.14.53.20.dist-info/RECORD,,
950
+ MeUtils-2025.4.19.13.52.36.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
951
+ MeUtils-2025.4.19.13.52.36.dist-info/METADATA,sha256=ljsvi_qp_xMGVNMji003BG00arcfVl8djOoauFm_1PI,32834
952
+ MeUtils-2025.4.19.13.52.36.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
953
+ MeUtils-2025.4.19.13.52.36.dist-info/entry_points.txt,sha256=lufZlBHRqqZKdY-ZQJ4CSZb0qhV5hQC37egZna9M7ug,357
954
+ MeUtils-2025.4.19.13.52.36.dist-info/top_level.txt,sha256=cInfxMmkgNOskurdjwP5unau4rA7Uw48nu07tYhS7KY,22
955
+ MeUtils-2025.4.19.13.52.36.dist-info/RECORD,,
meutils/_utils.py CHANGED
@@ -45,14 +45,15 @@ list4log = lambda ls: "\n\t" + "\n\t".join(ls)
45
45
 
46
46
 
47
47
  def bjson(json_data):
48
- if isinstance(json_data, dict):
48
+ if isinstance(json_data, (str,)):
49
+ json_data = {"metadata": json_data}
50
+
51
+ if isinstance(json_data, (dict, list)):
49
52
  return json.dumps(json_data, indent=4, ensure_ascii=False)
53
+
50
54
  elif isinstance(json_data, BaseModel):
51
55
  return json_data.model_dump_json(indent=4)
52
56
 
53
- else:
54
- return json_data
55
-
56
57
 
57
58
  dict2json = bjson
58
59
  json2dict = lambda s: json.loads(s.replace("'", '"'))
@@ -98,3 +99,7 @@ def dict_merge(dicts):
98
99
  for k, v in d.items():
99
100
  dic.setdefault(k, []).append(v)
100
101
  return dic
102
+
103
+
104
+ if __name__ == '__main__':
105
+ print(bjson('xx'))
@@ -64,6 +64,8 @@ async def create_task(
64
64
  "proxy": await get_one_proxy()
65
65
  }
66
66
 
67
+ logger.debug(request_kwargs)
68
+
67
69
  async with httpx.AsyncClient(base_url=BASE_URL, headers=headers, timeout=100, **request_kwargs) as client:
68
70
 
69
71
  response = await client.post('/aigc/pccreate', data=payload)
@@ -205,7 +207,7 @@ if __name__ == '__main__':
205
207
  # # token='BAIDUID=F2185337B2F3F85DAB5D2E661BC00C8D:FG=1; BDUSS=hNQkdpbjBOT05EVjRCSFp3TUF-TXFKWHktcFppUGNyd0xZZGp3Mkp6TmVnbFptSVFBQUFBJCQAAAAAAAAAAAEAAACsbZVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF71LmZe9S5mOX; BDUSS_BFESS=hNQkdpbjBOT05EVjRCSFp3TUF-TXFKWHktcFppUGNyd0xZZGp3Mkp6TmVnbFptSVFBQUFBJCQAAAAAAAAAAAEAAACsbZVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF71LmZe9S5mOX; MAWEBCUID=web_axHhqlIWargVQsXuskqOnMzVXDWQHqQXOpFPkPVSvXFIwTNYaC; PSTM=1716434076; BIDUPSID=5FEB509ECAE0F7843030FD4ECC0800F8; newlogin=1; MCITY=-315%3A; H_WISE_SIDS_BFESS=60360_60674; indexPageSugList=%5B%22%E8%AF%81%E4%BB%B6%E7%85%A7%20%E7%94%B7%22%2C%22%E6%85%88%E7%A6%A7%E5%92%8C%E6%9D%8E%E8%8E%B2%E8%8B%B1%22%2C%22%E7%AE%80%E9%A1%BF%E7%81%AF%E5%85%B7%20%E9%81%A5%E6%8E%A7%E5%99%A8%22%2C%22%E5%88%B0%E5%BD%93%E9%81%93%E5%A3%AB%E9%82%A3%E4%BA%9B%E5%B9%B4%20%E8%B1%86%E7%93%A3%22%2C%22%E9%81%93%E5%A3%AB%20%E5%8D%A1%E9%80%9A%22%2C%22%E9%81%93%E5%A3%AB%22%2C%22%E6%88%91%E5%BD%93%E9%81%93%E5%A3%AB%E9%82%A3%E4%BA%9B%E5%B9%B4%22%2C%22%E8%AF%BB%E6%9E%B6%22%2C%22%E6%9D%B0%E8%AF%BA%E6%AF%94%E5%88%A9%20%E5%AF%B9%E6%AF%94%E7%85%A7%20%E5%8D%95%E8%86%9D%E8%B7%AA%E5%9C%B0%22%5D; BAIDUID_BFESS=F2185337B2F3F85DAB5D2E661BC00C8D:FG=1; BDRCVFR[C0p6oIjvx-c]=I67x6TjHwwYf0; delPer=0; PSINO=5; BDRCVFR[C0sZzZJZb70]=mk3SLVN4HKm; BA_HECTOR=alal0125ah0h0h0l8k8l0l01blu4191jd049m1u; ZFY=C8vEYu7ZbY0zTEITG3A0aWCevri4:BT:B0H1NpNZdQWKM:C; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=60360_60674_60683_60694_60572; BCLID=11757829139010941756; BCLID_BFESS=11757829139010941756; BDSFRCVID=pZCOJexroG3bGRntFj9auQWaJgKKv3JTDYLE8yu9T4VNR5DVYtg8EG0Pt_ZYMak-XolpogKKL2OTHm_F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; BDSFRCVID_BFESS=pZCOJexroG3bGRntFj9auQWaJgKKv3JTDYLE8yu9T4VNR5DVYtg8EG0Pt_ZYMak-XolpogKKL2OTHm_F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tJkH_KthJIP3e4515Pr_q4tJbq58etJXfaO4Vp7F54nKDp0R0JbI0J0h5p6vaP3m066MaM-ELDOxsMT4QfJJhxuH-qoKel5tQH5MXprN3KJmf-Op2hO0ytDNbHOE2-biW2tH2Mbdax7P_IoG2Mn8M4bb3qOpBtQmJeTxoUJ25DnJhhCGe6KbD6bQDH8Oq-jeHDrKBRbaHJOoDDv8QxRcy4LbKxnxJhoe0H6JXt3LBJnfEpjlbURxqqjy3-OkbfQ9babTQ-tbBp3k8MQXbn7FQfbQ0hOe5RvnMe5a2JK2MJ7JOpvsDxnxy-umQRPH-Rv92DQMVU52QqcqEIQHQT3m5-5bbN3ut6IHJbufoID2fIvDqTrP-trf5DCShUFs5J3dB2Q-XPoO3KOGqpoh5b6b2xKJb-bCb4biQPjNoMbgy4op8P3y0bb2DUA1y4vpX4bOBeTxoUJ2-bjWS-cV-xTqjbIebPRiWTj9QgbLMhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0MD8xDT8Bj6Pq5fcj2nQXK4_tVTrJabC3qMcJXU6q2bDeQNba0hjXbgcBVRjaLx3HOR3oynD5yl0vWtv4qnctfGPJ-qr4Jlb4otbTeMonDh83Bn6kW4oWHGbyWPJO5hvv8KoO3M7VBUKmDloOW-TB5bbPLUQF5l8-sq0x0bOte-bQXH_E5bj2qRAHoK-h3j; H_BDCLCKID_SF_BFESS=tJkH_KthJIP3e4515Pr_q4tJbq58etJXfaO4Vp7F54nKDp0R0JbI0J0h5p6vaP3m066MaM-ELDOxsMT4QfJJhxuH-qoKel5tQH5MXprN3KJmf-Op2hO0ytDNbHOE2-biW2tH2Mbdax7P_IoG2Mn8M4bb3qOpBtQmJeTxoUJ25DnJhhCGe6KbD6bQDH8Oq-jeHDrKBRbaHJOoDDv8QxRcy4LbKxnxJhoe0H6JXt3LBJnfEpjlbURxqqjy3-OkbfQ9babTQ-tbBp3k8MQXbn7FQfbQ0hOe5RvnMe5a2JK2MJ7JOpvsDxnxy-umQRPH-Rv92DQMVU52QqcqEIQHQT3m5-5bbN3ut6IHJbufoID2fIvDqTrP-trf5DCShUFs5J3dB2Q-XPoO3KOGqpoh5b6b2xKJb-bCb4biQPjNoMbgy4op8P3y0bb2DUA1y4vpX4bOBeTxoUJ2-bjWS-cV-xTqjbIebPRiWTj9QgbLMhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0MD8xDT8Bj6Pq5fcj2nQXK4_tVTrJabC3qMcJXU6q2bDeQNba0hjXbgcBVRjaLx3HOR3oynD5yl0vWtv4qnctfGPJ-qr4Jlb4otbTeMonDh83Bn6kW4oWHGbyWPJO5hvv8KoO3M7VBUKmDloOW-TB5bbPLUQF5l8-sq0x0bOte-bQXH_E5bj2qRAHoK-h3j; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; userFrom=null; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; ab_sr=1.0.1_NTY4Y2RjNTU5MWYzM2IyZjY4M2EzMWNjYWM1MWRhYjdlZDhmZTdkZGQ1NGE0MGFkZDU0NWQzNTU1OWJiZDllZmU4YjcyZDIyNTJiNzYxOWQ4OGM1MjQ2ODQzYTM2OGQ3YjdkMzQxZWI4Y2U5ZjQ3ZWZkYTQ2M2I3Yzc2MDkxMjBhZjczODNjMDNmNTAxMzhiZDg2ZmU0MTIwZTUxYWMxNQ==; H_WISE_SIDS=60360_60674_60683_60694_60572'
206
208
  # request = BDAITPZSRequest(original_url=url, thumb_url=url)
207
209
 
208
- url = "https://edit-upload-pic.cdn.bcebos.com/fff888d57a9b2ae0ffd802c8f77d80a0.jpeg?authorization=bce-auth-v1%2FALTAKh1mxHnNIyeO93hiasKJqq%2F2024-10-17T09%3A48%3A15Z%2F3600%2Fhost%2F4e7a06db2ea622123db01a2c81114f0377876ac2acb019f1f1594ec67a07af8d"
210
+ url = "https://oss.ffire.cc/files/shuiyin.jpg"
209
211
 
210
212
  request = BDAITPZSRequest(
211
213
  type="1",
@@ -43,7 +43,8 @@ async def get_access_token(token: str):
43
43
 
44
44
 
45
45
  async def edit_image(image, task: Literal["vectorize", "super_resolution",] = "super_resolution"):
46
- token = await get_next_token_for_polling(feishu_url=FEISHU_URL, check_token=check_token, from_redis=True)
46
+ token = await get_next_token_for_polling(feishu_url=FEISHU_URL, check_token=check_token, from_redis=True,
47
+ min_points=1)
47
48
  token = await get_access_token(token)
48
49
  headers = {"Authorization": f"Bearer {token}"}
49
50
 
@@ -142,13 +143,14 @@ async def check_token(token, threshold: float = 1):
142
143
  response = await client.get("/users/me")
143
144
  response.raise_for_status()
144
145
  data = response.json()
145
- logger.debug(data)
146
- logger.debug(data["credits"])
146
+ # logger.debug(data)
147
+ _ = data["credits"] >= threshold
148
+ _ or logger.debug(data["credits"])
149
+ return _
147
150
 
148
- return data["credits"] >= threshold
149
151
  except Exception as e:
150
152
  logger.error(e)
151
- logger.debug(token)
153
+ # logger.debug(token)
152
154
  return False
153
155
 
154
156
 
@@ -42,7 +42,7 @@ async def edit_channel(models, token: Optional[str] = None):
42
42
  "auto_ban": 0,
43
43
  "other_info": "",
44
44
 
45
- "group": "default,china", # ','.join(GROUP_RATIO),
45
+ "group": "default,openai,china,chatfire,enterprise", # ','.join(GROUP_RATIO),
46
46
  "groups": ['default']
47
47
  }
48
48
  headers = {
@@ -5,11 +5,11 @@ from meutils.pipe import *
5
5
  from meutils.caches import rcache
6
6
  from meutils.decorators.retry import retrying
7
7
 
8
- username = "d1999983904"
8
+ username = "d1999983904" # 包月
9
9
  password = "1h29rymg"
10
10
 
11
11
 
12
- @rcache(ttl=60 - 30)
12
+ @rcache(ttl=60 - 20)
13
13
  @retrying()
14
14
  async def get_proxy_list():
15
15
  secret_id = os.getenv("KDLAPI_SECRET_ID") or "owklc8tk3ypo00ohu80o"
@@ -35,8 +35,8 @@ if __name__ == '__main__':
35
35
 
36
36
 
37
37
  async def fetch(url):
38
- # proxy = await get_one_proxy()
39
- proxy="http://154.9.253.9:38443"
38
+ proxy = await get_one_proxy()
39
+ # proxy = "http://154.9.253.9:38443"
40
40
 
41
41
  async with httpx.AsyncClient(proxy=proxy, timeout=20) as client:
42
42
  resp = await client.get(url)
@@ -12,6 +12,7 @@ https://www.volcengine.com/docs/85128/1526761
12
12
  Seedream 通用3.0文生图模型是基于字节跳动视觉大模型打造的新一代文生图模型,本次升级模型综合能力(图文,结构,美感)均显著提升。V3.0参数量更大,对语义有更好的理解,实体结构也更加自然真实,支持 2048 以下分辨率直出,各类场景下的效果均大幅提升。
13
13
  https://www.volcengine.com/docs/6791/1384311
14
14
  """
15
+ import os
15
16
 
16
17
  from meutils.pipe import *
17
18
  from meutils.io.files_utils import to_url
@@ -83,6 +84,7 @@ async def generate(request: ImageRequest, token: Optional[str] = None):
83
84
 
84
85
 
85
86
  if __name__ == '__main__':
87
+ token = f"""{os.getenv("VOLC_ACCESSKEY")}|{os.getenv("VOLC_SECRETKEY")}"""
86
88
  prompt = """
87
89
  3D魔童哪吒 c4d 搬砖 很开心, 很快乐, 精神抖擞, 背景是数不清的敖丙虚化 视觉冲击力强 大师构图 色彩鲜艳丰富 吸引人 背景用黄金色艺术字写着“搬砖挣钱” 冷暖色对比
88
90
  """
@@ -98,7 +100,7 @@ if __name__ == '__main__':
98
100
  response_format="url",
99
101
  )
100
102
 
101
- arun(generate(request))
103
+ arun(generate(request, token=token))
102
104
 
103
105
  # with timer():
104
106
  # visual_service = VisualService()
meutils/caches/acache.py CHANGED
@@ -10,7 +10,7 @@
10
10
  import os
11
11
 
12
12
  from meutils.pipe import *
13
- from meutils.db.redis_db import async_pool
13
+ from meutils.caches import cache, rcache
14
14
 
15
15
  from aiocache import cached, Cache, RedisCache, caches
16
16
  from aiocache import multi_cached
@@ -21,31 +21,6 @@ from meutils.schemas.image_types import ImageRequest
21
21
  REDIS_URL = "redis://:chatfirechatfire@110.42.51.143:6379"
22
22
 
23
23
 
24
- def rcache(**kwargs): # todo
25
- """
26
- :param endpoint: str with the endpoint to connect to. Default is "127.0.0.1".
27
- :param port: int with the port to connect to. Default is 6379.
28
- :param db: int indicating database to use. Default is 0.
29
- :param password: str indicating password to use. Default is None.
30
- """
31
-
32
- connection_kwargs = {}
33
- if REDIS_URL := os.getenv("REDIS_URL"):
34
- user_password, base_url = REDIS_URL.split("@")
35
- endpoint, port = base_url.split(':')
36
- password = user_password.split(":")[-1]
37
-
38
- connection_kwargs['endpoint'] = endpoint
39
- connection_kwargs['port'] = port
40
- connection_kwargs['password'] = password
41
-
42
- return cached(
43
- cache=RedisCache,
44
- **connection_kwargs,
45
- **kwargs
46
- )
47
-
48
-
49
24
  @cached(ttl=60)
50
25
  @cached(ttl=60)
51
26
  async def cached_fc(user_id, **kwargs):
@@ -59,6 +34,7 @@ async def cached_fc(user_id, **kwargs):
59
34
  # key_builder = lambda *args, **kwargs: args[0].prompt
60
35
  key_builder = lambda *args, **kwargs: args[1].prompt
61
36
 
37
+
62
38
  def key_builder(*args, **kwargs):
63
39
  print(args)
64
40
  return args[1].prompt
@@ -71,6 +47,28 @@ async def redis_fcc(user_id, **kwargs):
71
47
  return False
72
48
 
73
49
 
50
+ skip_cache_func = lambda x: False
51
+
52
+
53
+ # def key_builder(*args, **kwargs):
54
+ # len(str(args[1]))
55
+
56
+ def skip_cache_func(*args, **kwargs):
57
+ logger.debug(f"skip_cache_func: {args} {kwargs}") # todo:缓存下载文件
58
+ return False
59
+ logger.debug(x)
60
+
61
+
62
+ @rcache(ttl=30, skip_cache_func=skip_cache_func)
63
+ async def skip_cache_fccc(*args, **kwargs):
64
+ logger.debug(f"第一次调用:{args} {kwargs}")
65
+
66
+ return # 没缓存
67
+ # return False # 缓存
68
+ # return True # 缓存
69
+ # return 'xxxxxxx' # 缓存
70
+
71
+
74
72
  # @multi_cached(ttl=60) # 多key缓存
75
73
  # async def complex_function(user_id, **kwargs):
76
74
  # logger.debug(user_id)
@@ -120,13 +118,13 @@ if __name__ == '__main__':
120
118
 
121
119
  from aiocache import cached, Cache, RedisCache, caches
122
120
 
121
+ fn = skip_cache_fccc
123
122
 
124
- async def main():
125
- for i in range(10):
126
- # logger.debug(i)
127
123
 
128
- await redis_fcc(ImageRequest(prompt=f'a cat {i}'))
129
- await asyncio.sleep(1)
124
+ async def main(fn):
125
+ for i in range(3):
126
+ _ = await fn(i)
127
+ # logger.debug(f"第{i}次: {_}")
130
128
 
131
129
 
132
- arun(main())
130
+ arun(main(fn))
meutils/caches/common.py CHANGED
@@ -15,6 +15,8 @@ from aiocache import cached, Cache, RedisCache, caches
15
15
 
16
16
  cache = memory_cache = cached
17
17
 
18
+ RedisCache.delete_all = lambda *args, **kwargs: caches.get(RedisCache).clear(*args, **kwargs)
19
+
18
20
 
19
21
  def rcache(**kwargs):
20
22
  """serializer="pickle"
@@ -54,23 +56,29 @@ if __name__ == '__main__':
54
56
 
55
57
  @cache(ttl=10)
56
58
  async def fn(a):
57
- logger.debug(a)
59
+ logger.debug("第一次")
60
+ return a
61
+
62
+
63
+ @cached(ttl=60)
64
+ async def fn2(a):
65
+ logger.debug("第一次")
58
66
  return a
59
67
 
60
68
 
61
69
  # @cache(ttl=3)
62
70
  @rcache(ttl=10)
63
71
  async def mfn(a):
64
- logger.debug(a)
72
+ logger.debug("第一次")
65
73
  return a
66
74
 
67
75
 
68
- async def main():
76
+ async def main(fn):
69
77
  for i in range(10):
70
- # await fn(11111)
71
- await mfn(11111)
78
+ await fn(i)
72
79
 
73
- await asyncio.sleep(1)
74
80
 
81
+ # arun(main(fn))
82
+ # arun(main(fn2))
75
83
 
76
- arun(main())
84
+ arun(main(mfn))
meutils/data/VERSION CHANGED
@@ -1 +1 @@
1
- 2025.04.18.14.53.20
1
+ 2025.04.19.13.52.36
@@ -105,20 +105,18 @@ async def atry_catch(
105
105
  is_trace: bool = False,
106
106
  **kwargs,
107
107
  ):
108
- callback = callback or send_message_for_try_catch
109
-
110
- task_name = task or "Unnamed TryCatch Task"
111
-
112
- data = {
113
- "task_name": task_name,
114
- }
115
-
116
108
  try:
117
109
  yield
118
110
  except Exception as e:
119
- error_msg = f"""{traceback.format_exc()}""" if is_trace else f"{e}"
120
- data["error"] = error_msg
111
+ task = task or "Unnamed TryCatch Task"
112
+
113
+ callback = callback or send_message_for_try_catch
114
+
115
+ data = {
116
+ "task": task,
117
+ "error": f"""{traceback.format_exc()}""" if is_trace else f"{e}"
121
118
 
119
+ }
122
120
  for k, v in kwargs.items():
123
121
  if isinstance(v, BaseModel):
124
122
  v = v.model_dump(exclude_none=True)
@@ -137,35 +135,27 @@ def try_catch(
137
135
  is_trace: bool = False,
138
136
  **kwargs,
139
137
  ):
140
- callback = callback or send_message_for_try_catch
141
-
142
- task_name = task or "Unnamed TryCatch Task"
143
-
144
- data = {
145
- "task_name": task_name,
146
- }
147
- for k, v in kwargs.items():
148
- if isinstance(v, BaseModel):
149
- v = v.model_dump(exclude_none=True)
150
- elif isinstance(v, typing.Mapping):
151
- v = dict(v)
152
-
153
- data[k] = v
154
-
155
- # logger.debug(data)
156
-
157
138
  try:
158
139
  yield
159
140
  except Exception as e:
160
- if is_trace:
161
- error_msg = f"""{traceback.format_exc()}"""
162
- else:
163
- error_msg = f"{e}"
141
+ task = task or "Unnamed TryCatch Task"
164
142
 
165
- data["error"] = error_msg
143
+ callback = callback or send_message_for_try_catch
144
+
145
+ data = {
146
+ "task": task,
147
+ "error": f"""{traceback.format_exc()}""" if is_trace else f"{e}"
148
+
149
+ }
150
+ for k, v in kwargs.items():
151
+ if isinstance(v, BaseModel):
152
+ v = v.model_dump(exclude_none=True)
153
+ data[k] = v
154
+
155
+ # logger.debug(data)
166
156
 
167
157
  callback(data)
168
- raise e
158
+ raise
169
159
 
170
160
 
171
161
  if __name__ == '__main__':
@@ -190,7 +180,7 @@ if __name__ == '__main__':
190
180
  # except TimeoutError:
191
181
  # print("Task did not complete in time.")
192
182
  async def main():
193
- async with atry_catch("test"):
183
+ async with atry_catch("test", a=1):
194
184
  1 / 0
195
185
 
196
186
 
meutils/io/files_utils.py CHANGED
@@ -49,7 +49,6 @@ def base64_to_bytes(base64_image_string):
49
49
  return base64.b64decode(base64_image_string.split(",", 1)[-1])
50
50
 
51
51
 
52
- @retrying()
53
52
  async def to_bytes(
54
53
  file: Union[UploadFile, str, bytes],
55
54
  headers: Optional[dict] = None
@@ -67,28 +66,32 @@ async def to_bytes(
67
66
  logger.debug(f"FileType: BYTES")
68
67
  return file
69
68
 
70
- file_bytes = None
71
- if isinstance(file, UploadFile):
72
- file_bytes = await file.read()
69
+ elif isinstance(file, str):
70
+ if file.startswith('http'):
71
+ logger.debug(f"FileType: HTTP")
72
+ async with AsyncClient(headers=headers or {}, timeout=120) as cilent: # todo: 缓存 根据大小
73
+ resp = await cilent.get(file)
74
+ file_bytes = resp.content
73
75
 
74
- elif isinstance(file, str) and file.startswith('http'): # url
75
- logger.debug(f"FileType: HTTP")
76
+ elif file.startswith('data:') and ";base64," in file:
77
+ logger.debug(f"FileType: BASE64")
76
78
 
77
- async with AsyncClient(headers=headers or {}, timeout=120) as cilent:
78
- resp = await cilent.get(file)
79
- file_bytes = resp.content
79
+ file_bytes = base64_to_bytes(file)
80
80
 
81
- elif isinstance(file, str) and len(file) > 1024: # base64
82
- logger.debug(f"FileType: BASE64")
81
+ elif Path(file).is_file(): # file
82
+ logger.debug(f"FileType: PATH")
83
83
 
84
- file_bytes = base64_to_bytes(file)
84
+ file_bytes = Path(file).read_bytes()
85
85
 
86
- elif isinstance(file, str) and len(file) < 1024 and Path(file).is_file(): # file
87
- logger.debug(f"FileType: PATH")
86
+ else:
87
+ logger.debug(f"FileType: MAY BASE64")
88
+ file_bytes = base64_to_bytes(file)
88
89
 
89
- file_bytes = Path(file).read_bytes()
90
+ return file_bytes
90
91
 
91
- return file_bytes
92
+ elif isinstance(file, UploadFile):
93
+ file_bytes = await file.read()
94
+ return file_bytes
92
95
 
93
96
 
94
97
  @asynccontextmanager
@@ -168,6 +171,7 @@ async def to_base64(file: Union[UploadFile, str, bytes, list], content_type: Opt
168
171
 
169
172
  if not file: return
170
173
 
174
+ # logger.debug(file)
171
175
  _ = base64.b64encode(await to_bytes(file)).decode('utf-8')
172
176
 
173
177
  if content_type: # "image/png"