Skip to content
This repository has been archived by the owner on Feb 13, 2019. It is now read-only.

Commit

Permalink
Squashed merge of promotions-scheduler
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew Kos committed Jan 22, 2015
1 parent c2061e0 commit ec8de06
Show file tree
Hide file tree
Showing 21 changed files with 1,503 additions and 224 deletions.
2 changes: 1 addition & 1 deletion bulbs/__init__.py
@@ -1 +1 @@
__version__ = "0.3.16"
__version__ = "0.3.17"
7 changes: 6 additions & 1 deletion bulbs/api/urls.py
Expand Up @@ -11,12 +11,17 @@
url(r"^", include(api_v1_router.urls)) # noqa
)

if "bulbs.promotion" in settings.INSTALLED_APPS:
urlpatterns += (
url(r"^", include("bulbs.promotion.urls")),
)

if "bulbs.cms_notifications" in settings.INSTALLED_APPS:
urlpatterns += (
url(r"^notifications/(?P<pk>\d+)?", notifications_view, name="notifications"),
)

if "bulbs.contributions" in settings.INSTALLED_APPS:
urlpatterns += (
url(r"^contributions/", include('bulbs.contributions.urls')),
url(r"^contributions/", include("bulbs.contributions.urls")),
)
32 changes: 1 addition & 31 deletions bulbs/api/views.py
Expand Up @@ -30,10 +30,8 @@
)
from bulbs.contributions.serializers import ContributionSerializer
from bulbs.contributions.models import Contribution
from bulbs.promotion.models import ContentList, ContentListHistory
from bulbs.promotion.serializers import ContentListSerializer
from .mixins import UncachedResponse
from .permissions import CanEditContent, CanPromoteContent, CanPublishContent
from .permissions import CanEditContent, CanPublishContent


class ContentViewSet(UncachedResponse, viewsets.ModelViewSet):
Expand Down Expand Up @@ -326,33 +324,6 @@ class UserViewSet(UncachedResponse, viewsets.ModelViewSet):
paginate_by = 20


class ContentListViewSet(UncachedResponse, viewsets.ModelViewSet):
"""
uncached viewset for `bulbs.promotions.ContentList` model
"""

model = ContentList
serializer_class = ContentListSerializer
paginate_by = 20
permission_classes = [IsAdminUser, CanPromoteContent]

def post_save(self, obj, created=False):
"""creates a record in the `bulbs.promotion.ContentListHistory`
:param obj: the instance saved
:param created: boolean expressing if the object was newly created (`False` if updated)
"""
ContentListHistory.objects.create(content_list=obj, data=obj.data)

@decorators.link()
def preview(self):
pass

@decorators.link()
def futures(self):
pass


