omlish 0.0.0.dev227__py3-none-any.whl → 0.0.0.dev228__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. omlish/__about__.py +3 -3
  2. omlish/diag/lsof.py +4 -5
  3. omlish/diag/ps.py +9 -0
  4. omlish/lite/timeouts.py +1 -1
  5. omlish/marshal/__init__.py +39 -24
  6. omlish/marshal/composite/__init__.py +0 -0
  7. omlish/marshal/{iterables.py → composite/iterables.py} +10 -10
  8. omlish/marshal/{literals.py → composite/literals.py} +9 -9
  9. omlish/marshal/{mappings.py → composite/mappings.py} +10 -10
  10. omlish/marshal/{maybes.py → composite/maybes.py} +11 -11
  11. omlish/marshal/{newtypes.py → composite/newtypes.py} +8 -8
  12. omlish/marshal/{optionals.py → composite/optionals.py} +9 -9
  13. omlish/marshal/objects/__init__.py +7 -0
  14. omlish/marshal/{dataclasses.py → objects/dataclasses.py} +24 -24
  15. omlish/marshal/{helpers.py → objects/helpers.py} +6 -3
  16. omlish/marshal/objects/marshal.py +108 -0
  17. omlish/marshal/objects/metadata.py +124 -0
  18. omlish/marshal/{namedtuples.py → objects/namedtuples.py} +16 -16
  19. omlish/marshal/objects/unmarshal.py +141 -0
  20. omlish/marshal/polymorphism/__init__.py +7 -0
  21. omlish/marshal/polymorphism/marshal.py +66 -0
  22. omlish/marshal/polymorphism/metadata.py +140 -0
  23. omlish/marshal/{unions.py → polymorphism/unions.py} +18 -18
  24. omlish/marshal/polymorphism/unmarshal.py +73 -0
  25. omlish/marshal/singular/__init__.py +0 -0
  26. omlish/marshal/{any.py → singular/any.py} +8 -8
  27. omlish/marshal/{base64.py → singular/base64.py} +9 -9
  28. omlish/marshal/{datetimes.py → singular/datetimes.py} +9 -9
  29. omlish/marshal/{enums.py → singular/enums.py} +9 -9
  30. omlish/marshal/{numbers.py → singular/numbers.py} +8 -8
  31. omlish/marshal/{primitives.py → singular/primitives.py} +8 -8
  32. omlish/marshal/{uuids.py → singular/uuids.py} +8 -8
  33. omlish/marshal/standard.py +32 -32
  34. omlish/os/death.py +70 -4
  35. omlish/os/fcntl.py +11 -12
  36. omlish/os/files.py +18 -3
  37. omlish/os/forkhooks.py +215 -0
  38. omlish/os/pidfiles/pinning.py +4 -0
  39. omlish/sockets/bind.py +4 -4
  40. {omlish-0.0.0.dev227.dist-info → omlish-0.0.0.dev228.dist-info}/METADATA +3 -3
  41. {omlish-0.0.0.dev227.dist-info → omlish-0.0.0.dev228.dist-info}/RECORD +45 -36
  42. omlish/marshal/objects.py +0 -317
  43. omlish/marshal/polymorphism.py +0 -267
  44. {omlish-0.0.0.dev227.dist-info → omlish-0.0.0.dev228.dist-info}/LICENSE +0 -0
  45. {omlish-0.0.0.dev227.dist-info → omlish-0.0.0.dev228.dist-info}/WHEEL +0 -0
  46. {omlish-0.0.0.dev227.dist-info → omlish-0.0.0.dev228.dist-info}/entry_points.txt +0 -0
  47. {omlish-0.0.0.dev227.dist-info → omlish-0.0.0.dev228.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=YGmAnUBszmosQQ_7Hh2wwtDiYdYZ4unNKYzOtALuels,7968
2
- omlish/__about__.py,sha256=F8eB77QCwYkeNA3ZSyaAdpFyPxSptO9EjeuJvnM2Lrg,3380
2
+ omlish/__about__.py,sha256=7YnXltr9so9p-_7zMJK4FLVkWPEZyjsuxoimC7Jjpb4,3380
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
5
5
  omlish/cached.py,sha256=UI-XTFBwA6YXWJJJeBn-WkwBkfzDjLBBaZf4nIJA9y0,510
@@ -204,10 +204,10 @@ omlish/diag/__init__.py,sha256=4S8v0myJM4Zld6_FV6cPe_nSv0aJb6kXftEit0HkiGE,1141
204
204
  omlish/diag/asts.py,sha256=BveUUNUcaAm4Hg55f4ZxGSI313E4L8cCZ5XjHpEkKVI,3325
205
205
  omlish/diag/debug.py,sha256=ClED7kKXeVMyKrjGIxcq14kXk9kvUJfytBQwK9y7c4Q,1637
206
206
  omlish/diag/lslocks.py,sha256=fWI3SZwgEkhipVfSqvzVzREJRShcDYmlYByHBT0LToc,1744
207
- omlish/diag/lsof.py,sha256=-s-0QKFC-_vfdkxhk0m_Lq-PVrXCY7TUFV9ff_Q_gdQ,9319
207
+ omlish/diag/lsof.py,sha256=DnowqvKYah-WCuBHS3DAcZCvlsWJdM9kYNFq97UZDDA,9127
208
208
  omlish/diag/procfs.py,sha256=KaGTAA2Gj8eEEp7MjClRe4aimwzd-HDABThFzvq2cBQ,9684
209
209
  omlish/diag/procstats.py,sha256=UkqxREqfd-38xPYZ9T1SIJISz5ARQCEhTtOZrxtm2dE,777
210
- omlish/diag/ps.py,sha256=mwraPO6Nze_2r9RiC4dyLL0aJ_lHR1_fSN9BlYNBoHw,1651
210
+ omlish/diag/ps.py,sha256=b7ai9O4mGZliNFvBu6PdQfMmct4qpcMTygEf1ISHBLQ,1666
211
211
  omlish/diag/pycharm.py,sha256=7-r_F-whXt8v-0dehxAX-MeMFPM3iZXX9IfeL0GfUtk,4643
212
212
  omlish/diag/pydevd.py,sha256=UN55ZjkWLCVyHxE2CNRRYamuvSKfzWsn0D5oczRTXO4,7536
213
213
  omlish/diag/threads.py,sha256=1-x02VCDZ407gfbtXm1pWK-ubqhqfePm9PMqkHCVoqk,3642
@@ -433,7 +433,7 @@ omlish/lite/resources.py,sha256=YNSmX1Ohck1aoWRs55a-o5ChVbFJIQhtbqE-XwF55Oc,326
433
433
  omlish/lite/runtime.py,sha256=XQo408zxTdJdppUZqOWHyeUR50VlCpNIExNGHz4U6O4,459
434
434
  omlish/lite/secrets.py,sha256=3Mz3V2jf__XU9qNHcH56sBSw95L3U2UPL24bjvobG0c,816
435
435
  omlish/lite/strings.py,sha256=QGxT1Yh4oI8ycsfeobxnjEhvDob_GiAKLeIhZwo1j24,1986
436
- omlish/lite/timeouts.py,sha256=Bd_XaEmaGTsKcORfPt-AJECmf8Bt9XwjBfjkMacpEdM,4954
436
+ omlish/lite/timeouts.py,sha256=wZ6PP1D3B8jpAI7-cQm7wkGTh2sE366XIn6FSMH6DZ4,4959
437
437
  omlish/lite/timing.py,sha256=aVu3hEDB_jyTF_ryZI7iU-xg4q8CNwqpp9Apfru_iwY,196
438
438
  omlish/lite/types.py,sha256=fP5EMyBdEp2LmDxcHjUDtwAMdR06ISr9lKOL7smWfHM,140
439
439
  omlish/lite/typing.py,sha256=U3-JaEnkDSYxK4tsu_MzUn3RP6qALBe5FXQXpD-licE,1090
@@ -455,37 +455,45 @@ omlish/logs/utils.py,sha256=mzHrZ9ji75p5A8qR29eUr05CBAHMb8J753MSkID_VaQ,393
455
455
  omlish/manifests/__init__.py,sha256=P2B0dpT8D7l5lJwRGPA92IcQj6oeXfd90X5-q9BJrKg,51
456
456
  omlish/manifests/load.py,sha256=LrWAvBfdzDkFdLuVwfw2RwFvLjxx-rvfkpU9eBsWeIc,5626
457
457
  omlish/manifests/types.py,sha256=d8bv5tknCJqclRfxCpao_8XxHo2yofhLpVHQTB-MfNw,260
458
- omlish/marshal/__init__.py,sha256=iVA7n31L08Bdub6HKPvYOXVvDhk2CMA6rPeKDL_u1to,2298
459
- omlish/marshal/any.py,sha256=e82OyYK3Emm1P1ClnsnxP7fIWC2iNVyW0H5nK4mLmWM,779
458
+ omlish/marshal/__init__.py,sha256=o7EtBHbciL3OLz6zsMny-UGjyAfFXO1zRGIqVOPEKw0,2591
460
459
  omlish/marshal/base.py,sha256=HEzfby-PgGzIhiRpBkFrkw5-hKacRSC5W_jwLjT8aYw,6740
461
- omlish/marshal/base64.py,sha256=F-3ogJdcFCtWINRgJgWT0rErqgx6f4qahhcg8OrkqhE,1089
462
- omlish/marshal/dataclasses.py,sha256=ZpfNaIdhKwWouWkoQGuequKwrEeehbz9QSQoW3acyPo,7756
463
- omlish/marshal/datetimes.py,sha256=0ffg8cEvx9SMKIXZGD9b7MqpLfmgw0uKKdn6YTfoqok,3714
464
- omlish/marshal/enums.py,sha256=CMAbx6RI2EcQoo7SoD-5q2l-3DFKreWMiOxs6mFpl_4,1472
465
460
  omlish/marshal/exceptions.py,sha256=jwQWn4LcPnadT2KRI_1JJCOSkwWh0yHnYK9BmSkNN4U,302
466
461
  omlish/marshal/factories.py,sha256=Q926jSVjaQLEmStnHLhm_c_vqEysN1LnDCwAsFLIzXw,2970
467
462
  omlish/marshal/forbidden.py,sha256=NDe828hqCQw-AgxcEm8MiDZNxWoBwf3o7sTyvQsSsQ0,867
468
463
  omlish/marshal/global_.py,sha256=K76wB1-pdg4VWgiqR7wyxRNYr-voJApexYW2nV-R4DM,1127
469
- omlish/marshal/helpers.py,sha256=-SOgYJmrURILHpPK6Wu3cCvhj8RJrqfJxuKhh9UMs7o,1102
470
- omlish/marshal/iterables.py,sha256=H9FoCB5RlJW0SVSi3SBD6sxOXN9XRTOUkHRwCYSqRb8,2632
471
- omlish/marshal/literals.py,sha256=m92biF9-PwHGVBx3zG3s2YvklLeOQ7T5IOdgwBJr-NU,1599
472
- omlish/marshal/mappings.py,sha256=XcNOaV708ZHeuIrWiFHC6F1O6U9NyyTKUurvXwIryJo,2789
473
- omlish/marshal/maybes.py,sha256=i-gOQJ-7tdt6sOazAeyCh4N71SK3jWv-BKlkx-fZm-s,2200
474
- omlish/marshal/namedtuples.py,sha256=H0icxcE5FrqgfI9dRc8LlXJy430g_yuILTCVD0Zvfd0,2799
475
464
  omlish/marshal/naming.py,sha256=lIklR_Od4x1ghltAgOzqcKhHs-leeSv2YmFhCHO7GIs,613
476
- omlish/marshal/newtypes.py,sha256=fRpXLoCpoiaqcvl7v92I1_Qt7udn4vsPc1P3UfcBu-8,841
477
465
  omlish/marshal/nop.py,sha256=2mWve_dicFAiUQ2Y5asKkUW-XGmEE9Qi2ClIasFad0c,461
478
- omlish/marshal/numbers.py,sha256=kFRIX9l1yofiYzafV6SnYfEg0PiCsAqeRHOeT6BSxlM,1672
479
- omlish/marshal/objects.py,sha256=74tUmMymimSqgd4a6kyMh_owJe6J7YQXwCXEF-JWt1c,8419
480
- omlish/marshal/optionals.py,sha256=r0XB5rqfasvgZJNrKYd6Unq2U4nHt3JURi26j0dYHlw,1499
481
- omlish/marshal/polymorphism.py,sha256=2SxrfneA9QdhNdxieEGFnHDHpUo3ftETA9dMbCbmbWY,6511
482
- omlish/marshal/primitives.py,sha256=f_6m24Cb-FDGsZpYSas11nLt3xCCEUXugw3Hv4-aNhg,1291
483
466
  omlish/marshal/registries.py,sha256=FvC6qXHCizNB2QmU_N3orxW7iqfGYkiUXYYdTRWS6HA,2353
484
- omlish/marshal/standard.py,sha256=-iA2o674AW1uNVabcA9Dtr6z0gyFS5yLP80nBQ8R5qY,3479
485
- omlish/marshal/unions.py,sha256=tT4W-mxuPi7s_kdl25_AUltsurYPO_0mQl2CiVmNonY,4357
467
+ omlish/marshal/standard.py,sha256=ncaoD_OyCzS5H8bt3WAp5z7k1mWPFeOgAYBVaBLq4Sg,3783
486
468
  omlish/marshal/utils.py,sha256=puKJpwPpuDlMOIrKMcLTRLJyMiL6n_Xs-p59AuDEymA,543
487
- omlish/marshal/uuids.py,sha256=H4B7UX_EPNmP2tC8bubcKrPLTS4aQu98huvbXQ3Zv2g,910
488
469
  omlish/marshal/values.py,sha256=ssHiWdg_L6M17kAn8GiGdPW7UeQOm3RDikWkvwblf5I,263
470
+ omlish/marshal/composite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
471
+ omlish/marshal/composite/iterables.py,sha256=tOMjJ-nyYBrRnAGAlT2scV3iR9QSic8La-1qFcy9yNk,2642
472
+ omlish/marshal/composite/literals.py,sha256=0fTwQVSQJe9L17grcLq5hMuoYD7vHRFgdHR5-Teq0g8,1608
473
+ omlish/marshal/composite/mappings.py,sha256=92oAqYzzTdRNhFDtmukpJd8anoi3pt2nX5XhLTlM_Dg,2799
474
+ omlish/marshal/composite/maybes.py,sha256=4rxTv769Uk4gQGAnE6urVnMscF1vhcnwqP_lm5QzSoM,2211
475
+ omlish/marshal/composite/newtypes.py,sha256=lYCacdR2BlLWMT1kc8o08UjsmJ6aYlAHkrzG8BozWCM,849
476
+ omlish/marshal/composite/optionals.py,sha256=iQgSrb9Xyb_IP81YREAZ0xKYXImLgMILGLBnYL2lFWw,1508
477
+ omlish/marshal/objects/__init__.py,sha256=F4wej8L_tedC8ETYxAnmKfdPR9TjsqIus9Z3nZofYuc,182
478
+ omlish/marshal/objects/dataclasses.py,sha256=Fo15maLrWICq4H3YlZpa0PjnJTC4eqG1IF0C-88qCKs,7780
479
+ omlish/marshal/objects/helpers.py,sha256=85GZp4h3Yo0GYGmnZpKgNxkWnSk8h2R21nfDLU2DtM0,1110
480
+ omlish/marshal/objects/marshal.py,sha256=rdZsDWKgLBZxV0ZQlwHTJv9iUg0lC57trJHBOFKvuLo,2636
481
+ omlish/marshal/objects/metadata.py,sha256=QVD7DRhXbLda_Edgpc3OD1xT9fthmeaaj6l_nTE1PMM,3307
482
+ omlish/marshal/objects/namedtuples.py,sha256=ENWyiYZhTwDRqUkkWrHeNcoHGEo5GW634jMuBUc3654,2815
483
+ omlish/marshal/objects/unmarshal.py,sha256=-83sSgL6WX6C3JfXZr64ZLYi3SsJC9kyiGAbEQbVHQI,3620
484
+ omlish/marshal/polymorphism/__init__.py,sha256=e2UTrSL0qp7w_1vkdxDWd7sXlWhep2KPV49-BB64ma8,130
485
+ omlish/marshal/polymorphism/marshal.py,sha256=Lraih0Dhkcwu6Bb6QkrYOWoMIubh46VQkXxJQWisA8Y,1827
486
+ omlish/marshal/polymorphism/metadata.py,sha256=hbXqkYKXhfJeMllzI0Ubeeqbq201khVN8uprgVhMpHM,3046
487
+ omlish/marshal/polymorphism/unions.py,sha256=YwsK9T3okGiHj88LTFNdUvuH7VkCsD-aTnZseKzhpdA,4350
488
+ omlish/marshal/polymorphism/unmarshal.py,sha256=gdWTgpl4hXBqac1gHmg_23VMb7x42CE2x-3oRpCaLwU,2047
489
+ omlish/marshal/singular/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
490
+ omlish/marshal/singular/any.py,sha256=42XmUbX_AaiHGFwS2QmA-huPCcZ1_jzVyrnBUYVm21U,787
491
+ omlish/marshal/singular/base64.py,sha256=gQIkFN60lNEuSiu3MDQFoHwMZTtzDbrBRtNpFZ2HXew,1098
492
+ omlish/marshal/singular/datetimes.py,sha256=1PDVFF6TGkGxGUno8TaFGRof0DQUookYf_X2Nl8T4V0,3723
493
+ omlish/marshal/singular/enums.py,sha256=0FSRj8fiM9LrRrFtlWrMsjG-ualfirGNSP0H-36J4sA,1481
494
+ omlish/marshal/singular/numbers.py,sha256=12a8HxjDHMTgtJTxO7VY_h5llaPyYB-QEPY09dUFOec,1680
495
+ omlish/marshal/singular/primitives.py,sha256=EZi2AIi_Onw1pekAiL4ujz4w-ASuOGWCu4MUIE_dCnk,1299
496
+ omlish/marshal/singular/uuids.py,sha256=rZoE6NE5z6x_ZRmVMjjR2iK7CR8ijfDOvhMKgmm8Mgk,918
489
497
  omlish/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
490
498
  omlish/math/bits.py,sha256=yip1l8agOYzT7bFyMGc0RR3XlnGCfHMpjw_SECLLh1I,3477
491
499
  omlish/math/floats.py,sha256=UimhOT7KRl8LXTzOI5cQWoX_9h6WNWe_3vcOuO7-h_8,327
@@ -495,10 +503,11 @@ omlish/multiprocessing/proxies.py,sha256=bInhGds2rv6xT9q3qRMlZuSXFAjwfspkiohXZ36
495
503
  omlish/multiprocessing/spawn.py,sha256=sTvPLIJGYnjjI6ASqhFzHF-97tCnaOXX7u7s-33SUMw,1875
496
504
  omlish/os/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
497
505
  omlish/os/atomics.py,sha256=KhWNeh4mzU3M-TF0v8uR6hUqMfZJW42MeyIK9Jl6R0k,5246
498
- omlish/os/death.py,sha256=_JV88yxwYIalamIMuqmGTQ4KYd0t-UHLjVkdoliPWL8,2943
506
+ omlish/os/death.py,sha256=kxcAWw91zvvWT5qxXbKVg-YEOJXxx658VCdkCTNPTag,4825
499
507
  omlish/os/deathsig.py,sha256=hk9Yq2kyDdI-cI7OQH7mOfpRbOKzY_TfPKEqgrjVYbA,641
500
- omlish/os/fcntl.py,sha256=hSlCqzMu5iqEsxlp9me6KtoG9FK7g3sdjZIpDba-kLQ,1458
501
- omlish/os/files.py,sha256=O1Um1iCLeIzDSKQq2zByVC_4NZ3tLMqv6vICyU21U3Q,861
508
+ omlish/os/fcntl.py,sha256=riQf9iEEEIC28lJp8ud06MU56w2XJHJ9nBFtck_hdhc,1501
509
+ omlish/os/files.py,sha256=WJ_42vsZIZukQURN3TTccp-n74ZNhbux_ps3TLbHj18,1106
510
+ omlish/os/forkhooks.py,sha256=PbcMrPF_7D0QBm73e55I_XIk4yQzsdj-L6rpe_eyAFM,5024
502
511
  omlish/os/journald.py,sha256=2nI8Res1poXkbLc31--MPUlzYMESnCcPUkIxDOCjZW0,3903
503
512
  omlish/os/linux.py,sha256=whJ6scwMKSFBdXiVhJW0BCpJV4jOGMr-a_a3Bhwz6Ls,18938
504
513
  omlish/os/paths.py,sha256=hqPiyg_eYaRoIVPdAeX4oeLEV4Kpln_XsH0tHvbOf8Q,844
@@ -507,7 +516,7 @@ omlish/os/temp.py,sha256=P97KiVeNB7rfGn4tlgU5ro86JUxAsiphLMlxsjQgfB0,1198
507
516
  omlish/os/pidfiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
508
517
  omlish/os/pidfiles/manager.py,sha256=XP_0ynjWDG2wjRN3sIKjmFafpf-er3AYm8E7aXs16fA,3209
509
518
  omlish/os/pidfiles/pidfile.py,sha256=WmZt_c8fvztPgZQnYHhcQCKWgHqAEsaI3Ggz6Wqgkc8,3748
510
- omlish/os/pidfiles/pinning.py,sha256=YmlHK4G4t38Uldx-kHQBSMSwCzETevDYBDED9HhCCvQ,6153
519
+ omlish/os/pidfiles/pinning.py,sha256=_AwYjJc1UGX7mdCOk4mItJJcsOJo3RW2ebBOm2noW5Y,6359
511
520
  omlish/reflect/__init__.py,sha256=JBWwxKwP4IEaomkK0PTju02STU1BVXT14SCrShT1Sm0,769
512
521
  omlish/reflect/inspect.py,sha256=veJ424-9oZrqyvhVpvxOi7hcKW-PDBkdYL2yjrFlk4o,495
513
522
  omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
@@ -526,7 +535,7 @@ omlish/secrets/subprocesses.py,sha256=ffjfbgPbEE_Pwb_87vG4yYR2CGZy3I31mHNCo_0JtH
526
535
  omlish/secrets/tempssl.py,sha256=tlwRrbHHvgKJtNAC31I5sDKryya4fagqN6kGt-tV4Qg,1874
527
536
  omlish/sockets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
528
537
  omlish/sockets/addresses.py,sha256=vbVeQBkzI513H4vRv-JS89QtRbr9U8v5zqkm3oODl_s,1869
529
- omlish/sockets/bind.py,sha256=TnG5nm0pnuMxRA02TG2W40RbutrPA6tkOJtbZvBjDWU,8063
538
+ omlish/sockets/bind.py,sha256=uRHZJvBxWXadd3Qt7deDEJ1rWzjC-lVodRgPA6VMwNU,8025
530
539
  omlish/sockets/handlers.py,sha256=Gj6xZoo4vommge8XvkehYw3B7O4aql2P4qzZIIa0p24,462
531
540
  omlish/sockets/io.py,sha256=lfhTkB7NnAIx9kuQhAkwgsEUXY78Mp1_WtYrIQNS_k8,1408
532
541
  omlish/sockets/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -680,9 +689,9 @@ omlish/text/indent.py,sha256=YjtJEBYWuk8--b9JU_T6q4yxV85_TR7VEVr5ViRCFwk,1336
680
689
  omlish/text/minja.py,sha256=jZC-fp3Xuhx48ppqsf2Sf1pHbC0t8XBB7UpUUoOk2Qw,5751
681
690
  omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
682
691
  omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
683
- omlish-0.0.0.dev227.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
684
- omlish-0.0.0.dev227.dist-info/METADATA,sha256=Pl1bZYBMsE5uKxtT265EkiV61cZ6y6-u11m6uqsXwz4,4176
685
- omlish-0.0.0.dev227.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
686
- omlish-0.0.0.dev227.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
687
- omlish-0.0.0.dev227.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
688
- omlish-0.0.0.dev227.dist-info/RECORD,,
692
+ omlish-0.0.0.dev228.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
693
+ omlish-0.0.0.dev228.dist-info/METADATA,sha256=-HhLcpKh_NMYQIcIENf1Dyen3kQU2vxd2nAe_weG7wk,4176
694
+ omlish-0.0.0.dev228.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
695
+ omlish-0.0.0.dev228.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
696
+ omlish-0.0.0.dev228.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
697
+ omlish-0.0.0.dev228.dist-info/RECORD,,
omlish/marshal/objects.py DELETED
@@ -1,317 +0,0 @@
1
- """
2
- TODO:
3
- - cfg naming
4
- - adapters for dataclasses / namedtuples / user objects (as configured)
5
- - mro-merge ObjectMetadata
6
- - key ordering override - like slice, -1 means last
7
- """
8
- import collections.abc
9
- import typing as ta
10
-
11
- from .. import cached
12
- from .. import check
13
- from .. import collections as col
14
- from .. import dataclasses as dc
15
- from .. import lang
16
- from .. import reflect as rfl
17
- from .base import MarshalContext
18
- from .base import Marshaler
19
- from .base import MarshalerFactory
20
- from .base import UnmarshalContext
21
- from .base import Unmarshaler
22
- from .base import UnmarshalerFactory
23
- from .naming import Naming
24
- from .values import Value
25
-
26
-
27
- ##
28
-
29
-
30
- @dc.dataclass(frozen=True, kw_only=True)
31
- class FieldOptions:
32
- omit_if: ta.Callable[[ta.Any], bool] | None = None
33
-
34
- default: lang.Maybe[ta.Any] = dc.xfield(default=lang.empty(), check_type=lang.Maybe)
35
-
36
- embed: bool = False
37
-
38
- no_marshal: bool = False
39
- no_unmarshal: bool = False
40
-
41
-
42
- DEFAULT_FIELD_OPTIONS = FieldOptions()
43
- FIELD_OPTIONS_KWARGS: frozenset[str] = frozenset(dc.fields_dict(FieldOptions).keys())
44
-
45
-
46
- @dc.dataclass(frozen=True, kw_only=True)
47
- class FieldMetadata:
48
- name: str | None = None
49
- alts: ta.Iterable[str] | None = None
50
-
51
- options: FieldOptions = DEFAULT_FIELD_OPTIONS
52
-
53
- marshaler: Marshaler | None = dc.xfield(None, check_type=(Marshaler, None))
54
- marshaler_factory: MarshalerFactory | None = None
55
-
56
- unmarshaler: Unmarshaler | None = dc.xfield(None, check_type=(Unmarshaler, None))
57
- unmarshaler_factory: UnmarshalerFactory | None = None
58
-
59
- def update(self, **kwargs: ta.Any) -> 'FieldMetadata':
60
- okw = {k: v for k, v in kwargs.items() if k in FIELD_OPTIONS_KWARGS}
61
- mkw = {k: v for k, v in kwargs.items() if k not in FIELD_OPTIONS_KWARGS}
62
- return dc.replace(
63
- self,
64
- **(dict(options=dc.replace(self.options, **okw)) if okw else {}),
65
- **mkw,
66
- )
67
-
68
-
69
- @dc.dataclass(frozen=True, kw_only=True)
70
- class ObjectMetadata:
71
- field_naming: Naming | None = None
72
-
73
- unknown_field: str | None = None
74
- source_field: str | None = None
75
-
76
- @cached.property
77
- def specials(self) -> 'ObjectSpecials':
78
- return ObjectSpecials(
79
- unknown=self.unknown_field,
80
- source=self.source_field,
81
- )
82
-
83
- field_defaults: FieldMetadata = FieldMetadata()
84
-
85
- ignore_unknown: bool = False
86
-
87
-
88
- @dc.dataclass(frozen=True, kw_only=True)
89
- class ObjectSpecials:
90
- unknown: str | None = None
91
- source: str | None = None
92
-
93
- @cached.property
94
- def set(self) -> frozenset[str]:
95
- return frozenset(v for v in dc.asdict(self).values() if v is not None)
96
-
97
-
98
- ##
99
-
100
-
101
- @dc.dataclass(frozen=True, kw_only=True)
102
- class FieldInfo:
103
- name: str
104
- type: ta.Any
105
-
106
- marshal_name: str | None
107
- unmarshal_names: ta.Sequence[str]
108
-
109
- metadata: FieldMetadata = FieldMetadata()
110
-
111
- options: FieldOptions = FieldOptions()
112
-
113
-
114
- @dc.dataclass(frozen=True)
115
- class FieldInfos:
116
- lst: ta.Sequence[FieldInfo]
117
-
118
- def __iter__(self) -> ta.Iterator[FieldInfo]:
119
- return iter(self.lst)
120
-
121
- def __len__(self) -> int:
122
- return len(self.lst)
123
-
124
- @cached.property
125
- @dc.init
126
- def by_name(self) -> ta.Mapping[str, FieldInfo]:
127
- return col.make_map(((fi.name, fi) for fi in self), strict=True)
128
-
129
- @cached.property
130
- @dc.init
131
- def by_marshal_name(self) -> ta.Mapping[str, FieldInfo]:
132
- return col.make_map(((fi.marshal_name, fi) for fi in self if fi.marshal_name is not None), strict=True)
133
-
134
- @cached.property
135
- @dc.init
136
- def by_unmarshal_name(self) -> ta.Mapping[str, FieldInfo]:
137
- return col.make_map(((n, fi) for fi in self for n in fi.unmarshal_names), strict=True)
138
-
139
-
140
- ##
141
-
142
-
143
- @dc.dataclass(frozen=True)
144
- class ObjectMarshaler(Marshaler):
145
- fields: ta.Sequence[tuple[FieldInfo, Marshaler]]
146
-
147
- _: dc.KW_ONLY
148
-
149
- specials: ObjectSpecials = ObjectSpecials()
150
-
151
- def marshal(self, ctx: MarshalContext, o: ta.Any) -> Value:
152
- ret: dict[str, ta.Any] = {}
153
- for fi, m in self.fields:
154
- v = getattr(o, fi.name)
155
-
156
- if fi.options.omit_if is not None and fi.options.omit_if(v):
157
- continue
158
-
159
- if fi.name in self.specials.set:
160
- continue
161
-
162
- mn = fi.marshal_name
163
- if mn is None:
164
- continue
165
-
166
- mv = m.marshal(ctx, v)
167
-
168
- if fi.options.embed:
169
- for ek, ev in check.isinstance(mv, collections.abc.Mapping).items():
170
- ret[mn + check.non_empty_str(ek)] = ev
171
-
172
- else:
173
- ret[mn] = mv
174
-
175
- if self.specials.unknown is not None:
176
- if (ukf := getattr(o, self.specials.unknown)):
177
- if (dks := set(ret) & set(ukf)):
178
- raise KeyError(f'Unknown field keys duplicate fields: {dks!r}')
179
-
180
- ret.update(ukf) # FIXME: marshal?
181
-
182
- return ret
183
-
184
-
185
- @dc.dataclass(frozen=True)
186
- class SimpleObjectMarshalerFactory(MarshalerFactory):
187
- dct: ta.Mapping[type, ta.Sequence[FieldInfo]]
188
-
189
- _: dc.KW_ONLY
190
-
191
- specials: ObjectSpecials = ObjectSpecials()
192
-
193
- def guard(self, ctx: MarshalContext, rty: rfl.Type) -> bool:
194
- return isinstance(rty, type) and rty in self.dct
195
-
196
- def fn(self, ctx: MarshalContext, rty: rfl.Type) -> Marshaler:
197
- ty = check.isinstance(rty, type)
198
-
199
- flds = FieldInfos(self.dct[ty])
200
-
201
- fields = [
202
- (fi, ctx.make(fi.type))
203
- for fi in flds
204
- ]
205
-
206
- return ObjectMarshaler(
207
- fields,
208
- specials=self.specials,
209
- )
210
-
211
-
212
- ##
213
-
214
-
215
- @dc.dataclass(frozen=True)
216
- class ObjectUnmarshaler(Unmarshaler):
217
- cls: type
218
- fields_by_unmarshal_name: ta.Mapping[str, tuple[FieldInfo, Unmarshaler]]
219
-
220
- _: dc.KW_ONLY
221
-
222
- specials: ObjectSpecials = ObjectSpecials()
223
-
224
- defaults: ta.Mapping[str, ta.Any] | None = None
225
-
226
- embeds: ta.Mapping[str, type] | None = None
227
- embeds_by_unmarshal_name: ta.Mapping[str, tuple[str, str]] | None = None
228
-
229
- ignore_unknown: bool = False
230
-
231
- def unmarshal(self, ctx: UnmarshalContext, v: Value) -> ta.Any:
232
- ma = check.isinstance(v, collections.abc.Mapping)
233
-
234
- u: ta.Any
235
- kw: dict[str, ta.Any] = {}
236
- ukf: dict[str, ta.Any] | None = None
237
-
238
- ekws: dict[str, dict[str, ta.Any]] = {en: {} for en in self.embeds or ()}
239
-
240
- if self.specials.source is not None:
241
- kw[self.specials.source] = v
242
-
243
- if self.specials.unknown is not None:
244
- kw[self.specials.unknown] = ukf = {}
245
-
246
- for k, mv in ma.items():
247
- ks = check.isinstance(k, str)
248
-
249
- try:
250
- fi, u = self.fields_by_unmarshal_name[ks]
251
-
252
- except KeyError:
253
- if ukf is not None:
254
- ukf[ks] = mv # FIXME: unmarshal?
255
- continue
256
-
257
- if self.ignore_unknown:
258
- continue
259
-
260
- raise
261
-
262
- if self.embeds_by_unmarshal_name and (en := self.embeds_by_unmarshal_name.get(ks)):
263
- tkw, tk = ekws[en[0]], en[1]
264
- else:
265
- tkw, tk = kw, fi.name
266
-
267
- if tk in tkw:
268
- raise KeyError(f'Duplicate keys for field {tk!r}: {ks!r}')
269
-
270
- tkw[tk] = u.unmarshal(ctx, mv)
271
-
272
- for em, ecls in self.embeds.items() if self.embeds else ():
273
- ekw = ekws[em]
274
- ev = ecls(**ekw)
275
- kw[em] = ev
276
-
277
- if self.defaults:
278
- for dk, dv in self.defaults.items():
279
- kw.setdefault(dk, dv)
280
-
281
- return self.cls(**kw)
282
-
283
-
284
- @dc.dataclass(frozen=True)
285
- class SimpleObjectUnmarshalerFactory(UnmarshalerFactory):
286
- dct: ta.Mapping[type, ta.Sequence[FieldInfo]]
287
-
288
- _: dc.KW_ONLY
289
-
290
- specials: ObjectSpecials = ObjectSpecials()
291
-
292
- def guard(self, ctx: UnmarshalContext, rty: rfl.Type) -> bool:
293
- return isinstance(rty, type) and rty in self.dct
294
-
295
- def fn(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
296
- ty = check.isinstance(rty, type)
297
-
298
- flds = FieldInfos(self.dct[ty])
299
-
300
- fields_by_unmarshal_name = {
301
- n: (fi, ctx.make(fi.type))
302
- for fi in flds
303
- for n in fi.unmarshal_names
304
- }
305
-
306
- defaults = {
307
- fi.name: fi.options.default.must()
308
- for fi in flds
309
- if fi.options.default.present
310
- }
311
-
312
- return ObjectUnmarshaler(
313
- ty,
314
- fields_by_unmarshal_name,
315
- specials=self.specials,
316
- defaults=defaults,
317
- )