An extensible feature flagging library for Python
Project description
FeatureGate
Featuregate is a simple feature flag API similar to Flipper.
Configuration
PosthogAdapter
export POSTHOG_API_KEY="someapikey"
export POSTHOG_PROJECT_ID="someprojectid"
Usage
from feature_gate.client import Client
from feature_gate.adapters import PosthogAdapter
from feature_gate.feature import Feature
adapter = PosthogAdapter() # Or MemoryAdapter for testing
client = Client(adapter)
feature = Feature("Test flag", "test_flag", "This is a test flag")
client.features()
# => []
client.add(feature)
# => True
client.features()
# => ["test_flag"]
client.is_enabled("test_flag")
# => False
client.enable("test_flag")
# => True
client.is_enabled("test_flag")
# => True
client.disable("test_flag")
# => True
client.is_enabled("test_flag")
# => False
client.remove("test_flag")
# => True
client.features()
# => []
Errors
FeatureNotFound
If you try to run something that presumes the existence of a feature and it can't find it it'll throw a FeatureNotFound
.
from feature_gate.client import FeatureNotFound
try:
client.remove("some_feature_that_definitely_does_not_exist")
except FeatureNotFound as err:
# Do what we want to do when the feature doesn't exist
PosthogApiClientError
For the PosthogAdapter
in particular it will raise error if it was unable to reach the Posthog API. These get bubbled up as PosthogAPIClientError
.
from feature_gate.clients.posthog_api_client import PosthogAPIClientError
try:
client.features() #disable network connection
except PosthogAPIClientError as err:
# Handle the error -- define default behavior in outage
RateLimitError
Again, specific to the PosthogAdapter
it will raise an error if the account is rate limited by the Posthog API. These get bubbled up as RateLimitError
.
from feature_gate.clients.posthog_api_client import RateLimitError
try:
client.features() # receives response indicating a rate limit and retry time in seconds
except RateLimitError as err:
# Handle the error -- define default behavior during rate limiting
Testing
The Memory Adapter can be used for writing tests. This creates an ephemeral memory only implementation of the feature_gate client API. This is non-suitable for production only for tests.
from feature_gate.client import Client
from feature_gate.adapters.memory import MemoryAdapter
client = Client(MemoryAdapter())
Developing this library
Hot-reload the REPL
Hot-reload the client in the repl for development:
$ repl
>>> exec(open('reload.py').read())
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for feature_gate-0.0.7-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 891afb94c9fa761c61a03415f211be5b8937552cebc1810f08aa1e65b4abb54c |
|
MD5 | d0453bd9faf8ee305b4a0e75708b386a |
|
BLAKE2b-256 | d122a1a36a9fc40f74ba6f3c8916b2d9add4c72ff9cf06ad06c238ee1e0f4f3b |