class LogEntryViewSet(UncachedResponse, viewsets.ModelViewSet):
"""
uncached viewset for `bulbs.content.LogEntry` model
Expand Down Expand Up @@ -469,7 +440,6 @@ def retrieve(self, request, *args, **kwargs):
# note: me view is registered in urls.py
api_v1_router = routers.DefaultRouter()
api_v1_router.register(r"content", ContentViewSet, base_name="content")
api_v1_router.register(r"contentlist", ContentListViewSet, base_name="contentlist")
api_v1_router.register(r"tag", TagViewSet, base_name="tag")
api_v1_router.register(r"log", LogEntryViewSet, base_name="logentry")
api_v1_router.register(r"author", AuthorViewSet, base_name="author")
Expand Down
7 changes: 7 additions & 0 deletions bulbs/promotion/api.py
@@ -0,0 +1,7 @@
from rest_framework import routers

from .views import PZoneViewSet


api_v1_router = routers.DefaultRouter()
api_v1_router.register(r"pzone", PZoneViewSet, base_name="pzone")
14 changes: 14 additions & 0 deletions bulbs/promotion/middleware.py
@@ -0,0 +1,14 @@
from django.utils.dateparse import parse_datetime


class PromotionMiddleware(object):

def process_template_response(self, request, response):
when = None
if request.method == "GET" and "pzone_preview" in request.GET:
when = parse_datetime(request.GET["pzone_preview"])

if when:
response.context_data["pzone_preview"] = when

return response
147 changes: 147 additions & 0 deletions bulbs/promotion/migrations/0002_content_list_to_pzone.py
@@ -0,0 +1,147 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations
import json_field.fields


class Migration(migrations.Migration):

dependencies = [
('contenttypes', '0001_initial'),
('content', '0001_initial'),
('promotion', '0001_initial'),
]

operations = [

# cleanup old models
migrations.DeleteModel(
name='LockOperation',
),
migrations.DeleteModel(
name='UnlockOperation',
),
migrations.DeleteModel(
name='InsertOperation'
),
migrations.DeleteModel(
name='ReplaceOperation'
),
migrations.DeleteModel(
name='ContentListOperation'
),
migrations.DeleteModel(
name='ContentListHistory',
),

# fix up content list which is now pzone
migrations.RenameModel(
old_name='ContentList',
new_name='PZone',
),
migrations.RenameField(
model_name='pzone',
old_name='length',
new_name='zone_length',
),

# pzone operation modifications
migrations.CreateModel(
name='PZoneOperation',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('when', models.DateTimeField()),
('applied', models.BooleanField(default=False)),
],
options={
'ordering': ['-when', 'id'],
},
bases=(models.Model,),
),
migrations.AddField(
model_name='pzoneoperation',
name='content',
field=models.ForeignKey(related_name='+', to='content.Content'),
preserve_default=True,
),
migrations.AddField(
model_name='pzoneoperation',
name='polymorphic_ctype',
field=models.ForeignKey(related_name='polymorphic_promotion.pzoneoperation_set', editable=False, to='contenttypes.ContentType', null=True),
preserve_default=True,
),
migrations.AddField(
model_name='pzoneoperation',
name='pzone',
field=models.ForeignKey(related_name='operations', to='promotion.PZone'),
preserve_default=True,
),

# delete operation modifications
migrations.CreateModel(
name='DeleteOperation',
fields=[
('pzoneoperation_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='promotion.PZoneOperation')),
],
options={
'abstract': False,
},
bases=('promotion.pzoneoperation',),
),

# insert operation modifications
migrations.CreateModel(
name='InsertOperation',
fields=[
('pzoneoperation_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='promotion.PZoneOperation')),
],
options={
'abstract': False,
},
bases=('promotion.pzoneoperation',),
),
migrations.AddField(
model_name='insertoperation',
name='index',
field=models.IntegerField(default=0),
preserve_default=True,
),

# replace operation modifications
migrations.CreateModel(
name='ReplaceOperation',
fields=[
('pzoneoperation_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='promotion.PZoneOperation')),
],
options={
'abstract': False,
},
bases=('promotion.pzoneoperation',),
),
migrations.AddField(
model_name='replaceoperation',
name='index',
field=models.IntegerField(default=0),
preserve_default=True,
),

# pzone history modifications
migrations.CreateModel(
name='PZoneHistory',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('data', json_field.fields.JSONField(default=[], help_text='Enter a valid JSON object')),
('date', models.DateTimeField(auto_now_add=True)),
],
options={
},
bases=(models.Model,),
),
migrations.AddField(
model_name='pzonehistory',
name='pzone',
field=models.ForeignKey(related_name='history', to='promotion.PZone'),
preserve_default=True,
),
]
26 changes: 26 additions & 0 deletions bulbs/promotion/migrations/0003_auto_20150121_1626.py
@@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('promotion', '0002_content_list_to_pzone'),
]

operations = [
migrations.AlterModelOptions(
name='pzone',
options={'ordering': ['name']},
),
migrations.AlterModelOptions(
name='pzonehistory',
options={'ordering': ['-date']},
),
migrations.AlterModelOptions(
name='pzoneoperation',
options={'ordering': ['when', 'id']},
),
]

0 comments on commit ec8de06

Please sign in to comment.