You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

153 lines
4.4 KiB

from django.http import HttpResponseRedirect, HttpResponse, Http404, HttpResponsePermanentRedirect
from django.shortcuts import get_object_or_404
from city.models import City
from country.models import Country
from theme.models import Theme, Tag
from exposition.models import Exposition
from conference.models import Conference
from company.models import Company
from article.models import Article
from accounts.models import User
class RedirectMixin(object):
model = None
def get_object_url(self, key, value):
Model = self.model
try:
obj = Model.objects.get(old_url=value)
except:
obj = get_object_or_404(Model, url=value)
if obj:
return {key: obj.url}
else:
raise Http404
class CityRedirect(RedirectMixin):
model = City
class CountryRedirect(RedirectMixin):
model = Country
class ThemeRedirect(RedirectMixin):
model = Theme
class TagRedirect(RedirectMixin):
model = Tag
def get_object_url(self, key, value):
Model = self.model
try:
obj = Model.objects.get(old_url=value)
except Model.DoesNotExist:
try:
obj = Model.objects.get(url=value)
except Model.DoesNotExist:
if value.endwith('-expo'):
value = value.replace('-expo', '')
elif value.endwith('-conf'):
value = value.replace('-conf', '')
obj = get_object_or_404(old_url=value)
if obj:
return {key: obj.url}
else:
raise Http404
class CompanyRedirect(RedirectMixin):
model = Company
class EventRedirect(object):
def get_object_url(self,key, value):
try:
obj = Exposition.objects.get(old_url=value)
except Exposition.DoesNotExist:
obj = Exposition.objects.safe_get(url=value)
except Exposition.MultipleObjectsReturned:
obj = Exposition.objects.filter(old_url=value)[0]
if not obj:
try:
obj = Conference.objects.get(old_url=value)
except Conference.DoesNotExist:
obj = Conference.objects.safe_get(url=value)
except Conference.MultipleObjectsReturned:
obj = Conference.objects.filter(old=value)[0]
if obj:
return {'event_url': obj.url, 'event_catalog': obj.catalog}
else:
raise Http404
class ArticleRedirect(object):
def get_object_url(self,key, value):
obj = get_object_or_404(Article, id=value)
return {key: obj.slug}
class UserRedirect(object):
def get_object_url(self,key, value):
obj = get_object_or_404(User, url=value)
return {key: obj.url}
class PageRedirect(object):
def get_object_url(self,key, value):
return {key: value}
class News_p(object):
def get_object_url(self,key, value):
obj = get_object_or_404(Article, old_id=value)
return {key: obj.slug}
old_params = {'city': CityRedirect, 'country': CountryRedirect, 'theme': ThemeRedirect, 'tag': TagRedirect,
'event': EventRedirect, 'company': Company, 'article': ArticleRedirect, 'user': UserRedirect,
'page': PageRedirect, 'news_p': News_p}
def old_redirect(request, *args, **kwargs):
redirect = kwargs.get('redirect_url')
params = dict(kwargs)
updates = {}
for key, value in params.iteritems():
if key in old_params:
redirect_obj = old_params[key]()
updates.update(redirect_obj.get_object_url(key, value))
params.update(updates)
redirect = redirect.format(**params)
return HttpResponsePermanentRedirect(redirect)
def tag_redirect(request, *args, **kwargs):
redirect = kwargs.get('redirect_url')
params = dict(kwargs)
tag = params.get('tag', '')
if tag.endswith('-conf'):
redirect = redirect.replace('expo', 'conference')
updates = {}
for key, value in params.iteritems():
if key in old_params:
redirect_obj = old_params[key]()
updates.update(redirect_obj.get_object_url(key, value))
params.update(updates)
redirect = redirect.format(**params)
return HttpResponsePermanentRedirect(redirect)
def old_profile(request):
user = request.user
if user.is_authenticated():
return HttpResponseRedirect('/%s/'%user.url)
else:
raise Http404