drop python2 support, upgrade to django 3
This commit is contained in:
parent
80390a1f9b
commit
844382b1e8
124 changed files with 413 additions and 563 deletions
|
|
@ -8,7 +8,7 @@ from oxdjango.shortcuts import render_to_json_response, json_response
|
|||
def capability_required_json(capability):
|
||||
def capability_required(function=None):
|
||||
def _wrapped_view(request, *args, **kwargs):
|
||||
if request.user.is_authenticated() and \
|
||||
if request.user.is_authenticated and \
|
||||
request.user.profile.capability(capability):
|
||||
return function(request, *args, **kwargs)
|
||||
return render_to_json_response(json_response(status=403, text='permission denied'))
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from django.conf import settings
|
||||
from django.contrib.sessions.models import Session
|
||||
from django.utils.deprecation import MiddlewareMixin
|
||||
|
||||
class UpdateSession(MiddlewareMixin):
|
||||
|
||||
class UpdateSession(object):
|
||||
def process_request(self, request):
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
expire_date = Session.objects.get(session_key=request.session.session_key).expire_date
|
||||
if (request.session.get_expiry_date() - expire_date).total_seconds() > settings.SESSION_UPDATE:
|
||||
request.session.modified = True
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import copy
|
||||
from datetime import datetime
|
||||
|
|
@ -9,7 +8,6 @@ from django.contrib.auth import get_user_model
|
|||
from django.db import models
|
||||
from django.db.models import Max
|
||||
from django.conf import settings
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
from oxdjango.fields import JSONField
|
||||
|
||||
import ox
|
||||
|
|
@ -21,10 +19,9 @@ from .utils import get_ip, get_location
|
|||
|
||||
User = get_user_model()
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class SessionData(models.Model):
|
||||
session_key = models.CharField(max_length=40, primary_key=True)
|
||||
user = models.OneToOneField(User, null=True, blank=True, related_name='data')
|
||||
user = models.OneToOneField(User, null=True, blank=True, related_name='data', on_delete=models.CASCADE)
|
||||
firstseen = models.DateTimeField(auto_now_add=True, db_index=True)
|
||||
lastseen = models.DateTimeField(default=datetime.now, db_index=True)
|
||||
username = models.CharField(max_length=255, null=True, db_index=True)
|
||||
|
|
@ -50,7 +47,7 @@ class SessionData(models.Model):
|
|||
groupssort = models.CharField(default=None, blank=True, null=True, max_length=255)
|
||||
|
||||
def __str__(self):
|
||||
return u"%s" % self.session_key
|
||||
return "%s" % self.session_key
|
||||
|
||||
def parse_useragent(self):
|
||||
if self.useragent:
|
||||
|
|
@ -69,8 +66,8 @@ class SessionData(models.Model):
|
|||
if self.ip:
|
||||
city, country = get_location(self.ip)
|
||||
if city:
|
||||
location = u'%s, %s' % (city, country)
|
||||
location_sort = u'%s, %s' % (country, city)
|
||||
location = '%s, %s' % (city, country)
|
||||
location_sort = '%s, %s' % (country, city)
|
||||
else:
|
||||
location = location_sort = country
|
||||
self.location = location
|
||||
|
|
@ -98,10 +95,10 @@ class SessionData(models.Model):
|
|||
request.session.modified = True
|
||||
session_key = request.session.session_key
|
||||
assert session_key
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
cls.objects.filter(user=request.user).update(session_key=session_key)
|
||||
data, created = cls.objects.get_or_create(session_key=session_key)
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
data.user = request.user
|
||||
data.ip = get_ip(request)
|
||||
data.useragent = request.META.get('HTTP_USER_AGENT', '')[:4096]
|
||||
|
|
@ -115,10 +112,10 @@ class SessionData(models.Model):
|
|||
]
|
||||
screen = data.info.get('screen', {})
|
||||
if screen and 'height' in screen and 'width' in screen:
|
||||
data.screensize = u'%s\xd7%s' % (screen['width'], screen['height'])
|
||||
data.screensize = '%s\xd7%s' % (screen['width'], screen['height'])
|
||||
window = data.info.get('window', {})
|
||||
if window and 'outerHeight' in window and 'outerWidth' in window:
|
||||
data.windowsize = u'%s\xd7%s' % (window['outerWidth'], window['outerHeight'])
|
||||
data.windowsize = '%s\xd7%s' % (window['outerWidth'], window['outerHeight'])
|
||||
if not data.timesseen:
|
||||
data.timesseen = 0
|
||||
data.timesseen += 1
|
||||
|
|
@ -172,10 +169,9 @@ class SessionData(models.Model):
|
|||
del j[key]
|
||||
return j
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class UserProfile(models.Model):
|
||||
reset_code = models.CharField(max_length=255, blank=True, null=True, unique=True)
|
||||
user = models.OneToOneField(User, related_name='profile')
|
||||
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
|
||||
|
||||
level = models.IntegerField(default=1)
|
||||
files_updated = models.DateTimeField(default=datetime.now)
|
||||
|
|
@ -395,7 +391,7 @@ def get_ui(user_ui, user=None):
|
|||
def init_user(user, request=None):
|
||||
if request:
|
||||
SessionData.get_or_create(request)
|
||||
if user.is_anonymous():
|
||||
if user.is_anonymous:
|
||||
result = settings.CONFIG['user'].copy()
|
||||
result['ui'] = get_ui(json.loads(request.session.get('ui', '{}')))
|
||||
else:
|
||||
|
|
@ -434,7 +430,7 @@ def user_json(user, keys=None):
|
|||
return j
|
||||
|
||||
def has_capability(user, capability):
|
||||
if user.is_anonymous():
|
||||
if user.is_anonymous:
|
||||
level = 'guest'
|
||||
else:
|
||||
level = user.profile.get_level()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import json
|
||||
from datetime import timedelta
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import random
|
||||
random.seed()
|
||||
|
|
@ -118,7 +117,7 @@ def signout(request, data):
|
|||
see: signin, signup
|
||||
'''
|
||||
response = json_response(text='ok')
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
uid = request.user.id
|
||||
profile = request.user.profile
|
||||
if profile.ui.get('page') == 'signout':
|
||||
|
|
@ -608,7 +607,7 @@ def mail(request, data):
|
|||
'url': request.build_absolute_uri('/'),
|
||||
}
|
||||
message = template.render(context, request)
|
||||
subject = u'Fwd: %s' % subject
|
||||
subject = 'Fwd: %s' % subject
|
||||
email_to = '"%s" <%s>' % (request.user.username, request.user.email)
|
||||
receipt = EmailMessage(subject,
|
||||
message,
|
||||
|
|
@ -634,7 +633,7 @@ def contact(request, data):
|
|||
'''
|
||||
name = data.get('name', '')
|
||||
email = data.get('email', '')
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
if not name:
|
||||
name = request.user.username
|
||||
if not email:
|
||||
|
|
@ -657,10 +656,10 @@ def contact(request, data):
|
|||
message = ox.decode_html(template.render(context, request))
|
||||
response = json_response(text='message sent')
|
||||
try:
|
||||
send_mail(u'%s Contact - %s' % (settings.SITENAME, subject), message, email_from, email_to)
|
||||
send_mail('%s Contact - %s' % (settings.SITENAME, subject), message, email_from, email_to)
|
||||
except BadHeaderError:
|
||||
response = json_response(status=400, text='invalid data')
|
||||
if request.user.is_authenticated() \
|
||||
if request.user.is_authenticated \
|
||||
and 'receipt' in data \
|
||||
and data['receipt']:
|
||||
template = loader.get_template('contact_receipt.txt')
|
||||
|
|
@ -735,7 +734,7 @@ actions.register(editPreferences, cache=False)
|
|||
|
||||
|
||||
def reset_ui(request):
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
profile = request.user.profile
|
||||
profile.ui = {}
|
||||
profile.save()
|
||||
|
|
@ -752,7 +751,7 @@ def resetUI(request, data):
|
|||
see: setUI
|
||||
'''
|
||||
response = json_response()
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
profile = request.user.profile
|
||||
profile.ui = {}
|
||||
profile.save()
|
||||
|
|
@ -773,7 +772,7 @@ def setUI(request, data):
|
|||
notes: To set nested keys, use {'foo.bar.baz': value}
|
||||
see: resetUI
|
||||
'''
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
profile = request.user.profile
|
||||
ui = profile.ui
|
||||
else:
|
||||
|
|
@ -794,7 +793,7 @@ def setUI(request, data):
|
|||
del p[keys[0]]
|
||||
else:
|
||||
p[keys[0]] = value
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
profile.save()
|
||||
else:
|
||||
request.session['ui'] = json.dumps(ui)
|
||||
|
|
@ -802,7 +801,7 @@ def setUI(request, data):
|
|||
if data.get('item'):
|
||||
item = get_object_or_404_json(Item, public_id=data['item'])
|
||||
with transaction.atomic():
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
access, created = Access.objects.get_or_create(item=item, user=request.user)
|
||||
else:
|
||||
access, created = Access.objects.get_or_create(item=item, user=None)
|
||||
|
|
@ -919,7 +918,7 @@ def addGroup(request, data):
|
|||
while not created:
|
||||
g, created = Group.objects.get_or_create(name=name)
|
||||
n += 1
|
||||
name = u'%s [%d]' % (_name, n)
|
||||
name = '%s [%d]' % (_name, n)
|
||||
response['data'] = group_json(g)
|
||||
add_changelog(request, data, g.name)
|
||||
return render_to_json_response(response)
|
||||
|
|
@ -950,7 +949,7 @@ def editGroup(request, data):
|
|||
_name = re.sub(' \[\d+\]$', '', name).strip()
|
||||
while Group.objects.filter(name=name).count():
|
||||
n += 1
|
||||
name = u'%s [%d]' % (_name, n)
|
||||
name = '%s [%d]' % (_name, n)
|
||||
g.name = name
|
||||
g.save()
|
||||
add_changelog(request, data, g.name)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue