Moving / renaming some utils from __init__.py to utils.py

This commit is contained in:
Les Orchard 2011-07-31 13:29:21 -04:00
Родитель 5ff33b1b4a
Коммит 5632a117b3
4 изменённых файлов: 69 добавлений и 65 удалений

Просмотреть файл

@ -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))