Skip to content

Conversation

@mykola-mokhnach-parloa
Copy link

Description

Another attempt to make this SDK great and to add asynchronous support to it. Based on the proudly mentioned work of sir @Ousret and some of Cursor magic.

I keep the PR in the draft state as it still needs thorough manual testing and edge-cases validations, but at least basic integration scenarios work, linter and unit tests pass.

I would be extremely grateful for any dev review comments or suggestions, which could make this PR closer to the mergeable state. We need asynchronous version of this SDK badly as current asyncio.to_thread-based hacks in our codebase cry for proper replacements.

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

Please describe the tests that you ran to verify your changes.

  • Unit tests
  • Spec Tests
  • Integration tests / Manual Tests

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

if multiple_instance_mode == InstanceAllowType.BLOCK:
raise Exception(msg) # pylint: disable=broad-exception-raised
if multiple_instance_mode == InstanceAllowType.WARN:
LOGGER.error(msg)

Check failure

Code scanning / CodeQL

Clear-text logging of sensitive information High

This expression logs
sensitive data (password)
as clear text.
This expression logs
sensitive data (password)
as clear text.
@coveralls
Copy link

Pull Request Test Coverage Report for Build 18541723805

Details

  • 339 of 436 (77.75%) changed or added relevant lines in 12 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-6.3%) to 87.556%

Changes Missing Coverage Covered Lines Changed/Added Lines %
UnleashClient/api/asynchronous/features.py 28 29 96.55%
UnleashClient/periodic_tasks/asynchronous/fetch_and_load.py 16 18 88.89%
UnleashClient/api/asynchronous/metrics.py 16 19 84.21%
UnleashClient/api/asynchronous/register.py 21 27 77.78%
UnleashClient/asynchronous/loader.py 15 22 68.18%
UnleashClient/asynchronous/cache.py 38 55 69.09%
UnleashClient/asynchronous/init.py 183 244 75.0%
Totals Coverage Status
Change from base Build 18272747945: -6.3%
Covered Lines: 978
Relevant Lines: 1117

💛 - Coveralls

@sighphyre
Copy link
Member

Hey @mykola-mokhnach-parloa, it's super hard to take cursor magic and turn it into something usable without sinking in more work than it would be to just write it our selves.

Message heard though - an async client is desperately needed. We've started work on implementing that

@sighphyre sighphyre closed this Nov 4, 2025
@github-project-automation github-project-automation bot moved this from New to Done in Issues and PRs Nov 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants