diff --git a/README.md b/README.md index 0d551e5..048eeae 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,11 @@ Feedback and contributions welcome. Among others, the following sensors are available: - **Mileage Sensor**: Keeps track of your bike's total mileage. +- **Remaining Range**: Indicates the estimated remaining range. - **Battery Level Sensor**: Monitors the current battery status. - **Usage duration**: Tracks the total usage duration of the bike. - **Software Update Alerts**: Notifies you of available software updates for your bike. - **Location Tracking**: Tracks the current position of your Cowboy bike. -- ... and other. ## Installation via HACS diff --git a/custom_components/cowboy/sensor.py b/custom_components/cowboy/sensor.py index c47c417..2256fac 100644 --- a/custom_components/cowboy/sensor.py +++ b/custom_components/cowboy/sensor.py @@ -25,6 +25,8 @@ class CowboySensorEntityDescription(SensorEntityDescription): """Describes Cowboy sensor entity.""" attrs: Callable[[dict[str, Any]], dict[str, Any]] = lambda data: {} + value_fn: Callable[[dict[str, Any]], StateType] | None = None + SENSOR_TYPES: tuple[CowboySensorEntityDescription, ...] = ( @@ -66,6 +68,18 @@ class CowboySensorEntityDescription(SensorEntityDescription): icon="mdi:battery-heart", entity_registry_visible_default=False, ), + CowboySensorEntityDescription( + key="remaining_range", + translation_key="remaining_range", + native_unit_of_measurement=UnitOfLength.KILOMETERS, + device_class=SensorDeviceClass.DISTANCE, + suggested_display_precision=0, + state_class=SensorStateClass.MEASUREMENT, + value_fn=lambda data: data['battery_state_of_charge'] / 100 * next( + (autonomy['full_battery_range'] for autonomy in data['autonomies'] if autonomy['ride_mode'] == data['last_ride_mode']), + None + ) + ), ) @@ -99,7 +113,12 @@ def __init__( @callback def _handle_coordinator_update(self) -> None: """Handle updated data from the coordinator.""" - self._attr_native_value = self.coordinator.data[self.entity_description.key] + if not self.entity_description.value_fn: + self._attr_native_value = self.coordinator.data[self.entity_description.key] + else: + self._attr_native_value = self.entity_description.value_fn( + self.coordinator.data + ) self._attr_extra_state_attributes = self.entity_description.attrs( self.coordinator.data ) diff --git a/custom_components/cowboy/strings.json b/custom_components/cowboy/strings.json index 27f933b..1c76595 100644 --- a/custom_components/cowboy/strings.json +++ b/custom_components/cowboy/strings.json @@ -22,6 +22,9 @@ "total_distance": { "name": "Mileage" }, + "remaining_range": { + "name": "Remaining range" + }, "total_duration": { "name": "Time driven" }, diff --git a/custom_components/cowboy/translations/en.json b/custom_components/cowboy/translations/en.json index 8f7990c..3f608e6 100644 --- a/custom_components/cowboy/translations/en.json +++ b/custom_components/cowboy/translations/en.json @@ -36,6 +36,9 @@ "pcb_battery_state_of_charge": { "name": "Remaining battery (internal PCB)" }, + "remaining_range": { + "name": "Remaining range" + }, "total_co2_saved": { "name": "Saved CO2" }, diff --git a/poetry.lock b/poetry.lock index 503fd05..4763392 100644 --- a/poetry.lock +++ b/poetry.lock @@ -671,13 +671,13 @@ files = [ [[package]] name = "homeassistant" -version = "2023.12.3" +version = "2023.12.4" description = "Open-source home automation platform running on Python 3." optional = false python-versions = ">=3.11.0" files = [ - {file = "homeassistant-2023.12.3-py3-none-any.whl", hash = "sha256:795d1ab14c471193b9130b653d983036deed39397cce57b1d00e89c9fcc3839a"}, - {file = "homeassistant-2023.12.3.tar.gz", hash = "sha256:72fb1892e406e22dc61bc54627e1c64a376fa5204bce1d01158410a6856ae056"}, + {file = "homeassistant-2023.12.4-py3-none-any.whl", hash = "sha256:0a521e712d126a88febe747cd4215838774c0954a518c8c314d0fde5082834be"}, + {file = "homeassistant-2023.12.4.tar.gz", hash = "sha256:75e6b43da702cc25a1321da0c3f915247c180a84fbcc9e76a9341b1e6a9cc14f"}, ] [package.dependencies] @@ -1500,54 +1500,54 @@ multidict = ">=4.0" [[package]] name = "zlib-ng" -version = "0.3.0" +version = "0.4.0" description = "Drop-in replacement for zlib and gzip modules using zlib-ng" optional = false python-versions = ">=3.8" files = [ - {file = "zlib-ng-0.3.0.tar.gz", hash = "sha256:f2d196b70c733a1e59f380f626fb68fe65aa6fe080a8aa5039c898e83367761d"}, - {file = "zlib_ng-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fff10cb549818e000c387ded9d9a9d3b1e923ee3893139045fc6336dcd884dcb"}, - {file = "zlib_ng-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bfb7b0968826fe0c62776c87353780d5043c96a1919805feff56a92495a2255"}, - {file = "zlib_ng-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6452e4111ee68b021c284a7e5a4683460fb8f1cdbb647b54a6712128fcf6858c"}, - {file = "zlib_ng-0.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e0f35340cad006626f1c05283427600e92acb2c36874c04a15e3e87ead258f0"}, - {file = "zlib_ng-0.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4806d7266ded6e0ac8dff6980be4dae7ed352fb7553952c7def802d89b64fc6"}, - {file = "zlib_ng-0.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f1226b9e67fd0c96ebd5b0034e39ba870f94fefcb7608ea77784404097f76f2d"}, - {file = "zlib_ng-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d2c888ed782d8ebaca276226b5c00e5c8293f0c2833abe0623aae331fbd0c289"}, - {file = "zlib_ng-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32f28b8b8de5ed1be2221f2f8c93da3e483b18d22d6a0eb8638b3d24d8a3b099"}, - {file = "zlib_ng-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cb3543180ebe0c424c86d7310cbb9d02e34829058ab0cf4af0c26fd9f9ac999"}, - {file = "zlib_ng-0.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:15ad5669da5b4f3a02551d17153383545dce8b7413837a37c06e1f81f7942240"}, - {file = "zlib_ng-0.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e2a02b22a6d6bde42078776ddb6caed8ec92c21bf4061043c99a6030c1a4cd92"}, - {file = "zlib_ng-0.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:0ca4abd5450bede90d89709f2067ba8a95bc38735c210636021a90cdfdcd1fb2"}, - {file = "zlib_ng-0.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:42ff731da72d4656e6f98168c24c684b6c37896a5be538a72bfbc3e01af7e016"}, - {file = "zlib_ng-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:598300c97f9176390c6f6ab07281bde0c14dcf5e0e20d7ff0a099224191b4f2a"}, - {file = "zlib_ng-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdc7bae8115737fe5ca2ca7fce7a4eebbad48d35bd364912c6c29b85573efb7c"}, - {file = "zlib_ng-0.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ecf3887667473d884f2e9c20bc5692f037bfdd044d689094fefb94922e2d7633"}, - {file = "zlib_ng-0.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dd1d37d41240b069b1b3b461a879f7e12905283e2c62c732085dc8e285ced8ba"}, - {file = "zlib_ng-0.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:57af6e10b3e547784ad6a04863a6fea4d22ae16c7d0d35ceb86fc570be166f4c"}, - {file = "zlib_ng-0.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6801b46a3622707ab3ae69d4b98f162e90101aba92d8e78e5bbaf9cbde7917fd"}, - {file = "zlib_ng-0.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13b62b419024fb883589210af129a2cbaf0b62cf587a7b2f611dea2199212479"}, - {file = "zlib_ng-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:392b31014b66acea7fa647ff10ec200b2895567821a565318f416d1b2ea4508b"}, - {file = "zlib_ng-0.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f50adbb68edaf379e13a5f09a6ba9e7f7248cf20bb42f6dd2f6058887ddbdeb8"}, - {file = "zlib_ng-0.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c511edc459ff2c01bae88346960596d8d3601c1d4f43ea51b8ba510fdd40ba0f"}, - {file = "zlib_ng-0.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:8489ec5a89f388ca19e3094687f8cf48503fe490fec5f2f03cab8c952e3a2d31"}, - {file = "zlib_ng-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ddf11fa6b4db28c00cbde71b1c056cd474a7bcf247b60d57a6be5fa1033d720c"}, - {file = "zlib_ng-0.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fb22de84b0dfd9db6681ce5d0fed7b8fad32efa7bc91955596309ccaf19a359"}, - {file = "zlib_ng-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b79e1c050d5ae32179425ba2d58608b3fda078cef8a1d835e088cf42efb1e9a"}, - {file = "zlib_ng-0.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:fb725c24a2581d589f485881332a0c0972059cd4161652818f567b7f750c72bd"}, - {file = "zlib_ng-0.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f64602fa00862de0f3ca7bcb0731e516af0f3139724b1332655762d5a81960b5"}, - {file = "zlib_ng-0.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e853afe2ff85637947c477a39821562888dd43dd3b75083d6ad93f88fb1c0635"}, - {file = "zlib_ng-0.3.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fc17348077275a9a9c7c85b673dbf4f2c8e4cd0ac1db4c86538d3487ca8792b0"}, - {file = "zlib_ng-0.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81df287b2fdc881562689df44046b93c95950f10bf09833e68fbb8e4276a1afc"}, - {file = "zlib_ng-0.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91e597a97f3d78d9d26d7ab17149ae906243d22e164578011ca7e2d26adfb8a6"}, - {file = "zlib_ng-0.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:94ef91d8ffc81e6c076bd3c479eab377e2b93868e2555684b9c75d5decdc470b"}, - {file = "zlib_ng-0.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c3e623b95a71b9ed962bf1f7be34b2132089af9032889a3d8ee2336dfe4f4132"}, - {file = "zlib_ng-0.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b67bd473fcc663b46a77f35d22c139b3da339b2da7efecc93589a10e4cf2d4e"}, - {file = "zlib_ng-0.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5972e28e087ea14d133cf7db9d22ccf714f0a1b7e6ca587dad93bc2533cde660"}, - {file = "zlib_ng-0.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:336c9e7bb5a7a7b64df074286d150c5922f1648343e6079b459ed1222eb371f8"}, - {file = "zlib_ng-0.3.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6c380255b6f439fe71b1b79e1a874671414d9018b834d457df40e449e85352e3"}, - {file = "zlib_ng-0.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02306dfc7961d2d2e94f6d08ea85a4818952b618d858e5a67a58fa6c4c75e67b"}, - {file = "zlib_ng-0.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6458064fe7c8780ed1820952bd4655f8241a76556e7db167b5854627286411ce"}, - {file = "zlib_ng-0.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8402e21841406874837d94e734742db95a76e5cbd37356009b0729aae80eec53"}, + {file = "zlib-ng-0.4.0.tar.gz", hash = "sha256:3b730881aaeb86f9a4995de5e22499406ccf92f8508b5c017c343d27570a8c0a"}, + {file = "zlib_ng-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b53458b4baa0554df93430bfda71a6861510d6641ac75192e6b9c2485d01a3a"}, + {file = "zlib_ng-0.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ac2405b42420abd9dccfe5d5f05c052aaf88ee66aec0d3fb4ee171826846d8a"}, + {file = "zlib_ng-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70e192695fd7bac2c3db529a873f57e10a8d42383223b0c5dc281793be4b1b83"}, + {file = "zlib_ng-0.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9b49346d528da8e13575bb8bfa2ee5f74398422e81d4be6001afb5c0621dc412"}, + {file = "zlib_ng-0.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:55a47ce2249581bc00decc5fc4aadf1f48c5edde770ff5aa649c2f0b782c9aba"}, + {file = "zlib_ng-0.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ec04f0a21e711a654a9ea1dc5966c29231301625cfc199ca1ec0cdedbf921377"}, + {file = "zlib_ng-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:096d319b94454c174dde78886a8d4a0f488186a4fbd006bd1819360e0e8b5348"}, + {file = "zlib_ng-0.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07694a956028a66133c52ebf802d6185c6e986fbec5c4e403b997e044b30db8d"}, + {file = "zlib_ng-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd4c9d4945f366a0f295e9356dd9ef291544adbe42cabcc121a28b202dd8809b"}, + {file = "zlib_ng-0.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:39f69f92c7f8d107f406d981c1383c749894d737699116138de14497b0e0b041"}, + {file = "zlib_ng-0.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6db621bdd34ef500ec1b44a5190fe5e967eee9386140be6bc8769ec15e355c4b"}, + {file = "zlib_ng-0.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b2a635d018b3dbed6844ceca08c0f9a170ebdcc9299ab080e4f63b757faaeae"}, + {file = "zlib_ng-0.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:274da13e42dc2197f8c24e321cc9cc4d1eef790512485462d72832343fe8f72a"}, + {file = "zlib_ng-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b87aba7e64de1efb5a965d51551b63efc24d9cc77671b7ea28f336162edc733"}, + {file = "zlib_ng-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e926e2f8a31a3bfd0e1e2ffc3fb9956126ee17b4477ee98aa4e51b7bdc7ad41d"}, + {file = "zlib_ng-0.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ba917d5e574ae67b3984835791b5887592d0cb2877d5bfe22c3ab7ef30a28979"}, + {file = "zlib_ng-0.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e1e122967cacce2f1f04b5ee1ea89642997f8a312be6b527dc4a8e92deb834dd"}, + {file = "zlib_ng-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:57c53634157142b208b6dd4dbb21b6b67392afb7b181be0e97a09bfc7201819b"}, + {file = "zlib_ng-0.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8faa04e00261afd0e532392f70e74428687d00a37b6c3e63e6eb27ad8a81a629"}, + {file = "zlib_ng-0.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7dca9af5f84edcc98408af60c4fd220fe2ba3f6e7324b6b97483ac430e1ba89b"}, + {file = "zlib_ng-0.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f338be6e62e05636467b89c26e0404d0e3d726da74aa3510be1e19e7681832b"}, + {file = "zlib_ng-0.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4edeb933440e94d2c47331314edfda20f51a3640eb8e12a7a478859874d35a4a"}, + {file = "zlib_ng-0.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:676221d0abb724d97a1b693b99b63fe164b65cd419c31556f5bf538f5a950031"}, + {file = "zlib_ng-0.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:08a52fb23236870b956d02400a372f1c3a8adef298552466b6476a05ba061027"}, + {file = "zlib_ng-0.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:690d1ee223a75c61bb628b7203d06d08ea4e10e88c822a4fe4fa8bdad0955608"}, + {file = "zlib_ng-0.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b53d72a2787ad5170a1c4b2444f14f064017bdc575ac43547054fdf0e8f8c4e"}, + {file = "zlib_ng-0.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67d37a39ed6521dfc31230f78ba095141d2317ad41bed9270eddfd1a37b9f076"}, + {file = "zlib_ng-0.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:209a4a2bb0797598f49aa7b7a9e8714b9f69a64777957eba476209d26bfec17b"}, + {file = "zlib_ng-0.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b585e8ddd357fe4677c0c738e5962ca867e157257f3c33f2fa8965e04bdb5836"}, + {file = "zlib_ng-0.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:4a05cafa6a15284406a8c92eed06faa439dfd26b6c9c697719be450b919b459d"}, + {file = "zlib_ng-0.4.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d62b1eaee0ae8fd6f544e199b4de90c018deaf1572f5e0c67ea5eb1adac7bfd3"}, + {file = "zlib_ng-0.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ec74451bf33678a77ebbb9f24364390469396d6a1be69114063343dc654167"}, + {file = "zlib_ng-0.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ae20fde7487931146ea1d95b5ea524012c2b20d26d8a8458bf6befff1feaf1b"}, + {file = "zlib_ng-0.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab9cf1fca3128da63a1b67490fb4c753b6a880b183d826d49d4cd0c61951d0fa"}, + {file = "zlib_ng-0.4.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a3731a1e44290a2ca568690b8c6b62994377d929fd9b2808e60ea371f21781f4"}, + {file = "zlib_ng-0.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8430bbbca7689ce87735970bc3b9dcb1b6d1453aa6c01f5a6850a7c323e100c4"}, + {file = "zlib_ng-0.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9480339df63dc83dbe17ed01ac2fcac2e1e3fcf95811d86f9118823b6434ac58"}, + {file = "zlib_ng-0.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:1d4df3e5d779ded9451c3e14686233d0a75762512f2eaa74386eadf8fbb2850d"}, + {file = "zlib_ng-0.4.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6cf9e47962c86973543fd5c8fe46148063950fbb591da5775cde54abf6aa95aa"}, + {file = "zlib_ng-0.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0261b43542d1525dfd3475a9e083b624b61dfc5b7fec2a3a7be5908af867fd1b"}, + {file = "zlib_ng-0.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fd8a3cd1c108e714b08263a9b62d85d2bb1ba91ede319267ed998b6ac73bac8"}, + {file = "zlib_ng-0.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:959f8951cb7a44df190cbd69327c3ea467b6d6398c448727ecdbd520b6c4ba14"}, ] [metadata]