{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":486229049,"defaultBranch":"master","name":"uap-python","ownerLogin":"masklinn","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2022-04-27T14:35:25.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/6993?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1721071692.0","currentOid":""},"activityList":{"items":[{"before":"c652b606d514702ca3e1c6ac260b2d7784019362","after":"7c11f7900c7e8bdbab772742f53c3d4764a021d1","ref":"refs/heads/regex","pushedAt":"2024-07-15T19:28:47.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"regex-based POC\n\nUses ua-parser/uap-rust#3\n\nFixes #166","shortMessageHtmlLink":"regex-based POC"}},{"before":null,"after":"c652b606d514702ca3e1c6ac260b2d7784019362","ref":"refs/heads/regex","pushedAt":"2024-07-15T19:28:12.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"regex-based POC\n\nUses ua-parser/uap-rust#3","shortMessageHtmlLink":"regex-based POC"}},{"before":"ad01dd414f03ab7920a10b14d8bcd3aeb762c28c","after":null,"ref":"refs/heads/match-regexes-names","pushedAt":"2024-07-13T13:38:09.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"}},{"before":"5bf3c7b3b57194e8f46659072f269ea8e0b10564","after":"ad01dd414f03ab7920a10b14d8bcd3aeb762c28c","ref":"refs/heads/match-regexes-names","pushedAt":"2024-07-13T13:29:15.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Rename the string regex attribute of matchers to `regex`\n\nIt's kinda dumb that I didn't do that in the first place and I'm not\nentirely sure why I missed it...\n\nAnyway there is no reason to make `pattern` be the string pattern and\n`regex` be the compiled pattern, that unnecessarily diverges from the\nregexes.yaml naming for the corresponding attribute which is a shame,\nand the compiled regex in python is... `re.Pattern`, so it makes more\nsense on both axis to have `pattern: re.Pattern[str]` and `regex:\nstr`.\n\nAlso add a `regex_flag` attribute/property on the device matchers for\nthe string version of the flags.","shortMessageHtmlLink":"Rename the string regex attribute of matchers to regex"}},{"before":"24a11902d66bbbec033ea1cff35a61de84ab7a5c","after":null,"ref":"refs/heads/fix-ruff-error","pushedAt":"2024-07-13T13:29:01.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"}},{"before":"1bbdd8845c30e4fb80e65b2c49577e77d93a559a","after":"24a11902d66bbbec033ea1cff35a61de84ab7a5c","ref":"refs/heads/fix-ruff-error","pushedAt":"2024-07-13T13:24:03.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Ruff does not understand contextlib.suppress\n\nNot entirely clear when F811 started triggering on this pattern (it\ndidn't 3 months ago but is now unhappy with this).\n\nUse `find_spec` to perform a conditional import rather than recover\nfrom a failing import. This is generally less efficient, but given\nit's only done at import it likely doesnt matter.\n\n- successfully importing a module takes about 65ns\n- successfully find_spec-ing a module takes about 280ns\n- unsuccessfully find_spec-ing a module takes about 21*µ*s\n- unsuccessfully importing a modules (then recovering) takes about 26µs","shortMessageHtmlLink":"Ruff does not understand contextlib.suppress"}},{"before":null,"after":"1bbdd8845c30e4fb80e65b2c49577e77d93a559a","ref":"refs/heads/fix-ruff-error","pushedAt":"2024-07-13T13:18:34.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Ruff does not understand contextlib.suppress\n\nNot entirely clear when F811 started triggering on this pattern (it\ndidn't 3 months ago but is now unhappy with this).\n\nUse `find_spec` to perform a conditional import rather than recover\nfrom a failing import. This is generally less efficient, but given\nit's only done at import it likely doesnt matter.\n\n- successfully importing a module takes about 65ns\n- successfully find_spec-ing a module takes about 280ns\n- unsuccessfully find_spec-ing a module takes about 21*µ*s\n- unsuccessfully importing a modules (then recovering) takes about 26µs","shortMessageHtmlLink":"Ruff does not understand contextlib.suppress"}},{"before":"20d1cd82c66e2565ecc0affb8f5fcb35774d9814","after":"5bf3c7b3b57194e8f46659072f269ea8e0b10564","ref":"refs/heads/match-regexes-names","pushedAt":"2024-07-13T12:26:22.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Rename the string regex attribute of matchers to `regex`\n\nIt's kinda dumb that I didn't do that in the first place and I'm not\nentirely sure why I missed it...\n\nAnyway there is no reason to make `pattern` be the string pattern and\n`regex` be the compiled pattern, that unnecessarily diverges from the\nregexes.yaml naming for the corresponding attribute which is a shame,\nand the compiled regex in python is... `re.Pattern`, so it makes more\nsense on both axis to have `pattern: re.Pattern[str]` and `regex:\nstr`.\n\nAlso add a `regex_flag` attribute/property on the device matchers for\nthe string version of the flags.","shortMessageHtmlLink":"Rename the string regex attribute of matchers to regex"}},{"before":"0e6a58776bd5dd49897cfc446e515239aea0b055","after":"20d1cd82c66e2565ecc0affb8f5fcb35774d9814","ref":"refs/heads/match-regexes-names","pushedAt":"2024-07-13T12:09:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Have the names of matcher attributes match regexes.yaml\n\nIt's kinda dumb that I didn't do that in the first place and I'm not\nentirely sure why I missed it...\n\nAnyway there is no reason to make `pattern` be the string pattern and\n`regex` be the compiled pattern, that unnecessarily diverges from the\nregexes.yaml naming for the corresponding attribute which is a shame,\nand the compiled regex in python is... `re.Pattern`, so it makes more\nsense on both axis to have `pattern: re.Pattern[str]` and `regex:\nstr`.\n\nAlso add a `regex_flag` attribute/property on the device matchers for\nthe string version of the flags.","shortMessageHtmlLink":"Have the names of matcher attributes match regexes.yaml"}},{"before":null,"after":"0e6a58776bd5dd49897cfc446e515239aea0b055","ref":"refs/heads/match-regexes-names","pushedAt":"2024-07-13T12:06:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Have the names of matcher attributes match regexes.yaml\n\nIt's kinda dumb that I didn't do that in the first place and I'm not\nentirely sure why I missed it...\n\nAnyway there is no reason to make `pattern` be the string pattern and\n`regex` be the compiled pattern, that unnecessarily diverges from the\nregexes.yaml naming for the corresponding attribute which is a shame,\nand the compiled regex in python is... `re.Pattern`, so it makes more\nsense on both axis to have `pattern: re.Pattern[str]` and `regex:\nstr`.\n\nAlso add a `regex_flag` attribute/property on the device matchers for\nthe string version of the flags.\n\nWith that, maybe we could build the matchers straight from the source\nrecords by direct unpacking, as well as simplify the codegen through\nthe magic of doing less? This probably requires benching to see if\n\n foo(**{'foo': 'bar'})\n\nhas the same efficiency as\n\n foo(foo=bar)\n\nif it does, then there's no reason to bother with reformatting parser\nrecords to the current\n\n foo(bar)","shortMessageHtmlLink":"Have the names of matcher attributes match regexes.yaml"}},{"before":null,"after":"a823a620015b828062b62767739d4a255c786b73","ref":"refs/heads/master-0.18","pushedAt":"2024-04-21T19:22:33.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Update uap-core to 0.18\n\napparently I never updated it...","shortMessageHtmlLink":"Update uap-core to 0.18"}},{"before":"0f65580122edfde4f646ea42cff3e808ae0284e7","after":"0b91ef3c5c51115e1e7d96d49abeee8cd87f2b53","ref":"refs/heads/more-cache-tests","pushedAt":"2024-03-30T11:23:35.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Add test to ensure backfilling results does not lead to evictions\n\nPartial results are back-filled (new domains added) by re-setting them\nin the cache. With a sufficiently incorrect implementation, the cache\ncan evict entries on that occasion even though it does not need\nto (because we're replacing an existing entry).\n\nExactly that should have been fixed by #204, but was not tested at the\ntime.\n\nFixes #199","shortMessageHtmlLink":"Add test to ensure backfilling results does not lead to evictions"}},{"before":null,"after":"0f65580122edfde4f646ea42cff3e808ae0284e7","ref":"refs/heads/more-cache-tests","pushedAt":"2024-03-28T16:47:32.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Add test to ensure backfilling results does not lead to evictions\n\nPartial results are back-filled (new domains added) by re-setting them\nin the cache. With a sufficiently incorrect implementation, the cache\ncan evict entries on that occasion even though it does not need\nto (because we're replacing an existing entry).\n\nExactly that should have been fixed by #204, but was not tested at the\ntime.\n\nFixes #199","shortMessageHtmlLink":"Add test to ensure backfilling results does not lead to evictions"}},{"before":"c2f7d830fbb2c871319d83a8c8102e54737ac949","after":null,"ref":"refs/heads/migration","pushedAt":"2024-03-27T18:35:45.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"}},{"before":"81f9903303400ca7a2d9a7f8985196b7934c8210","after":"c2f7d830fbb2c871319d83a8c8102e54737ac949","ref":"refs/heads/migration","pushedAt":"2024-03-27T18:29:19.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Add migration documentation for 0.x -> 1.0\n\nFixes #181","shortMessageHtmlLink":"Add migration documentation for 0.x -> 1.0"}},{"before":null,"after":"81f9903303400ca7a2d9a7f8985196b7934c8210","ref":"refs/heads/migration","pushedAt":"2024-03-27T17:52:29.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Add migration documentation for 0.x -> 1.0\n\nFixes #181","shortMessageHtmlLink":"Add migration documentation for 0.x -> 1.0"}},{"before":"6ffabc92d8bb935438d86e8c5b1c3b37ff084fab","after":null,"ref":"refs/heads/avoid-unnecessary-evictions","pushedAt":"2024-03-27T16:30:44.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"}},{"before":null,"after":"6ffabc92d8bb935438d86e8c5b1c3b37ff084fab","ref":"refs/heads/avoid-unnecessary-evictions","pushedAt":"2024-03-26T19:54:18.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Avoid eviction on entry replacement\n\n`*Result` objects are immutable, thus if a `PartialResult` gets filled\nfurther it has to be re-set into the cache.\n\nThis does not change the cache size, but because the current S3 and\nSIEVE implementations unconditionally check the cache size on\n`__setitem__` they may evict an entry unnecessarily.\n\nFix that: if there is already a valid cache entry for the key, just\nupdate it in place instead of trying to evict then creating a brand\nnew entry.\n\nAlso update the LRU to pre-check for size (and presence as well), this\nmay make setting a bit more expensive than post-check but it avoids\n\"wronging\" the user by bypassing the limit they set.\n\nFixes #201","shortMessageHtmlLink":"Avoid eviction on entry replacement"}},{"before":"e380448b4128475957cf4c7f77b889b0ebb0421e","after":null,"ref":"refs/heads/usage-docs","pushedAt":"2024-03-26T19:53:32.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"}},{"before":"f1d4378062847ff50125cf359f9030c8461982c9","after":null,"ref":"refs/heads/independent-checkers","pushedAt":"2024-03-26T19:53:24.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"}},{"before":"2a1e4921b6494775ec3f19c047800b3fbf1f2211","after":"f1d4378062847ff50125cf359f9030c8461982c9","ref":"refs/heads/independent-checkers","pushedAt":"2024-03-26T19:38:14.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Merge branch 'master' into independent-checkers","shortMessageHtmlLink":"Merge branch 'master' into independent-checkers"}},{"before":"7873e3fdc30778d4e7e625a60306a2ccc2cd4429","after":"e380448b4128475957cf4c7f77b889b0ebb0421e","ref":"refs/heads/usage-docs","pushedAt":"2024-03-26T19:15:14.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Add advanced cache documentation and belady approximator to hitrates\n\n- belady is useful to get *some* sort of semi-realistic expectation of\n a cache, as the maximum hit rate is only somewhat realistic as cache\n sizes get close to the number of unique entries\n- caches have been busting my balls and I'd assume the average user\n doesn't have the time and inclination to bother, so some guidance is\n useful\n- as caching is generally a CPU/memory tradeoff, while ``hitrates``\n provides a cache overhead estimation giving users a better grasp of\n the implementation details and where the overhead comes from is\n useful\n- plus I regularly re-wonder and re-research and re-discover the size\n complexity of various collections so this gives me the opportunity\n to actually write it down for once","shortMessageHtmlLink":"Add advanced cache documentation and belady approximator to hitrates"}},{"before":null,"after":"2a1e4921b6494775ec3f19c047800b3fbf1f2211","ref":"refs/heads/independent-checkers","pushedAt":"2024-03-26T19:14:59.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"run mypy even if ruff fails\n\nBecause all the checks are performed in the same job and github\nactions will stop at the first step failure within a job, if one of\nthe ruff checks (formatting or checking) fails then mypy does not run\nat all, which is undesirable.\n\nTurns out the steps have an implicit `if success()` if no [status\ncheck function][check] (`success`, `failure`, `always`, `cancelled`)\nis used to guard the step.\n\nThus by gating on `always` and possibly explicitly checking the\nconclusion of specific checks it becomes possible to run `mypy` even\nthough `ruff check` failed, but not run it if *installing* mypy\nfailed.\n\n[check]: https://docs.github.com/en/actions/learn-github-actions/expressions#status-check-functions","shortMessageHtmlLink":"run mypy even if ruff fails"}},{"before":"05f1e5d06c51c518e91d8050bbbfef1d618c060b","after":"7873e3fdc30778d4e7e625a60306a2ccc2cd4429","ref":"refs/heads/usage-docs","pushedAt":"2024-03-26T19:08:23.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Add advanced cache documentation and belady approximator to hitrates\n\n- belady is useful to get *some* sort of semi-realistic expectation of\n a cache, as the maximum hit rate is only somewhat realistic as cache\n sizes get close to the number of unique entries\n- caches have been busting my balls and I'd assume the average user\n doesn't have the time and inclination to bother, so some guidance is\n useful\n- as caching is generally a CPU/memory tradeoff, while ``hitrates``\n provides a cache overhead estimation giving users a better grasp of\n the implementation details and where the overhead comes from is\n useful\n- plus I regularly re-wonder and re-research and re-discover the size\n complexity of various collections so this gives me the opportunity\n to actually write it down for once","shortMessageHtmlLink":"Add advanced cache documentation and belady approximator to hitrates"}},{"before":"63156f0dc0294851bf42fa6628b581e38636d18b","after":"05f1e5d06c51c518e91d8050bbbfef1d618c060b","ref":"refs/heads/usage-docs","pushedAt":"2024-03-26T19:05:04.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Add advanced cache documentation and belady approximator to hitrates\n\n- belady is useful to get *some* sort of semi-realistic expectation of\n a cache, as the maximum hit rate is only somewhat realistic as cache\n sizes get close to the number of unique entries\n- caches have been busting my balls and I'd assume the average user\n doesn't have the time and inclination to bother, so some guidance is\n useful\n- as caching is generally a CPU/memory tradeoff, while ``hitrates``\n provides a cache overhead estimation giving users a better grasp of\n the implementation details and where the overhead comes from is\n useful\n- plus I regularly re-wonder and re-research and re-discover the size\n complexity of various collections so this gives me the opportunity\n to actually write it down for once","shortMessageHtmlLink":"Add advanced cache documentation and belady approximator to hitrates"}},{"before":"5e141696108f1f8070ea4009a3aaaa6b63e38666","after":"63156f0dc0294851bf42fa6628b581e38636d18b","ref":"refs/heads/usage-docs","pushedAt":"2024-03-25T20:18:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"Add advanced cache documentation and belady approximator to hitrates\n\n- belady is useful to get *some* sort of semi-realistic expectation of\n a cache, as the maximum hit rate is only somewhat realistic as cache\n sizes get close to the number of unique entries\n- caches have been busting my balls and I'd assume the average user\n doesn't have the time and inclination to bother, so some guidance is\n useful\n- as caching is generally a CPU/memory tradeoff, while ``hitrates``\n provides a cache overhead estimation giving users a better grasp of\n the implementation details and where the overhead comes from is\n useful\n- plus I regularly re-wonder and re-research and re-discover the size\n complexity of various collections so this gives me the opportunity\n to actually write it down for once","shortMessageHtmlLink":"Add advanced cache documentation and belady approximator to hitrates"}},{"before":"fd45d7483229828de271c928da479367387f7967","after":"5e141696108f1f8070ea4009a3aaaa6b63e38666","ref":"refs/heads/usage-docs","pushedAt":"2024-03-24T21:12:23.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"run mypy even if ruff fails","shortMessageHtmlLink":"run mypy even if ruff fails"}},{"before":"29a5dbea06c9d9b1d6b6d80661baa6efdb034b42","after":"fd45d7483229828de271c928da479367387f7967","ref":"refs/heads/usage-docs","pushedAt":"2024-03-24T21:08:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"m","shortMessageHtmlLink":"m"}},{"before":"c8619e26639872097b8062e59150a90f0dfee0f5","after":"29a5dbea06c9d9b1d6b6d80661baa6efdb034b42","ref":"refs/heads/usage-docs","pushedAt":"2024-03-24T21:07:25.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"m","shortMessageHtmlLink":"m"}},{"before":"93d286f0e40f1d69923a96af1cdca1a09d865609","after":"c8619e26639872097b8062e59150a90f0dfee0f5","ref":"refs/heads/usage-docs","pushedAt":"2024-03-24T21:01:16.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"masklinn","name":null,"path":"/masklinn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6993?s=80&v=4"},"commit":{"message":"m","shortMessageHtmlLink":"m"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEgA6P5wA","startCursor":null,"endCursor":null}},"title":"Activity · masklinn/uap-python"}