diff --git a/project/commons/paginator.py b/project/commons/paginator.py
index 6213c2b..3d02a07 100644
--- a/project/commons/paginator.py
+++ b/project/commons/paginator.py
@@ -5,7 +5,7 @@ from django.conf import settings
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django import forms
-from utils import safe_int
+from commons.utils import safe_int
# допустимые значения `per_page`
diff --git a/project/commons/pdf_tools.py b/project/commons/pdf_tools.py
index da03829..b269a67 100644
--- a/project/commons/pdf_tools.py
+++ b/project/commons/pdf_tools.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
-import cStringIO as StringIO
+from io import StringIO
-import ho.pisa as pisa
+from xhtml2pdf import pisa
from django.template.loader import render_to_string
from django.template import RequestContext
diff --git a/project/commons/xls/__init__.py b/project/commons/xls/__init__.py
index ae64160..f454af5 100644
--- a/project/commons/xls/__init__.py
+++ b/project/commons/xls/__init__.py
@@ -1,3 +1,3 @@
-from useful_tools import *
-from get_xlwt_style_list import *
-from xls_to_response import *
+from commons.xls.useful_tools import *
+from commons.xls.get_xlwt_style_list import *
+from commons.xls.xls_to_response import *
diff --git a/project/customer/forms.py b/project/customer/forms.py
index 6566c8e..6af2bdb 100644
--- a/project/customer/forms.py
+++ b/project/customer/forms.py
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
from django import forms
-from django.utils.encoding import force_unicode
+from django.utils.encoding import force_text
from django.utils.safestring import mark_safe
from django.conf import settings
from yandex_money.forms import PaymentForm
-from project.commons.forms import MyBaseModelForm, set_field_error
+from commons.forms import MyBaseModelForm, set_field_error
from customer import consts, models
@@ -362,7 +362,7 @@ class UserProfileFiltersForm(MyBaseModelForm):
f_acc.queryset = accounts
f_acc.empty_label = None
f_acc.label_from_instance = lambda obj: mark_safe(
- force_unicode('%s
%s' % (obj.account, obj.name,))) # исправить метку
+ force_text('%s
%s' % (obj.account, obj.name,))) # исправить метку
# заблокировать чекбоксы, если: не заполнены определенные поля в профиле или нет расчетных счетов
if profile:
diff --git a/project/customer/views/profile.py b/project/customer/views/profile.py
index cf49ad1..9ba95a1 100644
--- a/project/customer/views/profile.py
+++ b/project/customer/views/profile.py
@@ -133,7 +133,7 @@ def tmp_upload(request):
tmp_dir = tempfile.mkdtemp('img_tmp', settings.MEDIA_ROOT +
'/cache/imgs/')
- os.chmod(tmp_dir, 0755)
+ os.chmod(tmp_dir, 755)
open(tmp_dir + '/' + file_.name, "w").write(file_.read())
tmp_url_partial = os.path.basename(tmp_dir) + '/' + file_.name
thumbnailer = get_thumbnailer(tmp_dir + '/' + file_.name)
diff --git a/project/docs/admin.py b/project/docs/admin.py
index 92add40..e2a738b 100644
--- a/project/docs/admin.py
+++ b/project/docs/admin.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from django.contrib import admin
-import models
+from docs import models
#class InvoiceItemInline(admin.TabularInline):
diff --git a/project/docs/as_xls/render_to_xls.py b/project/docs/as_xls/render_to_xls.py
index d655a75..4fa1b85 100644
--- a/project/docs/as_xls/render_to_xls.py
+++ b/project/docs/as_xls/render_to_xls.py
@@ -2,7 +2,10 @@
import os
import re
import math
-from StringIO import StringIO
+try:
+ from StringIO import StringIO
+except ImportError:
+ from io import StringIO
import xlrd
import xlwt
@@ -11,7 +14,7 @@ from django.conf import settings
from django.template import Template, RequestContext
from django.template.base import BLOCK_TAG_START, BLOCK_TAG_END, VARIABLE_TAG_START, VARIABLE_TAG_END
-from project.commons.xls import (get_xlwt_style_list, copy_cells, width_cols, horz_page_break, mm_to_twips,
+from commons.xls import (get_xlwt_style_list, copy_cells, width_cols, horz_page_break, mm_to_twips,
sum_src_heights, sum_dst_heights)
diff --git a/project/docs/autocomplete_light_registry.py b/project/docs/autocomplete_light_registry.py
index bbf43d3..c15768e 100644
--- a/project/docs/autocomplete_light_registry.py
+++ b/project/docs/autocomplete_light_registry.py
@@ -2,7 +2,7 @@
import autocomplete_light
from django.db.models import Q
-from models import (Country, Currency, Measure)
+from docs.models import (Country, Currency, Measure)
from customer.models import Client
diff --git a/project/docs/filters.py b/project/docs/filters.py
index 4114cf2..8ae1405 100644
--- a/project/docs/filters.py
+++ b/project/docs/filters.py
@@ -16,14 +16,14 @@ class CustomDateRangeFilter(django_filters.DateRangeFilter):
self.options = options
except KeyError:
pass
- kwargs['choices'] = [(key, value[0]) for key, value in self.options.iteritems()]
+ kwargs['choices'] = [(key, value[0]) for key, value in self.options.items()]
super(CustomDateRangeFilter, self).__init__(*args, **kwargs)
class CustomChoiceFilter(django_filters.ChoiceFilter):
def __init__(self, *args, **kwargs):
self.options = kwargs.pop('options') # обязательный параметр!
- kwargs['choices'] = [(key, value[0]) for key, value in self.options.iteritems()]
+ kwargs['choices'] = [(key, value[0]) for key, value in self.options.items()]
super(CustomChoiceFilter, self).__init__(*args, **kwargs)
def filter(self, qs, value):
@@ -151,7 +151,7 @@ class BaseDocsFilterSet(django_filters.FilterSet):
self.filters['invoice'].extra['queryset'] = Invoice.objects.get_all(self.request.user.profile)
# сбросить у полей формы атрибут help_text
- for field in self.form.fields.itervalues():
+ for field in self.form.fields.values():
field.help_text = None
diff --git a/project/docs/models/invoice.py b/project/docs/models/invoice.py
index 09dd484..4960814 100644
--- a/project/docs/models/invoice.py
+++ b/project/docs/models/invoice.py
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
from django.db import models
-from base_models import BaseInvoiceModel, BaseItemInvoiceModel
-from linked_docs_mixin import LinkedDocsMixin
+from docs.models.base_models import BaseInvoiceModel, BaseItemInvoiceModel
+from docs.models.linked_docs_mixin import LinkedDocsMixin
from docs import consts
diff --git a/project/docs/views/base_views.py b/project/docs/views/base_views.py
index a32dd0d..d8db713 100644
--- a/project/docs/views/base_views.py
+++ b/project/docs/views/base_views.py
@@ -369,7 +369,7 @@ class BaseViews(object):
c1 = time()
pdf = render_pdf_to_string(self.request, self.PDF_TEMPLATE, params)
if DEBUG:
- print '%s generation time (seconds): %s' % (self.PDF_TEMPLATE, time()-c1,)
+ print ('%s generation time (seconds): %s' % (self.PDF_TEMPLATE, time()-c1,))
return pdf
def get_xls(self, *args, **kwargs):
@@ -387,7 +387,7 @@ class BaseViews(object):
c1 = time()
xls = render_xls_to_string(self.request, self.XLS_TEMPLATE, params)
if DEBUG:
- print '%s generation time (seconds): %s' % (self.XLS_TEMPLATE, time()-c1,)
+ print ('%s generation time (seconds): %s' % (self.XLS_TEMPLATE, time()-c1,))
return xls
def as_img(self, *args, **kwargs):
@@ -402,7 +402,7 @@ class BaseViews(object):
os.makedirs(tmp_media_dir)
tmp_dir = tempfile.mkdtemp(dir=tmp_media_dir)
- os.chmod(tmp_dir, 0755)
+ os.chmod(tmp_dir, 755)
tmp_dirname = os.path.split(tmp_dir)[1]
f = open(filename, 'w')
@@ -813,7 +813,7 @@ class BaseItemsViews(BaseViews):
c1 = time()
pdf = render_pdf_to_string(self.request, self.PDF_TEMPLATE, params)
if DEBUG:
- print '%s generation time (seconds): %s' % (self.PDF_TEMPLATE, time()-c1,)
+ print ('%s generation time (seconds): %s' % (self.PDF_TEMPLATE, time()-c1,))
return pdf
def get_xls(self, *args, **kwargs):
@@ -832,5 +832,5 @@ class BaseItemsViews(BaseViews):
c1 = time()
xls = render_xls_to_string(self.request, self.XLS_TEMPLATE, params)
if DEBUG:
- print '%s generation time (seconds): %s' % (self.XLS_TEMPLATE, time()-c1,)
+ print ('%s generation time (seconds): %s' % (self.XLS_TEMPLATE, time()-c1,))
return xls
diff --git a/project/myauth/admin.py b/project/myauth/admin.py
index e4c4bf8..66005b3 100644
--- a/project/myauth/admin.py
+++ b/project/myauth/admin.py
@@ -3,8 +3,8 @@ from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import ugettext_lazy as _
-from models import DokUser
-from forms import CustomUserChangeForm, CustomUserCreationForm
+from myauth.models import DokUser
+from myauth.forms import CustomUserChangeForm, CustomUserCreationForm
class CustomUserAdmin(UserAdmin):
diff --git a/project/myauth/forms.py b/project/myauth/forms.py
index 261c5d6..7ac4570 100644
--- a/project/myauth/forms.py
+++ b/project/myauth/forms.py
@@ -6,10 +6,10 @@ from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from captcha.fields import CaptchaField
-from project.commons.forms import set_field_error
-from project.customer import consts as customer_consts
+from commons.forms import set_field_error
+from customer import consts as customer_consts
-from models import DokUser
+from myauth.models import DokUser
PASSWORD_MIN_LEN = getattr(settings, 'PASSWORD_MIN_LEN ', 7)
diff --git a/project/myauth/models.py b/project/myauth/models.py
index 73401f3..ca5b5ec 100644
--- a/project/myauth/models.py
+++ b/project/myauth/models.py
@@ -8,11 +8,11 @@ from django.utils.translation import ugettext_lazy as _
from django.core.mail import send_mail
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
-import managers
+from myauth import managers
class DokUser(AbstractBaseUser, PermissionsMixin):
- """(не)Самопальная модель пользователя - содрано у caktusgroup.com,
+ """(не)Самопальная модель пользователя - содрано у caktusgroup.com,
также проблемы с добавлением юзера в админке решены при помощи
stackoverflow, да хранит гугл имя его.
"""
diff --git a/project/myauth/urls.py b/project/myauth/urls.py
index e91da65..7b747ab 100644
--- a/project/myauth/urls.py
+++ b/project/myauth/urls.py
@@ -2,7 +2,7 @@
from django.conf.urls import *
from django.views.generic import TemplateView
-import views
+from myauth import views
urlpatterns = patterns('',
diff --git a/requirements-py3.txt b/requirements-py3.txt
index 2b07132..ad550be 100644
--- a/requirements-py3.txt
+++ b/requirements-py3.txt
@@ -36,7 +36,7 @@ djangocms-teaser==0.0.1
djangocms-text-ckeditor==2.7.0
djangocms-video==0.0.1
easy-thumbnails==2.4.1
-flup==1.0.2
+flup==1.0.3.dev20161029
ghostscript==0.4.1
gnureadline==6.3.3
html5lib==0.999
@@ -54,11 +54,11 @@ psycopg2==2.6
pylint==1.6.5
pyparsing==2.2.0
pyPdf==1.13
-python-dateutil==2.2
+python-dateutil==2.6.0
python-memcached==1.58
-pytils==0.2.3
+pytils==0.3
pytz==2017.2
-reportlab==2.7
+reportlab==3.4.0
simplejson==3.3.1
six==1.7.3
sqlparse==0.2.3
@@ -66,6 +66,6 @@ Unidecode==0.4.17
vine==1.1.3
Werkzeug==0.12
wrapt==1.10.10
-xlrd==0.9.2
-xlutils==1.7.1
-xlwt==0.7.5
+xlrd==1.0.0
+xlutils==2.0.0
+xlwt==1.2.0