Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions pyconbalkan/conference/abstractions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from django.contrib import admin
from django.db import models
from django.utils.translation import ugettext_lazy as _

from pyconbalkan.conference.models import Conference


def _get_default_conference():
return Conference.objects.first().id


class AbstractConference(models.Model):
conference = models.ForeignKey(
Conference, on_delete=models.CASCADE, default=_get_default_conference
)

class Meta:
abstract = True


class ConferenceFilter(admin.SimpleListFilter):
title = _('Conference year')
parameter_name = 'conference'

def choices(self, changelist):
for lookup, title in self.lookup_choices:
yield {
'selected': self.value() is lookup or self.value() == str(lookup),
'query_string': changelist.get_query_string(
{self.parameter_name: lookup}
),
'display': title,
}

def lookups(self, request, model_admin):
choices = []
for _ in Conference.objects.all():
if _ == request.conference:
choices.append((None, "{} Current".format(_)))
else:
choices.append((_.id, str(_)))
return choices

def queryset(self, request, queryset):
return queryset.filter(conference=self.value() or request.conference.pk)


class ConferenceAbstractAdmin(admin.ModelAdmin):
list_filter = (ConferenceFilter,)
17 changes: 14 additions & 3 deletions pyconbalkan/conference/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@ class ConferenceSelectionMiddleware:
def __init__(self, get_response):
self.get_response = get_response

def _get_year_from_domain(self, request):
domain = request.META.get('HTTP_HOST', 'localhost')
try:
return int(domain.split('.')[0])
except ValueError:
# Adding a non existing year, so it will never find this one, and will default to current.
return 9999

def __call__(self, request):
"""
Code to be executed for each request before
Expand All @@ -20,12 +28,15 @@ def __call__(self, request):
`conference` is the conference.models.Conference object for the
respective year fetched from it's domain.
"""
if 'year' in request.GET.keys():
domain_year = int(request.GET['year'])
else:
domain_year = self._get_year_from_domain(request)


domain = request.META.get('HTTP_HOST', 'localhost')
try:
domain_year = int(domain.split('.')[0])
request.conference = Conference.objects.get(year=domain_year)
except (Conference.DoesNotExist, ValueError):
except Conference.DoesNotExist:
request.conference = Conference.objects.filter(active=True).first()
if not request.conference:
return self.get_response(request)
Expand Down
3 changes: 2 additions & 1 deletion pyconbalkan/speaker/admin.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
from django.contrib import admin
from markdownx.admin import MarkdownxModelAdmin

from pyconbalkan.conference.abstractions import ConferenceAbstractAdmin
from pyconbalkan.speaker.models import Speaker, SpeakerPhoto


class SpeakerImageInline(admin.TabularInline):
model = SpeakerPhoto


class SpeakerAdmin(MarkdownxModelAdmin):
class SpeakerAdmin(ConferenceAbstractAdmin, MarkdownxModelAdmin):
inlines = [SpeakerImageInline]


Expand Down
21 changes: 21 additions & 0 deletions pyconbalkan/speaker/migrations/0011_speaker_conference.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 2.1.7 on 2019-03-03 16:46

from django.db import migrations, models
import django.db.models.deletion
import pyconbalkan.conference.abstractions


class Migration(migrations.Migration):

dependencies = [
('conference', '0007_auto_20190227_0738'),
('speaker', '0010_speaker_country'),
]

operations = [
migrations.AddField(
model_name='speaker',
name='conference',
field=models.ForeignKey(default=pyconbalkan.conference.abstractions._get_default_conference, on_delete=django.db.models.deletion.CASCADE, to='conference.Conference'),
),
]
3 changes: 2 additions & 1 deletion pyconbalkan/speaker/models.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from django.db import models
from django.db.models import CASCADE

from pyconbalkan.conference.abstractions import AbstractConference
from pyconbalkan.core.models import Person, ActiveModel


class Speaker(ActiveModel, Person):
class Speaker(AbstractConference, ActiveModel, Person):
keynote = models.BooleanField(default=False)

def __str__(self):
Expand Down
5 changes: 4 additions & 1 deletion pyconbalkan/sponsors/admin.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
from django.contrib import admin

from pyconbalkan.conference.abstractions import ConferenceAbstractAdmin
from pyconbalkan.sponsors.models import Package, PackageItem, Sponsor, Sponsoring

admin.site.register(Sponsor)

admin.site.register(Sponsor, ConferenceAbstractAdmin)
admin.site.register(Sponsoring)
admin.site.register(Package)
admin.site.register(PackageItem)
18 changes: 18 additions & 0 deletions pyconbalkan/sponsors/migrations/0009_auto_20190303_1426.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.1.7 on 2019-03-03 14:26

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('sponsors', '0008_auto_20180811_1903'),
]

operations = [
migrations.AlterField(
model_name='sponsor',
name='logo',
field=models.ImageField(upload_to='sponsors/logo'),
),
]
21 changes: 21 additions & 0 deletions pyconbalkan/sponsors/migrations/0010_sponsor_conference.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 2.1.7 on 2019-03-03 14:42

from django.db import migrations, models
import django.db.models.deletion
import pyconbalkan.conference.abstractions


class Migration(migrations.Migration):

dependencies = [
('conference', '0007_auto_20190227_0738'),
('sponsors', '0009_auto_20190303_1426'),
]

operations = [
migrations.AddField(
model_name='sponsor',
name='conference',
field=models.ForeignKey(default=pyconbalkan.conference.abstractions._get_default_conference, on_delete=django.db.models.deletion.CASCADE, to='conference.Conference'),
),
]
5 changes: 3 additions & 2 deletions pyconbalkan/sponsors/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from markdownx.models import MarkdownxField
from djmoney.models.fields import MoneyField

from pyconbalkan.conference.abstractions import AbstractConference
from pyconbalkan.core.models import ActiveModel


Expand All @@ -25,11 +26,11 @@ class SponsorshipLevel(DjangoChoices):
}


class Sponsor(models.Model):
class Sponsor(AbstractConference):
name = models.CharField(max_length=256)
description = MarkdownxField()
level = models.CharField(max_length=16, choices=SponsorshipLevel.choices)
logo = models.ImageField(upload_to="sponsors/logo", blank=True, null=True)
logo = models.ImageField(upload_to="sponsors/logo")

def __str__(self):
return f'Sponsor [{ self.name }]'
Expand Down