omlish 0.0.0.dev227__py3-none-any.whl → 0.0.0.dev229__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.
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 +72 -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.dev229.dist-info}/METADATA +3 -3
  41. {omlish-0.0.0.dev227.dist-info → omlish-0.0.0.dev229.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.dev229.dist-info}/LICENSE +0 -0
  45. {omlish-0.0.0.dev227.dist-info → omlish-0.0.0.dev229.dist-info}/WHEEL +0 -0
  46. {omlish-0.0.0.dev227.dist-info → omlish-0.0.0.dev229.dist-info}/entry_points.txt +0 -0
  47. {omlish-0.0.0.dev227.dist-info → omlish-0.0.0.dev229.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=v1jrq16HMURvVailEoEMurzFCMZNGPDHSAYFTfSJJtA,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=-VdNDTECyo9qUZHJriR1_mLSmczquKBIa2ltNYqSqAA,4868
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.dev229.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
693
+ omlish-0.0.0.dev229.dist-info/METADATA,sha256=e2WiLQbZDPufjlJeoco5XhS16N4Ey5SjNynHbSHlaOI,4176
694
+ omlish-0.0.0.dev229.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
695
+ omlish-0.0.0.dev229.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
696
+ omlish-0.0.0.dev229.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
697
+ omlish-0.0.0.dev229.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
- )