Moving / renaming some utils from __init__.py to utils.py
This commit is contained in:
Родитель
5ff33b1b4a
Коммит
5632a117b3
|
@ -15,24 +15,3 @@ def autodiscover():
|
||||||
except ImportError:
|
except ImportError:
|
||||||
continue
|
continue
|
||||||
badges_mod.register_signals()
|
badges_mod.register_signals()
|
||||||
|
|
||||||
|
|
||||||
def badge(slug_or_badge):
|
|
||||||
"""Find a badge by slug or by instance"""
|
|
||||||
if isinstance(slug_or_badge, Badge):
|
|
||||||
b = slug_or_badge
|
|
||||||
else:
|
|
||||||
b = Badge.objects.get(slug=slug_or_badge)
|
|
||||||
return b
|
|
||||||
|
|
||||||
|
|
||||||
def award(slug_or_badge, awardee, awarder=None):
|
|
||||||
"""Award a badge to an awardee, with optional awarder"""
|
|
||||||
b = badge(slug_or_badge)
|
|
||||||
return b.award_to(awardee, awarder)
|
|
||||||
|
|
||||||
|
|
||||||
def progress(slug_or_badge, user):
|
|
||||||
"""Get a progress record for a badge and awardee"""
|
|
||||||
b = badge(slug_or_badge)
|
|
||||||
return b.progress_for(user)
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ from nose.plugins.attrib import attr
|
||||||
from . import BadgerTestCase
|
from . import BadgerTestCase
|
||||||
|
|
||||||
import badger
|
import badger
|
||||||
|
from badger.utils import get_badge, award_badge
|
||||||
import badger_test
|
import badger_test
|
||||||
import badger_test.badges
|
import badger_test.badges
|
||||||
|
|
||||||
|
@ -35,22 +36,22 @@ class BadgesPyTest(BadgerTestCase):
|
||||||
|
|
||||||
def test_badges_from_fixture(self):
|
def test_badges_from_fixture(self):
|
||||||
"""Badges can be created via fixture"""
|
"""Badges can be created via fixture"""
|
||||||
b = Badge.objects.get(slug="test-1")
|
b = get_badge("test-1")
|
||||||
eq_("Test #1", b.title)
|
eq_("Test #1", b.title)
|
||||||
b = Badge.objects.get(slug="button-clicker")
|
b = get_badge("button-clicker")
|
||||||
eq_("Button Clicker", b.title)
|
eq_("Button Clicker", b.title)
|
||||||
b = Badge.objects.get(slug="first-post")
|
b = get_badge("first-post")
|
||||||
eq_("First post!", b.title)
|
eq_("First post!", b.title)
|
||||||
|
|
||||||
def test_badges_from_code(self):
|
def test_badges_from_code(self):
|
||||||
"""Badges can be created in code"""
|
"""Badges can be created in code"""
|
||||||
b = Badge.objects.get(slug="test-2")
|
b = get_badge("test-2")
|
||||||
eq_("Test #2", b.title)
|
eq_("Test #2", b.title)
|
||||||
b = Badge.objects.get(slug="awesomeness")
|
b = get_badge("awesomeness")
|
||||||
eq_("Awesomeness (you have it)", b.title)
|
eq_("Awesomeness (you have it)", b.title)
|
||||||
b = Badge.objects.get(slug="250-words")
|
b = get_badge("250-words")
|
||||||
eq_("250 Words", b.title)
|
eq_("250 Words", b.title)
|
||||||
b = Badge.objects.get(slug="master-badger")
|
b = get_badge("master-badger")
|
||||||
eq_("Master Badger", b.title)
|
eq_("Master Badger", b.title)
|
||||||
|
|
||||||
def test_badge_awarded_on_model_create(self):
|
def test_badge_awarded_on_model_create(self):
|
||||||
|
@ -58,7 +59,7 @@ class BadgesPyTest(BadgerTestCase):
|
||||||
user = self._get_user()
|
user = self._get_user()
|
||||||
post = GuestbookEntry(message="This is my first post", creator=user)
|
post = GuestbookEntry(message="This is my first post", creator=user)
|
||||||
post.save()
|
post.save()
|
||||||
b = Badge.objects.get(slug='first-post')
|
b = get_badge('first-post')
|
||||||
ok_(b.is_awarded_to(user))
|
ok_(b.is_awarded_to(user))
|
||||||
|
|
||||||
# "first-post" badge should be unique
|
# "first-post" badge should be unique
|
||||||
|
@ -71,7 +72,7 @@ class BadgesPyTest(BadgerTestCase):
|
||||||
created"""
|
created"""
|
||||||
user = self._get_user()
|
user = self._get_user()
|
||||||
|
|
||||||
b = badger.badge('250-words')
|
b = get_badge('250-words')
|
||||||
|
|
||||||
# Post 5 words in progress...
|
# Post 5 words in progress...
|
||||||
GuestbookEntry.objects.create(creator=user,
|
GuestbookEntry.objects.create(creator=user,
|
||||||
|
@ -108,7 +109,7 @@ class BadgesPyTest(BadgerTestCase):
|
||||||
created, but the tracking is done via percentage"""
|
created, but the tracking is done via percentage"""
|
||||||
user = self._get_user()
|
user = self._get_user()
|
||||||
|
|
||||||
b = badger.badge('250-words-by-percent')
|
b = get_badge('250-words-by-percent')
|
||||||
|
|
||||||
# Post 5 words in progress...
|
# Post 5 words in progress...
|
||||||
GuestbookEntry.objects.create(creator=user,
|
GuestbookEntry.objects.create(creator=user,
|
||||||
|
@ -142,11 +143,11 @@ class BadgesPyTest(BadgerTestCase):
|
||||||
def test_metabadge_awarded(self):
|
def test_metabadge_awarded(self):
|
||||||
"""Upon completing collection of badges, award a meta-badge"""
|
"""Upon completing collection of badges, award a meta-badge"""
|
||||||
user = self._get_user()
|
user = self._get_user()
|
||||||
badger.award('test-1', user)
|
award_badge('test-1', user)
|
||||||
badger.award('test-2', user)
|
award_badge('test-2', user)
|
||||||
badger.award('awesomeness', user)
|
award_badge('awesomeness', user)
|
||||||
badger.award('button-clicker', user)
|
award_badge('button-clicker', user)
|
||||||
ok_(badger.badge('master-badger').is_awarded_to(user))
|
ok_(get_badge('master-badger').is_awarded_to(user))
|
||||||
|
|
||||||
def _get_user(self, username="tester", email="tester@example.com",
|
def _get_user(self, username="tester", email="tester@example.com",
|
||||||
password="trustno1"):
|
password="trustno1"):
|
||||||
|
|
|
@ -9,28 +9,51 @@ def update_badges(badge_data, overwrite=False):
|
||||||
"""Update badges from array of dicts, with option to overwrite existing"""
|
"""Update badges from array of dicts, with option to overwrite existing"""
|
||||||
badges = []
|
badges = []
|
||||||
for data in badge_data:
|
for data in badge_data:
|
||||||
|
badges.append(update_badge(data))
|
||||||
# If there are prerequisites, ensure they're real badges and remove
|
|
||||||
# from the set of data fields.
|
|
||||||
if 'prerequisites' not in data:
|
|
||||||
prerequisites = None
|
|
||||||
else:
|
|
||||||
prerequisites = [badger.badge(id)
|
|
||||||
for id in data.get('prerequisites', [])]
|
|
||||||
del data['prerequisites']
|
|
||||||
|
|
||||||
badge, created = Badge.objects.get_or_create(title=data['title'],
|
|
||||||
defaults=data)
|
|
||||||
|
|
||||||
# If overwriting, and not just created, then save with current fields.
|
|
||||||
if overwrite and not created:
|
|
||||||
badge.save(**data)
|
|
||||||
|
|
||||||
# Set prerequisites if overwriting, or badge is newly created.
|
|
||||||
if (overwrite or created) and prerequisites:
|
|
||||||
badge.prerequisites.clear()
|
|
||||||
badge.prerequisites.add(*prerequisites)
|
|
||||||
|
|
||||||
badges.append(badge)
|
|
||||||
|
|
||||||
return badges
|
return badges
|
||||||
|
|
||||||
|
|
||||||
|
def update_badge(data, overwrite=False):
|
||||||
|
# If there are prerequisites, ensure they're real badges and remove
|
||||||
|
# from the set of data fields.
|
||||||
|
if 'prerequisites' not in data:
|
||||||
|
prerequisites = None
|
||||||
|
else:
|
||||||
|
prerequisites = [get_badge(n)
|
||||||
|
for n in data.get('prerequisites', [])]
|
||||||
|
del data['prerequisites']
|
||||||
|
|
||||||
|
badge, created = Badge.objects.get_or_create(title=data['title'],
|
||||||
|
defaults=data)
|
||||||
|
|
||||||
|
# If overwriting, and not just created, then save with current fields.
|
||||||
|
if overwrite and not created:
|
||||||
|
badge.save(**data)
|
||||||
|
|
||||||
|
# Set prerequisites if overwriting, or badge is newly created.
|
||||||
|
if (overwrite or created) and prerequisites:
|
||||||
|
badge.prerequisites.clear()
|
||||||
|
badge.prerequisites.add(*prerequisites)
|
||||||
|
|
||||||
|
return badge
|
||||||
|
|
||||||
|
|
||||||
|
def get_badge(slug_or_badge):
|
||||||
|
"""Find a badge by slug or by instance"""
|
||||||
|
if isinstance(slug_or_badge, Badge):
|
||||||
|
b = slug_or_badge
|
||||||
|
else:
|
||||||
|
b = Badge.objects.get(slug=slug_or_badge)
|
||||||
|
return b
|
||||||
|
|
||||||
|
|
||||||
|
def award_badge(slug_or_badge, awardee, awarder=None):
|
||||||
|
"""Award a badge to an awardee, with optional awarder"""
|
||||||
|
b = get_badge(slug_or_badge)
|
||||||
|
return b.award_to(awardee, awarder)
|
||||||
|
|
||||||
|
|
||||||
|
def get_progress(slug_or_badge, user):
|
||||||
|
"""Get a progress record for a badge and awardee"""
|
||||||
|
b = get_badge(slug_or_badge)
|
||||||
|
return b.progress_for(user)
|
||||||
|
|
|
@ -5,7 +5,8 @@ from django.db.models.signals import post_save
|
||||||
from .models import GuestbookEntry
|
from .models import GuestbookEntry
|
||||||
|
|
||||||
import badger
|
import badger
|
||||||
from badger import utils
|
import badger.utils
|
||||||
|
from badger.utils import get_badge, award_badge, get_progress
|
||||||
from badger.models import Badge, Nomination, Award, Progress
|
from badger.models import Badge, Nomination, Award, Progress
|
||||||
from badger.signals import badge_was_awarded
|
from badger.signals import badge_was_awarded
|
||||||
|
|
||||||
|
@ -36,7 +37,7 @@ def update_badges(overwrite=False):
|
||||||
'button-clicker')),
|
'button-clicker')),
|
||||||
|
|
||||||
]
|
]
|
||||||
return utils.update_badges(badge_data, overwrite)
|
return badger.utils.update_badges(badge_data, overwrite)
|
||||||
|
|
||||||
|
|
||||||
def on_guestbook_post(sender, **kwargs):
|
def on_guestbook_post(sender, **kwargs):
|
||||||
|
@ -44,10 +45,10 @@ def on_guestbook_post(sender, **kwargs):
|
||||||
created = kwargs['created']
|
created = kwargs['created']
|
||||||
|
|
||||||
if created:
|
if created:
|
||||||
badger.award('first-post', o.creator)
|
award_badge('first-post', o.creator)
|
||||||
|
|
||||||
# Increment progress counter and track the completion condition ourselves.
|
# Increment progress counter and track the completion condition ourselves.
|
||||||
b = badger.badge('250-words')
|
b = get_badge('250-words')
|
||||||
p = b.progress_for(o.creator).increment_by(o.word_count)
|
p = b.progress_for(o.creator).increment_by(o.word_count)
|
||||||
if p.counter >= 250:
|
if p.counter >= 250:
|
||||||
b.award_to(o.creator)
|
b.award_to(o.creator)
|
||||||
|
@ -55,7 +56,7 @@ def on_guestbook_post(sender, **kwargs):
|
||||||
# Update percentage from total word count, and Progress will award on 100%
|
# Update percentage from total word count, and Progress will award on 100%
|
||||||
total_word_count = (GuestbookEntry.objects.filter(creator=o.creator)
|
total_word_count = (GuestbookEntry.objects.filter(creator=o.creator)
|
||||||
.aggregate(s=Sum('word_count'))['s'])
|
.aggregate(s=Sum('word_count'))['s'])
|
||||||
(badger.progress("250-words-by-percent", o.creator)
|
(get_progress("250-words-by-percent", o.creator)
|
||||||
.update_percent(total_word_count, 250))
|
.update_percent(total_word_count, 250))
|
||||||
|
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче