更新: | 2013-10-15 |
---|---|
バージョン: | 0.0.4 |
作者: | @voluntas |
URL: | http://voluntas.github.io/ |
github: | https://github.com/disqus/gargoyle |
---|---|
doc: | http://gargoyle.readthedocs.org/en/latest/index.html |
Gargoyle は DISQUS が開発した Django のためのスイッチ機能です。 様々な条件を元に特定の機能を有効/無効にすることが出来ます。
かなりシンプルに出来ているため様々な場面で使えると思います。
- あまりにもドキュメントの説明が足りてないのでドキュメントっぽいのを残す
- というかドキュメント古いので使えるドキュメントを残す
- Gargoyle を使ってビューの切り替えを行えるようにする
- Gargoyle を使ってビューの中身の切り替えを行えるようにする
- Gargoyle を使って Django ユーザの 50% のみ表示するビューを用意する
- Gargoyle を使って HTTP ヘッダーの REMOTE_ADDR を判定し 50% のみ表示するビューを用意する
- Gargoyle を使って特定のユーザのみに表示されるアプリを用意する
$ pip install gargoyle
後は settings.py にいくつかの設定を追加します
INSTALLED_APPS = (
...
'gargoyle',
...
)
GARGOYLE_AUTO_CREATE = False
GARGOYLE_AUTO_CREATE を True にすると自動でコンディションを作成してしまうため、明示的に False にしておきます。
これはそのうち消す
記事を書くためのサンプルコード
from django.contrib.auth.models import User, AnonymousUser
from django.http import HttpRequest
from gargoyle import gargoyle
from gargoyle.models import Switch, SELECTIVE
from gargoyle.builtins import UserConditionSet, IPAddressConditionSet
user_condition_set = UserConditionSet(User)
switch = Switch.objects.create(key='spam', status=SELECTIVE)
switch = gargoyle['spam']
switch.add_condition(
condition_set = user_condition_set.get_id(),
field_name = 'percent',
condition = '0-50',
)
user = AnonymousUser()
assert not gargoyle.is_active('spam', user)
# 51 = 51 % 100
user = User(pk=51)
assert not gargoyle.is_active('spam', user)
# 5 = 5 % 100
user = User(pk=5)
assert gargoyle.is_active('spam', user)
switch.clear_conditions(
user_condition_set.get_id(),
'percent',
)
assert not gargoyle.is_active('spam', user)
ip_address_condition_set = IPAddressConditionSet()
Switch.objects.create(
key='egg',
status=SELECTIVE,
)
switch = gargoyle['egg']
switch.add_condition(
condition_set = ip_address_condition_set.get_id(),
field_name = 'percent',
condition = '0-50',
)
request = HttpRequest()
# 95 = sum([int(x) for x in '192.0.2.1'.split('.')]) % 100
request.META['REMOTE_ADDR'] = '192.0.2.1'
assert not gargoyle.is_active('egg', request)
request = HttpRequest()
# 4 = sum([int(x) for x in '192.0.2.10'.split('.')]) % 100
request.META['REMOTE_ADDR'] = '192.0.2.10'
assert gargoyle.is_active('egg', request)
switch.clear_conditions(
condition_set = ip_address_condition_set.get_id(),
field_name = 'percent',
)
assert not gargoyle.is_active('egg', request)