No project description provided
Project description
rust_decider
Rust implementation of bucketing, targeting, overrides, and dynamic config logic.
Usage
class Decider
A class used to expose these APIs:
choose(feature_name: str, context: Mapping[str, JsonValue]) -> Decision
example:
from rust_decider import Decider
from rust_decider import DeciderException
from rust_decider import DeciderFeatureNotFoundException
from rust_decider import DeciderInitException
# initialize Decider instance
try:
decider = Decider("../cfg.json")
except DeciderInitException as e:
print(e)
# get a Decision for a feature via choose()
try:
decision = decider.choose(feature_name="exp_1", context={"user_id": "3", "app_name": "ios"})
except DeciderException as e:
print(e)
assert dict(decision) == {
"variant": "variant_0",
"feature_id": 3246,
"feature_name": "exp_1",
"feature_version": 2,
"events": [
"0::::3246::::exp_1::::2::::variant_0::::3::::user_id::::37173982::::2147483648::::test"
]
}
# `user_id` targeting not satisfied so "variant" is `None` in the returned Decision
try:
decision = decider.choose(feature_name="exp_1", context={"user_id": "1"})
except DeciderException as e:
print(e)
assert dict(decision) == {
"variant": None,
"feature_id": 3246,
"feature_name": "exp_1",
"feature_version": 2,
"events": []
}
# handle "feature not found" exception
# (`DeciderFeatureNotFoundException` is a subclass of `DeciderException`)
try:
decision = decider.choose(feature_name="not_here", context={"user_id": "1"})
except DeciderFeatureNotFoundException as e:
print("handle feature not found exception:")
print(e)
except DeciderException as e:
print(e)
python bindings used in Decider
class
import rust_decider
# Init decider
decider = rust_decider.init("darkmode overrides targeting holdout mutex_group fractional_availability value", "../cfg.json")
# Bucketing needs a context
ctx = rust_decider.make_ctx({"user_id": "7"})
# Get a decision
choice = decider.choose("exp_1", ctx)
assert choice.err() is None # check for errors
choice.decision() # get the variant
# Get a dynamic config value
dc = decider.get_map("dc_map", ctx) # fetch a map DC
assert dc.err() is None # check for errors
dc.val() # get the actual map itself
Development
Updating package with latest src/lib.rs
changes
# In a virtualenv, python >= 3.7
$ cd decider-py
$ pip install -r requirements-dev.txt
$ maturin develop
Running tests
$ pytest decider-py/test/
Publishing
Package is automatically published on merge to master to https://pypi.org/project/reddit-decider/ via drone pipeline.
Formatting / Linting
$ cargo fmt --manifest-path decider-py/test/Cargo.toml
$ cargo clippy --manifest-path decider-py/test/Cargo.toml
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
reddit_decider-1.2.25.tar.gz
(48.4 kB
view hashes)
Built Distributions
Close
Hashes for reddit_decider-1.2.25-cp37-abi3-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bbd4ee5e4d1086b7889ea926f575beb325cadeb637b93f7bba3ce6389c6e5bfa |
|
MD5 | 49bf876f5ae55275aa9930556b15a882 |
|
BLAKE2b-256 | 8c0c1aa88765746b9ebac6330452748c91dc7b2ac735832828f3ca2551f2366f |
Close
Hashes for reddit_decider-1.2.25-cp37-abi3-manylinux_2_28_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d0dd99fe900d9a1d36a1b92fbd52f2fb86ec30b744eb8d84914820bbfc5afad |
|
MD5 | 6a24789d6a78d3714efa43f27e5980e4 |
|
BLAKE2b-256 | 270245bab826de29972145c89791288c7eee4b637e908db019b4a78cdfbca101 |
Close
Hashes for reddit_decider-1.2.25-cp37-abi3-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 56d94c5095e5f4230f0879786f39fd6e3dd3eca65c8a8f4e1c971ee9caa89cf9 |
|
MD5 | f71179dfe19a2e2e6c88f38a7a3029a7 |
|
BLAKE2b-256 | 884337e030116b9c7c1f396bb661c4d38351f7788921f6a307214860c239ee59 |
Close
Hashes for reddit_decider-1.2.25-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2aaaad8048c834f9a83b2415e277cf0203b95b86157ec3f5cbdbbe3ca094491f |
|
MD5 | fb5588ea4a36c2e38a8e8daac143a5ec |
|
BLAKE2b-256 | 009537b3cf7bbbd32c9809bcc0dfcd5ad617cf18f701ecfa9b09427cd19748bf |