{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":514203846,"defaultBranch":"main","name":"aioairq","ownerLogin":"CorantGmbH","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-07-15T09:04:07.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/68684017?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1715706481.0","currentOid":""},"activityList":{"items":[{"before":"78a108d1809a0e15a4ce4c7b22b5276a11b6293f","after":"760ad2737bc305fcb6df6c0c6b2e20c14fd747a6","ref":"refs/heads/dev","pushedAt":"2024-05-14T17:21:26.000Z","pushType":"push","commitsCount":9,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Bump the version to 0.4.2","shortMessageHtmlLink":"Bump the version to 0.4.2"}},{"before":"78c1d3703defd2f868ae60e8ea13e0bd24b9e97a","after":"760ad2737bc305fcb6df6c0c6b2e20c14fd747a6","ref":"refs/heads/main","pushedAt":"2024-05-14T17:07:47.000Z","pushType":"push","commitsCount":8,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Bump the version to 0.4.2","shortMessageHtmlLink":"Bump the version to 0.4.2"}},{"before":"1264a9b1fc9a549d3f8701ad49b142adbcd9ffc0","after":"78c1d3703defd2f868ae60e8ea13e0bd24b9e97a","ref":"refs/heads/main","pushedAt":"2024-05-07T10:41:22.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Bump the version to 0.4.1","shortMessageHtmlLink":"Bump the version to 0.4.1"}},{"before":"46db5a7198de38ed0b72084f3e9ffc849cfdcb1f","after":"78a108d1809a0e15a4ce4c7b22b5276a11b6293f","ref":"refs/heads/dev","pushedAt":"2024-05-07T10:29:12.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"fix: extend the list of supported LED theme names","shortMessageHtmlLink":"fix: extend the list of supported LED theme names"}},{"before":"5ae56acde8b3f624cdc86c95e589766cf0a1eb75","after":"70cba2cd322b0342004c024a196067981cd81f8f","ref":"refs/heads/refactor_led_theme_setting","pushedAt":"2024-05-07T10:28:26.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"fix: extend the list of supported LED theme names","shortMessageHtmlLink":"fix: extend the list of supported LED theme names"}},{"before":"6ebdae2c4f11e4421aca3af20dfe3d16022bd642","after":"5ae56acde8b3f624cdc86c95e589766cf0a1eb75","ref":"refs/heads/refactor_led_theme_setting","pushedAt":"2024-02-28T15:01:53.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Homogenise LED theme setting + more precise typing\n\n1. Use an explicit Literal type `LedThemeName` instead of `str` for the\n supported LED themes. Not very consequential.\n2. Consider two different TypedDicts:\n - `DeviceLedTheme` which is expected to contain both `\"left\"` and `\"right\"` keys, and\n - `DeviceLedThemePatch` in which neither of the two keys is required\n With this logic in mind, a single `set_led_theme` may suffice to set\n the theme, given that the handling of the left or right themes is\n conceptually delegated to the initialisation of either of the two\n dictionaries.\n\nAs an aside, given that `TypedDict`s do not enforce or check anything in\nthe runtime, I am going to consider moving to `pydantic` models instead.","shortMessageHtmlLink":"Homogenise LED theme setting + more precise typing"}},{"before":null,"after":"6ebdae2c4f11e4421aca3af20dfe3d16022bd642","ref":"refs/heads/refactor_led_theme_setting","pushedAt":"2024-02-28T14:54:57.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Homogenise LED theme setting + more precise typing\n\n1. Use an explicit Literal type `LedThemeName` instead of `str` for the\n supported LED themes. Not very consequential.\n2. Consider two different TypedDicts:\n - `DeviceLedTheme` which is expected to contain both `\"left\"` and `\"right\"` keys, and\n - `DeviceLedThemePatch` in which neither of the two keys is required\n With this logic in mind, a single `set_led_theme` may suffice to set\n the theme, given that the handling of the left or right themes is\n conceptually delegated to the initialisation of either of the two\n dictionaries.\n\nAs an aside, given that `TypedDict`s do not enforce or check anything in\nthe runtime, I am going to consider moving to `pydantic` models instead.","shortMessageHtmlLink":"Homogenise LED theme setting + more precise typing"}},{"before":"937f000803af3db6363ca59de255b640a87d4315","after":"46db5a7198de38ed0b72084f3e9ffc849cfdcb1f","ref":"refs/heads/dev","pushedAt":"2024-02-28T14:26:28.000Z","pushType":"push","commitsCount":24,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Format the codebase with ruff","shortMessageHtmlLink":"Format the codebase with ruff"}},{"before":"8ee502fe212ec59bef0c5b5cade974afab52e31b","after":"1264a9b1fc9a549d3f8701ad49b142adbcd9ffc0","ref":"refs/heads/main","pushedAt":"2024-02-21T08:31:41.000Z","pushType":"pr_merge","commitsCount":16,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Bump version to 0.4.0","shortMessageHtmlLink":"Bump version to 0.4.0"}},{"before":"c3ea879e701c14fbf0eb10b072417e88a8fe4268","after":"8ee502fe212ec59bef0c5b5cade974afab52e31b","ref":"refs/heads/main","pushedAt":"2024-02-12T17:19:51.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Bump supported python versions","shortMessageHtmlLink":"Bump supported python versions"}},{"before":"033a1439d39f66013fe05d4e096b026c26126613","after":"c3ea879e701c14fbf0eb10b072417e88a8fe4268","ref":"refs/heads/main","pushedAt":"2023-12-23T20:40:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Drop IP/mDNS validation and add a (local) test\n\nThe test does not mock anything out and depends on the correct IP\naddress / host name being specified via environmental variables.\n\nOf note, I had experienced a peculiar issue with using a host name which\nwas mapped to multiple IP addresses in my /etc/hosts.\nCuriously, this meant that the retrieval from the cache fetched the last\nIP in the file, not, actually, the one used upon the original resolution.\nThis meant that AirQ.get worked perfectly when the DNS was resolved\nde-novo, but timed out when it was cached.\nWhile I am not sure if it is a bug or a feature of aiohttp, it is,\nperhaps, irrelevant for this module and the entire test parametrisation,\nwhich disables dns caching can be removed","shortMessageHtmlLink":"Drop IP/mDNS validation and add a (local) test"}},{"before":"b8a0d0a47337ac0ded025b2b4c0a9bfbe676dfe6","after":"033a1439d39f66013fe05d4e096b026c26126613","ref":"refs/heads/main","pushedAt":"2023-12-23T20:38:20.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Drop IP/mDNS validation and add a (local) test\n\nThe test does not mock anything out and depends on the correct IP\naddress / host name being specified via environmental variables.\n\nOf note, I had experienced a peculiar issue with using a host name which\nwas mapped to multiple IP addresses in my /etc/hosts.\nCuriously, this meant that the retrieval from the cache fetched the last\nIP in the file, not, actually, the one used upon the original resolution.\nThis meant that AirQ.get worked perfectly when the DNS was resolved\nde-novo, but timed out when it was cached.\nWhile I am not sure if it is a bug or a feature of aiohttp, it is,\nperhaps, irrelevant for this module and the entire test parametrisation,\nwhich disables dns caching can be removed","shortMessageHtmlLink":"Drop IP/mDNS validation and add a (local) test"}},{"before":"d35db7dd8ab156f82c534da84be6db472549ad52","after":"acfa3141b87a1c7bee42c2ffcf870380972a4766","ref":"refs/heads/allow_custom_dns","pushedAt":"2023-12-21T15:20:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Drop use_dns_cache=False, the issue was on my side\n\nMy /etc/hosts had multiple IPs mapped to the same host name, which,\ncuriously, meant that the retrieval from the cache fetched the last IP\nin the file, not, actually, the one used upon the original resolution.\nWhile I am not sure if it is a bug or a feature of aiohttp, it is,\nperhaps, irrelevant for this module and the entire test parametrisation,\nwhich disables dns caching can be removed","shortMessageHtmlLink":"Drop use_dns_cache=False, the issue was on my side"}},{"before":"6edc9608e1213c6216ff560bb89da27f4b4caaf7","after":"d35db7dd8ab156f82c534da84be6db472549ad52","ref":"refs/heads/allow_custom_dns","pushedAt":"2023-12-21T14:26:43.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Drop IP/mDNS validation and add a FAILING test\n\nOddly, .get works perfectly when the DNS is resolved de-novo, but times\nout when it is cached...","shortMessageHtmlLink":"Drop IP/mDNS validation and add a FAILING test"}},{"before":null,"after":"6edc9608e1213c6216ff560bb89da27f4b4caaf7","ref":"refs/heads/allow_custom_dns","pushedAt":"2023-12-21T14:12:36.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Drop IP/mDNS validation","shortMessageHtmlLink":"Drop IP/mDNS validation"}},{"before":"b4e4c8a292bf6500db35f25fb6bd6d07887632e1","after":"b8a0d0a47337ac0ded025b2b4c0a9bfbe676dfe6","ref":"refs/heads/main","pushedAt":"2023-10-25T15:56:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Release 0.3.1: clip_negative_values and get_latest_data\n\nget_latest_data implements a convenient public call to fetch from\neither \"data\" or \"average\" route, as well as allowing to conveniently\ntoggle negative value clipping (default) and dropping of uncertainties\n(default)","shortMessageHtmlLink":"Release 0.3.1: clip_negative_values and get_latest_data"}},{"before":"c3ec577eff6988598da3cb935adcfa96c298da2f","after":"b4e4c8a292bf6500db35f25fb6bd6d07887632e1","ref":"refs/heads/main","pushedAt":"2023-06-19T22:17:38.287Z","pushType":"push","commitsCount":1,"pusher":{"login":"dl2080","name":"Daniel Lehmann","path":"/dl2080","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43613560?s=80&v=4"},"commit":{"message":"Update README.md","shortMessageHtmlLink":"Update README.md"}},{"before":"9f95608943d8e08ddab2258250d34eacf35466dc","after":"c3ec577eff6988598da3cb935adcfa96c298da2f","ref":"refs/heads/main","pushedAt":"2023-03-07T13:23:22.419Z","pushType":"push","commitsCount":1,"pusher":{"login":"Sibgatulin","name":"Renat Sibgatulin","path":"/Sibgatulin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10868826?s=80&v=4"},"commit":{"message":"Release v0.3.0\n\n- dedicated submodule for exceptions (still exposed at module level through\n `aioairq.__all__`)\n\n- `core.DeviceInfo`:\n - room_type -> suggested_area to further consistency with home assistant\n - all fields, except for `id` are optional (much like with\n `homeassistant.helpers.entity.DeviceInfo`)\n\n- `core.AirQ.get`:\n - limited to an explicit set of queries / webserver routes\n (namely `AirQ._supported_routes = [\"log\", \"config\", \"data\", \"average\", \"ping\"]).\n Other routes return objects with different structure, which aren't consistent\n with the current decoding steps\n - Error handling for JSONDecodeError and KeyError, which ought not to happen\n with the aforementioned routes (added as a precaution against unexpected firmware\n behaviour)\n\n- `encrypt.AESCipher`:\n - failed authentication is now inferred as close to the point of failure as possible.\n The success or failure of the authentication is based on the ability to decode\n the response from the device, thus the error `InvalidAuth` is raised\n in `AESCipher.decode`","shortMessageHtmlLink":"Release v0.3.0"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNS0xNFQxNzoyMToyNi4wMDAwMDBazwAAAARJvFDo","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNS0xNFQxNzoyMToyNi4wMDAwMDBazwAAAARJvFDo","endCursor":"Y3Vyc29yOnYyOpK7MjAyMy0wMy0wN1QxMzoyMzoyMi40MTkxNzdazwAAAAL-NZKB"}},"title":"Activity ยท CorantGmbH/aioairq"}