1- ``reddit_experiments ``
1+ .. _reddit_decider :
2+
3+ ``reddit_decider ``
24===============================
35
46.. automodule :: reddit_decider
57
68
79Prerequisite packages
8- -------
10+ ---------------------
911.. code-block :: python
1012
1113 baseplate>= 2.0 .0
@@ -18,13 +20,13 @@ Prerequisite packages
1820 reddit- v2- events
1921
2022 Prerequisite infrastructure
21- -------
23+ ---------------------------
2224Set up your service to pull down & synchronize experiment configurations from Zookeeper via the Baseplate `live-data watcher sidecar
2325<https://baseplate.readthedocs.io/en/stable/api/baseplate/lib/live_data.html?highlight=sidecar#watcher-daemon> `_ (minimum v2.4.13).
2426You'll have to make sure that your service is authorized to fetch the appropriate secret from Vault.
2527
26- Prerequisite configuration:
27- -------
28+ Prerequisite configuration
29+ ---------------------------
2830Setup :code: `reddit-experiments ` in your application's configuration file:
2931
3032.. code-block :: ini
@@ -50,7 +52,18 @@ Setup :code:`reddit-experiments` in your application's configuration file:
5052
5153
5254 Integrate :code: `reddit-experiments ` into Baseplate service
53- -------
55+ -----------------------------------------------------------
56+
57+ Upgrade or integrate reddit-experiments package:
58+
59+ .. code-block :: python
60+
61+ # import latest reddit-experiments package in service requirements.txt
62+ reddit- experiments>= 1.3 .7
63+
64+ Initialize :code: `decider ` instance on Baseplate context
65+ --------------------------------------------------------
66+
5467In your service's initialization process, add a :code: `decider ` instance to baseplate's context:
5568(Note the use of the :code: `ExperimentLogger `, which is used to publish exposure V2 events,
5669an example can be seen `here <https://github.snooguts.net/reddit/reddit-service-graphql/blob/3734b51732c29d07eef32aced86677cce5064dbb/graphql-py/graphql_api/events/utils.py#L205 >`_)
@@ -68,7 +81,7 @@ an example can be seen `here <https://github.snooguts.net/reddit/reddit-service-
6881 def make_wsgi_app (app_config ):
6982 baseplate = Baseplate(app_config)
7083 decider_factory = decider_client_from_config(app_config = app_config,
71- event_logger = ExperimentLogger,
84+ event_logger = ExperimentLogger() ,
7285 prefix = " experiments." ,
7386 request_field_extractor = my_field_extractor) # this is optional, can be `None` if edge_context contains all the fields you need
7487 baseplate.add_to_context(" decider" , decider_factory)
@@ -78,11 +91,11 @@ an example can be seen `here <https://github.snooguts.net/reddit/reddit-service-
7891 baseplate.configure_context({
7992 " decider" : DeciderClient(
8093 prefix = " experiments." ,
81- event_logger = EventLogger ,
94+ event_logger = ExperimentLogger ,
8295 request_field_extractor = my_field_extractor # optional
8396 })
8497
85- Make sure :code:`edge_context ` is accessible on :code:`request` object like so:
98+ Make sure :code:`EdgeContext ` is accessible on :code:`request` object like so:
8699
87100.. code- block:: python
88101
@@ -108,16 +121,17 @@ Make sure :code:`edge_context` is accessible on :code:`request` object like so:
108121
109122 # Customized fields can be defined below to be extracted from a baseplate request
110123 # and will override above edge_context fields.
124+ # These fields may be used for targeting.
111125
112126 def my_field_extractor(request):
113127 # an example of customized baseplate request field extractor:
114128 return {" foo" : request.headers.get(" Foo" ), " bar" : " something" }
115129
116130
117- Usage
118- ------ -
119- Use the attached :py:class :`~ reddit_decider.Decider` object in request and
120- :code:`decider.get_variant()` (which will automatically send an expose event)::
131+ Basic Usage
132+ ---------- -
133+ Use the attached :py:class :`~ reddit_decider.Decider` object in request to call
134+ :code:`decider.get_variant()` (automatically sends an expose event)::
121135
122136 def my_method(request):
123137 if request.decider.get_variant(" foo" ) == " bar" :
@@ -130,20 +144,32 @@ or optionally, if manual exposure is necessary, use::
130144 ...
131145 request.decider.expose(experiment_name = ' experiment_name' , variant_name = variant)
132146
133- Configuration Classes
134- ------------ -
135147
136- .. autofunction:: decider_client_from_config
148+ Decider API
149+ ---------- -
137150
151+ .. autoclass:: Decider
152+ :members:
153+
154+ Configuration Class
155+ ------------------ -
138156
139157.. autoclass:: DeciderClient
140158
159+ Configuration Function
160+ ----------------------
161+
162+ .. autofunction:: decider_client_from_config
163+
164+
165+ Configuration Context Factory
166+ ---------------------------- -
141167
142168.. autoclass:: DeciderContextFactory
143169
170+ Legacy API docs:
171+ ----------------
144172
145- Decider API
146- ------ -
173+ .. toctree::
147174
148- .. autoclass:: Decider
149- :members:
175+ legacy/ index
0 commit comments