refactor settings, pdf

feature/docker
Dmitriy Shesterkin 9 years ago
parent d3c5782db6
commit 1dc0159d86
  1. 3
      .gitignore
  2. 0
      conf/env
  3. 1
      log/.gitignore
  4. 7
      src/__init__.py
  5. 2
      src/callback/views.py
  6. 14
      src/commons/pdf_tools.py
  7. 4
      src/commons/templatetags/my_tags.py
  8. 2
      src/customer/tasks.py
  9. 10
      src/customer/views/bank_accounts_ajax.py
  10. 8
      src/customer/views/clients_ajax.py
  11. 2
      src/customer/views/license.py
  12. 2
      src/customer/views/profile.py
  13. 4
      src/customer/views/profile_ajax.py
  14. 12
      src/docs/models/base_models.py
  15. 8
      src/docs/views/__init__.py
  16. 8
      src/docs/views/ajax.py
  17. 6
      src/docs/views/base_views.py
  18. 13
      src/dokumentor/__init__.py
  19. 8
      src/dokumentor/celery.py
  20. 1
      src/dokumentor/settings/__init__.py
  21. 85
      src/dokumentor/settings/base.py
  22. 30
      src/dokumentor/settings/local.py
  23. 0
      src/dokumentor/static/PD.pdf
  24. 0
      src/dokumentor/static/ckeditor/plugins/filerimage/dialogs/filerImageDialog.js
  25. 0
      src/dokumentor/static/ckeditor/plugins/filerimage/icons/filerimage.png
  26. 0
      src/dokumentor/static/ckeditor/plugins/filerimage/plugin.js
  27. 0
      src/dokumentor/static/css/custom_admin.css
  28. 0
      src/dokumentor/static/css/style.css
  29. 0
      src/dokumentor/static/css/suggestions.css
  30. 0
      src/dokumentor/static/css/ui-lightness/images/animated-overlay.gif
  31. 0
      src/dokumentor/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
  32. 0
      src/dokumentor/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
  33. 0
      src/dokumentor/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
  34. 0
      src/dokumentor/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
  35. 0
      src/dokumentor/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
  36. 0
      src/dokumentor/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
  37. 0
      src/dokumentor/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
  38. 0
      src/dokumentor/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
  39. 0
      src/dokumentor/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
  40. 0
      src/dokumentor/static/css/ui-lightness/images/ui-icons_222222_256x240.png
  41. 0
      src/dokumentor/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png
  42. 0
      src/dokumentor/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
  43. 0
      src/dokumentor/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
  44. 0
      src/dokumentor/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png
  45. 0
      src/dokumentor/static/css/ui-lightness/jquery-ui-1.10.3.custom.css
  46. 0
      src/dokumentor/static/css/ui-lightness/jquery-ui-1.10.3.custom.min.css
  47. 0
      src/dokumentor/static/dogovor.pdf
  48. 0
      src/dokumentor/static/favicon.ico
  49. 0
      src/dokumentor/static/fonts/261413575-a_AvanteLt-DemiBold.eot
  50. 0
      src/dokumentor/static/fonts/261413575-a_AvanteLt-DemiBold.html
  51. 0
      src/dokumentor/static/fonts/261413575-a_AvanteLt-DemiBold.svg
  52. 0
      src/dokumentor/static/fonts/261413575-a_AvanteLt-DemiBold.ttf
  53. 0
      src/dokumentor/static/fonts/261413575-a_AvanteLt-DemiBold.woff
  54. 0
      src/dokumentor/static/fonts/332733155-a_AvanteLt-Light.eot
  55. 0
      src/dokumentor/static/fonts/332733155-a_AvanteLt-Light.html
  56. 0
      src/dokumentor/static/fonts/332733155-a_AvanteLt-Light.svg
  57. 0
      src/dokumentor/static/fonts/332733155-a_AvanteLt-Light.ttf
  58. 0
      src/dokumentor/static/fonts/332733155-a_AvanteLt-Light.woff
  59. 0
      src/dokumentor/static/fonts/MyriadPro-Light.eot
  60. 0
      src/dokumentor/static/fonts/MyriadPro-Light.otf
  61. 0
      src/dokumentor/static/fonts/MyriadPro-Light.svg
  62. 0
      src/dokumentor/static/fonts/MyriadPro-Light.ttf
  63. 0
      src/dokumentor/static/fonts/MyriadPro-Light.woff
  64. 0
      src/dokumentor/static/fonts/myriadpro-cond.eot
  65. 0
      src/dokumentor/static/fonts/myriadpro-cond.svg
  66. 0
      src/dokumentor/static/fonts/myriadpro-cond.ttf
  67. 0
      src/dokumentor/static/fonts/myriadpro-cond.woff
  68. 0
      src/dokumentor/static/fonts/myriadpro-regular.css
  69. 0
      src/dokumentor/static/fonts/myriadpro-regular.eot
  70. 0
      src/dokumentor/static/fonts/myriadpro-regular.svg
  71. 0
      src/dokumentor/static/fonts/myriadpro-regular.ttf
  72. 0
      src/dokumentor/static/fonts/myriadpro-regular.woff
  73. 0
      src/dokumentor/static/img/add-new.png
  74. 0
      src/dokumentor/static/img/ajax-loader.gif
  75. 0
      src/dokumentor/static/img/alfa.svg
  76. 0
      src/dokumentor/static/img/asc.png
  77. 0
      src/dokumentor/static/img/beel.svg
  78. 0
      src/dokumentor/static/img/bg.png
  79. 0
      src/dokumentor/static/img/black_arrow.png
  80. 0
      src/dokumentor/static/img/close.png
  81. 0
      src/dokumentor/static/img/comepay.svg
  82. 0
      src/dokumentor/static/img/darker-bg.png
  83. 0
      src/dokumentor/static/img/desc.png
  84. 0
      src/dokumentor/static/img/envelope.png
  85. 0
      src/dokumentor/static/img/euroset.svg
  86. 0
      src/dokumentor/static/img/footer-bg.jpg
  87. 0
      src/dokumentor/static/img/glavbuh_sign.png
  88. 0
      src/dokumentor/static/img/gotopay-hover.png
  89. 0
      src/dokumentor/static/img/gotopay.png
  90. 0
      src/dokumentor/static/img/icon-add.gif
  91. 0
      src/dokumentor/static/img/icon-add.png
  92. 0
      src/dokumentor/static/img/icon-alert.gif
  93. 0
      src/dokumentor/static/img/icon-calendar.gif
  94. 0
      src/dokumentor/static/img/icon-calendar.png
  95. 0
      src/dokumentor/static/img/icon-delete.gif
  96. 0
      src/dokumentor/static/img/icon-delete.png
  97. 0
      src/dokumentor/static/img/icon-directory.png
  98. 0
      src/dokumentor/static/img/icon-edit.gif
  99. 0
      src/dokumentor/static/img/icon-edit.png
  100. 0
      src/dokumentor/static/img/icon-email.gif
  101. Some files were not shown because too many files have changed in this diff Show More

3
.gitignore vendored

@ -5,7 +5,6 @@
pip-log.txt pip-log.txt
ENV/ ENV/
.idea/ .idea/
local_settings.py
Thumbs.db Thumbs.db
distribute-*.tar.gz distribute-*.tar.gz
*.bak *.bak
@ -14,7 +13,5 @@ _public_html/
celerybeat-schedule celerybeat-schedule
yandex_money.log yandex_money.log
/tmp_emails/ /tmp_emails/
/tmp/
/celerybeat-schedule.db
/media/ /media/
/static/ /static/

1
log/.gitignore vendored

@ -1 +0,0 @@
*

@ -1,7 +0,0 @@
from __future__ import absolute_import, unicode_literals
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app
__all__ = ['celery_app']

@ -57,5 +57,5 @@ def req_avail(request, id=None):
'title': u'Сообщение', 'title': u'Сообщение',
'msg': u'Ваша Сообщение отправлено!<br />Скоро с Вами свяжется наш менеджер.', 'msg': u'Ваша Сообщение отправлено!<br />Скоро с Вами свяжется наш менеджер.',
} }
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')

@ -1,6 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from io import StringIO from io import StringIO, BytesIO
from xhtml2pdf import pisa from xhtml2pdf import pisa
from django.template.loader import render_to_string from django.template.loader import render_to_string
@ -10,7 +9,7 @@ from django.http import HttpResponse
def pdf_to_response(content, filename=None, filename_encode='windows-1251'): def pdf_to_response(content, filename=None, filename_encode='windows-1251'):
"""Выводит content в django.http.HttpResponse, который и возвращает.""" """Выводит content в django.http.HttpResponse, который и возвращает."""
response = HttpResponse(content, mimetype='application/pdf') response = HttpResponse(content, content_type='application/pdf')
if filename: if filename:
if filename_encode: if filename_encode:
filename = filename.encode(filename_encode) filename = filename.encode(filename_encode)
@ -23,8 +22,9 @@ def render_pdf_to_string(request, template_name, dictionary=None):
context_instance = RequestContext(request) context_instance = RequestContext(request)
html = render_to_string(template_name, dictionary, context_instance) html = render_to_string(template_name, dictionary, context_instance)
#return HttpResponse(html) # для отладки #return HttpResponse(html) # для отладки
result = StringIO.StringIO() result = BytesIO()
pisa.pisaDocument(StringIO.StringIO(html.encode('utf-8')), result, encoding='utf-8') pdf = pisa.pisaDocument(BytesIO(html.encode('utf-8')), result)
pdf_content = result.getvalue() pdf_content = result.getvalue()
result.close() if not pdf.err:
return pdf_content return pdf_content
return None

@ -32,7 +32,7 @@ def sum_by_attr(obj_list, attr_name, start=0, stop=None):
result += attr() result += attr()
else: else:
result += attr result += attr
except Exception, error: except Exception as error:
if DEBUG: if DEBUG:
result = 'Tag error: %s' % error result = 'Tag error: %s' % error
else: else:
@ -57,7 +57,7 @@ def to_float(value):
"""Если возможно, приводит value к типу float.""" """Если возможно, приводит value к типу float."""
try: try:
result = float(value) result = float(value)
except Exception, error: except Exception as error:
if DEBUG: if DEBUG:
result = 'Filter error, %s | %s' % (value, error,) result = 'Filter error, %s | %s' % (value, error,)
else: else:

@ -5,7 +5,7 @@ from datetime import datetime, timedelta
import traceback import traceback
from django.core.mail import mail_admins from django.core.mail import mail_admins
from celery import shared_task from dokumentor.celery import shared_task
from .models import License, UserProfile from .models import License, UserProfile
from .utils import check_one_profile from .utils import check_one_profile

@ -31,7 +31,7 @@ def bank_accounts_list_ajax(request):
a['delete_url'] = reverse('customer_bank_accounts_delete', kwargs={'id': a['pk'],}) a['delete_url'] = reverse('customer_bank_accounts_delete', kwargs={'id': a['pk'],})
data = json.dumps(list(accounts), default=dthandler) data = json.dumps(list(accounts), default=dthandler)
return HttpResponse(data, mimetype='application/json') return HttpResponse(data, content_type='application/json')
@login_required @login_required
@ -53,7 +53,7 @@ def bank_accounts_get_ajax(request, id):
account = get_object_or_404(models.BankAccount.objects.values(*fields_list), pk=id, company=request.user.profile) account = get_object_or_404(models.BankAccount.objects.values(*fields_list), pk=id, company=request.user.profile)
data = json.dumps(account, default=dthandler) data = json.dumps(account, default=dthandler)
return HttpResponse(data, mimetype='application/json') return HttpResponse(data, content_type='application/json')
@login_required @login_required
@ -83,7 +83,7 @@ def bank_accounts_add_ajax(request):
'field_errors': form.errors, # ошибки полей 'field_errors': form.errors, # ошибки полей
'form_errors': non_field_errors, # ошибки формы 'form_errors': non_field_errors, # ошибки формы
} }
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')
@login_required @login_required
@ -113,7 +113,7 @@ def bank_accounts_edit_ajax(request, id):
'field_errors': form.errors, # ошибки полей 'field_errors': form.errors, # ошибки полей
'form_errors': non_field_errors, # ошибки формы 'form_errors': non_field_errors, # ошибки формы
} }
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')
@login_required @login_required
@ -134,4 +134,4 @@ def bank_accounts_delete_ajax(request, id):
'success': True, 'success': True,
'message': {'title': 'Инфо', 'msg': 'Расчётный счёт удалён.',}, 'message': {'title': 'Инфо', 'msg': 'Расчётный счёт удалён.',},
} }
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')

@ -33,7 +33,7 @@ def clients_get_ajax(request, id):
client = get_object_or_404(models.Client.objects.values(*fields_list), pk=id, company=request.user.profile) client = get_object_or_404(models.Client.objects.values(*fields_list), pk=id, company=request.user.profile)
return HttpResponse(json.dumps(client), mimetype='application/json') return HttpResponse(json.dumps(client), content_type='application/json')
@login_required @login_required
@ -78,7 +78,7 @@ def clients_add_ajax(request):
'action': 'client-add', 'action': 'client-add',
'row_html': html, 'row_html': html,
} }
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')
@login_required @login_required
@ -117,7 +117,7 @@ def clients_edit_ajax(request, id):
'action': 'client-edit', 'action': 'client-edit',
'row_html': html, 'row_html': html,
} }
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')
@login_required @login_required
@ -157,4 +157,4 @@ def clients_delete_ajax(request, id):
'action': 'client-delete', 'action': 'client-delete',
'id': del_id, 'id': del_id,
} }
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')

@ -115,7 +115,7 @@ def delete_license(request, pk):
dictionary = {'res': 'fail'} dictionary = {'res': 'fail'}
data = json.dumps(dictionary) data = json.dumps(dictionary)
return HttpResponse(data, mimetype='application/json') return HttpResponse(data, content_type='application/json')
@csrf_exempt @csrf_exempt

@ -143,7 +143,7 @@ def tmp_upload(request):
im_url = os.path.join(settings.MEDIA_URL, os.path.relpath(im.url, settings.MEDIA_ROOT)) im_url = os.path.join(settings.MEDIA_URL, os.path.relpath(im.url, settings.MEDIA_ROOT))
data = {'res': 'ok', 'pic': im_url, 'full_pic': tmp_url_partial} data = {'res': 'ok', 'pic': im_url, 'full_pic': tmp_url_partial}
data.update(request.REQUEST) data.update(request.REQUEST)
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')
def del_tmp_photo(request, article_pk): def del_tmp_photo(request, article_pk):

@ -44,7 +44,7 @@ def profile_filters_edit_ajax(request):
'field_errors': form.errors, # ошибки полей 'field_errors': form.errors, # ошибки полей
'form_errors': non_field_errors, # ошибки формы 'form_errors': non_field_errors, # ошибки формы
} }
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')
@login_required @login_required
@ -81,4 +81,4 @@ def profile_email_ajax(request):
'field_errors': form.errors, # ошибки полей 'field_errors': form.errors, # ошибки полей
'form_errors': non_field_errors, # ошибки формы 'form_errors': non_field_errors, # ошибки формы
} }
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')

@ -22,6 +22,7 @@ class VeryBaseModel(models.Model):
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
class BaseModel(VeryBaseModel): class BaseModel(VeryBaseModel):
"""Абстрактная модель бух.формы.""" """Абстрактная модель бух.формы."""
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+', verbose_name=u'Пользователь') user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+', verbose_name=u'Пользователь')
@ -41,6 +42,9 @@ class BaseModel(VeryBaseModel):
def __unicode__(self): def __unicode__(self):
return u'%s%s от %s' % (self._meta.verbose_name or '', self.doc_num, self.doc_date) return u'%s%s от %s' % (self._meta.verbose_name or '', self.doc_num, self.doc_date)
def __str__(self):
return u'%s%s от %s' % (self._meta.verbose_name or '', self.doc_num, self.doc_date)
class BaseNdsModel(BaseModel): class BaseNdsModel(BaseModel):
"""Расширение абстрактной модели бух.формы - НДС. """Расширение абстрактной модели бух.формы - НДС.
@ -68,6 +72,7 @@ class BaseInvoiceModel(BaseNdsModel):
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
class BaseItemModel(VeryBaseModel): class BaseItemModel(VeryBaseModel):
"""Абстрактная модель табличной части бух.формы.""" """Абстрактная модель табличной части бух.формы."""
name = models.CharField(u'Наименование', max_length=256) name = models.CharField(u'Наименование', max_length=256)
@ -81,6 +86,9 @@ class BaseItemModel(VeryBaseModel):
def __unicode__(self): def __unicode__(self):
return u'%s, %s %s' % (self.name[:30], self.qty, self.units) return u'%s, %s %s' % (self.name[:30], self.qty, self.units)
def __str__(self):
return u'%s, %s %s' % (self.name[:30], self.qty, self.units)
class BaseItemInvoiceModel(BaseItemModel): class BaseItemInvoiceModel(BaseItemModel):
"""Расширение абстрактной модели табл. части бух.формы - по типу счета. """Расширение абстрактной модели табл. части бух.формы - по типу счета.
@ -96,6 +104,10 @@ class BaseItemInvoiceModel(BaseItemModel):
curr = consts.CURRENCY_CHOICES_DICT.get(getattr(self, 'currency', consts.CURR_RUB)) curr = consts.CURRENCY_CHOICES_DICT.get(getattr(self, 'currency', consts.CURR_RUB))
return u'%s, %s %s * %s = %s %s' % (self.name[:30], self.qty, self.units, self.price, self.total_price, curr) return u'%s, %s %s * %s = %s %s' % (self.name[:30], self.qty, self.units, self.price, self.total_price, curr)
def __str__(self):
curr = consts.CURRENCY_CHOICES_DICT.get(getattr(self, 'currency', consts.CURR_RUB))
return u'%s, %s %s * %s = %s %s' % (self.name[:30], self.qty, self.units, self.price, self.total_price, curr)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
self.total_price = self.price * self.qty # пересчитать сумму self.total_price = self.price * self.qty # пересчитать сумму
super(BaseItemInvoiceModel, self).save(*args, **kwargs) super(BaseItemInvoiceModel, self).save(*args, **kwargs)

@ -14,11 +14,11 @@ from docs.views.faktura import FakturaViews
from docs.views.ajax import get_invoices, get_tbl_items, get_client_by_invoice, toggle_doc_status from docs.views.ajax import get_invoices, get_tbl_items, get_client_by_invoice, toggle_doc_status
@login_required # важно!!! @login_required # важно!!!
def getview(request, *args, **kwargs): def getview(request, *args, **kwargs):
views = kwargs['klass'](request) # класс с вьюхами views = kwargs['klass'](request) # класс с вьюхами
handler = getattr(views, kwargs['oper']) # конкретная вьюха handler = getattr(views, kwargs['oper']) # конкретная вьюха
return handler(request, *args, **kwargs) # передать управление во вьюху и вернуть ее результат return handler(request, *args, **kwargs) # передать управление во вьюху и вернуть ее результат
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------

@ -24,7 +24,7 @@ def get_invoices(request, client_id=None):
invoices = {invoice.id: '%s от %s' % (invoice.doc_num, invoice.doc_date) for invoice in invoices} invoices = {invoice.id: '%s от %s' % (invoice.doc_num, invoice.doc_date) for invoice in invoices}
return HttpResponse(json.dumps(invoices), mimetype='application/json') return HttpResponse(json.dumps(invoices), content_type='application/json')
def get_tbl_items(request, invoice_id): def get_tbl_items(request, invoice_id):
@ -36,7 +36,7 @@ def get_tbl_items(request, invoice_id):
invoice = Invoice.objects.get(company=request.user.profile, pk=invoice_id) invoice = Invoice.objects.get(company=request.user.profile, pk=invoice_id)
data = serializers.serialize('json', invoice.invoice_items.all()) data = serializers.serialize('json', invoice.invoice_items.all())
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')
def get_client_by_invoice(request, invoice_id): def get_client_by_invoice(request, invoice_id):
@ -47,7 +47,7 @@ def get_client_by_invoice(request, invoice_id):
invoice = Invoice.objects.get(company=request.user.profile, pk=invoice_id) invoice = Invoice.objects.get(company=request.user.profile, pk=invoice_id)
return HttpResponse(json.dumps([invoice.client.id, invoice.client.name]), mimetype='application/json') return HttpResponse(json.dumps([invoice.client.id, invoice.client.name]), content_type='application/json')
def toggle_doc_status(request, doc_type, doc_id, doc_attr): def toggle_doc_status(request, doc_type, doc_id, doc_attr):
@ -74,4 +74,4 @@ def toggle_doc_status(request, doc_type, doc_id, doc_attr):
next_text = dict(choices_)[next_val] next_text = dict(choices_)[next_val]
return HttpResponse(json.dumps([next_text, next_val]), mimetype='application/json') return HttpResponse(json.dumps([next_text, next_val]), content_type='application/json')

@ -340,7 +340,7 @@ class BaseViews(object):
'success': success, 'success': success,
'del_id': del_id, 'del_id': del_id,
} }
return HttpResponse(json.dumps(result), mimetype='application/json') return HttpResponse(json.dumps(result), content_type='application/json')
#dictionary = { #dictionary = {
# 'padeji': self.PADEJI, # 'padeji': self.PADEJI,
@ -570,7 +570,7 @@ class BaseViews(object):
if form.is_valid() and result: if form.is_valid() and result:
data['message'] = {'title': 'Инфо', 'msg': 'Письмо отправлено.',} data['message'] = {'title': 'Инфо', 'msg': 'Письмо отправлено.',}
return HttpResponse(json.dumps(data), mimetype='application/json') return HttpResponse(json.dumps(data), content_type='application/json')
def get_ajax(self, *args, **kwargs): def get_ajax(self, *args, **kwargs):
"""Получить документ - AJAX.""" """Получить документ - AJAX."""
@ -578,7 +578,7 @@ class BaseViews(object):
return HttpResponseBadRequest() return HttpResponseBadRequest()
obj = self.get_obj(kwargs['id'], only_form_fields=True) obj = self.get_obj(kwargs['id'], only_form_fields=True)
data = json.dumps(obj, default=dthandler) data = json.dumps(obj, default=dthandler)
return HttpResponse(data, mimetype='application/json') return HttpResponse(data, content_type='application/json')
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------

@ -1,13 +1,14 @@
# coding: utf-8
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
import os import os
from celery import Celery from celery import Celery
# set the default Django settings module for the 'celery' program. # set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'src.settings') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dokumentor.settings.local')
app = Celery('src') app = Celery('dokumentor')
# Using a string here means the worker doesn't have to serialize # Using a string here means the worker don't have to serialize
# the configuration object to child processes. # the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys # - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix. # should have a `CELERY_` prefix.
@ -15,9 +16,3 @@ app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs. # Load task modules from all registered Django app configs.
app.autodiscover_tasks() app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))

@ -0,0 +1,8 @@
# coding: utf-8
from celery import Celery
from django.conf import settings
app = Celery('dokumentor')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

@ -0,0 +1 @@
# -*- coding: utf-8 -*-

@ -4,18 +4,15 @@
import os import os
import sys import sys
from imp import find_module
from datetime import timedelta from datetime import timedelta
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) PROJECT_DIR = os.path.normpath(os.path.join(os.path.dirname(__file__), '..'))
ROOT_DIR = os.path.dirname( MANAGE_DIR = os.path.normpath(os.path.join(PROJECT_DIR, '..'))
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) ROOT_DIR = os.path.normpath(os.path.join(MANAGE_DIR, '..'))
path = lambda *xs: os.path.abspath(os.path.join(os.path.dirname(__file__), *xs)) sys.path.append(PROJECT_DIR)
sys.path.append(MANAGE_DIR)
sys.path.insert(1, path('..')) sys.path.append(ROOT_DIR)
sys.path.insert(1, path('.'))
sys.path.insert(1, path('src'))
DEBUG = False DEBUG = False
@ -59,25 +56,23 @@ USE_TZ = True
# Absolute filesystem path to the directory that will hold user-uploaded files. # Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/var/www/example.com/media/" # Example: "/var/www/example.com/media/"
MEDIA_ROOT = path('../media') MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
# URL that handles the media served from MEDIA_ROOT. Make sure to use a # URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash. # trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/" # Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = '/m/' MEDIA_URL = '/media/'
STATIC_ROOT = path('../static') STATIC_ROOT = os.path.join(ROOT_DIR, 'static')
# URL prefix for static files. # URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/" # Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/s/' STATIC_URL = '/static/'
# Additional locations of static files # Additional locations of static files
STATICFILES_DIRS = ( STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static". os.path.join(PROJECT_DIR, 'static'),
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
path('static'),
) )
@ -90,48 +85,27 @@ TEMPLATE_LOADERS = (
'django.template.loaders.app_directories.Loader', 'django.template.loaders.app_directories.Loader',
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = [
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', 'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
# Uncomment the next line for simple clickjacking protection:
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 'django.middleware.doc.XViewMiddleware',
'cms.middleware.page.CurrentPageMiddleware', 'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.user.CurrentUserMiddleware', 'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware', 'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware', 'cms.middleware.language.LanguageCookieMiddleware',
'djangocms_ckeditor_filer.middleware.ThumbnailMiddleware', 'djangocms_ckeditor_filer.middleware.ThumbnailMiddleware',
# my
'src.customer.middleware.ProfileMiddleware', 'src.customer.middleware.ProfileMiddleware',
) ]
# CHECK
# MIDDLEWARE_CLASSES = (
# 'cms.middleware.utils.ApphookReloadMiddleware',
# 'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
# 'django.contrib.messages.middleware.MessageMiddleware',
# 'django.middleware.locale.LocaleMiddleware',
# 'django.middleware.common.CommonMiddleware',
# 'cms.middleware.user.CurrentUserMiddleware',
# 'cms.middleware.page.CurrentPageMiddleware',
# 'cms.middleware.toolbar.ToolbarMiddleware',
# 'cms.middleware.language.LanguageCookieMiddleware',
# )
TEMPLATES = [ TEMPLATES = [
{ {
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [ 'DIRS': [
# os.path.join(BASE_DIR, 'templates'), os.path.join(PROJECT_DIR, 'templates'),
path('templates'),
], ],
'APP_DIRS': True, 'APP_DIRS': True,
@ -154,20 +128,16 @@ TEMPLATES = [
] ]
TEMPLATE_DIRS = ( TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". os.path.join(PROJECT_DIR, 'templates'),
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
path('templates'),
) )
ROOT_URLCONF = 'dokumentor.urls'
ROOT_URLCONF = 'src.urls'
# Python dotted path to the WSGI application used by Django's runserver. # Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'src.wsgi.application' WSGI_APPLICATION = 'wsgi.application'
INSTALLED_APPS = ( INSTALLED_APPS = [
'myauth', 'myauth',
'djangocms_admin_style', 'djangocms_admin_style',
@ -203,7 +173,7 @@ INSTALLED_APPS = (
'callback', 'callback',
# 'project.index_blocks', # 'project.index_blocks',
) ]
AUTH_USER_MODEL = 'myauth.DokUser' AUTH_USER_MODEL = 'myauth.DokUser'
# A sample logging configuration. The only tangible logging # A sample logging configuration. The only tangible logging
@ -228,7 +198,7 @@ LOGGING = {
'yandex_money': { 'yandex_money': {
'level': 'DEBUG', 'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', 'class': 'logging.handlers.RotatingFileHandler',
'filename': path('../log/yandex_money.log'), 'filename': os.path.join(ROOT_DIR, 'var/log/yandex_money.log'),
'maxBytes': 1024 * 1024 * 5, 'maxBytes': 1024 * 1024 * 5,
'backupCount': 5, 'backupCount': 5,
}, },
@ -256,14 +226,14 @@ LOGIN_URL = '/user/login/'
SUPPORT_EMAIL = 'help@dokumentor.ru' SUPPORT_EMAIL = 'help@dokumentor.ru'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
PDF_FONTS_ROOT = path('pdf_fonts') PDF_FONTS_ROOT = os.path.join(MANAGE_DIR, 'pdf_fonts')
XLS_ROOT = path('xls_templates') XLS_ROOT = os.path.join(MANAGE_DIR, 'xls_templates')
LANGUAGES = ( LANGUAGES = (
('ru', 'Russian'), ('ru', 'Russian'),
#('en', gettext('English')),
) )
CMS_TEMPLATES = ( CMS_TEMPLATES = (
('pages/index.html', 'Index Page'), ('pages/index.html', 'Index Page'),
('pages/inner_page.html', u'Внутренняя страница'), ('pages/inner_page.html', u'Внутренняя страница'),
@ -289,6 +259,8 @@ BROKER_USER = "dokumentor"
BROKER_PASSWORD = "dokumentor" BROKER_PASSWORD = "dokumentor"
BROKER_VHOST = "dokumentor" BROKER_VHOST = "dokumentor"
# CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_TIMEZONE = 'Europe/Moscow' CELERY_TIMEZONE = 'Europe/Moscow'
@ -305,7 +277,8 @@ CELERYBEAT_SCHEDULE = {
}, },
} }
CAPTCHA_OUTPUT_FORMAT = u"%(hidden_field)s %(image)s<a href='#' class='captcha_refresh'><img src='" + STATIC_URL + "img/refresh.png' /></a>%(text_field)s" CAPTCHA_OUTPUT_FORMAT = u"%(hidden_field)s %(image)s<a href='#' class='captcha_refresh'><img src='" + \
STATIC_URL + "img/refresh.png' /></a>%(text_field)s"
CAPTCHA_FONT_SIZE = 36 CAPTCHA_FONT_SIZE = 36
CKEDITOR_SETTINGS = { CKEDITOR_SETTINGS = {
@ -351,7 +324,7 @@ YANDEX_MONEY_PAYMENT_URL = 'https://money.yandex.ru/eshop.xml'
YANDEX_MONEY_MAIL_ADMINS_ON_PAYMENT_ERROR = True YANDEX_MONEY_MAIL_ADMINS_ON_PAYMENT_ERROR = True
try: try:
from src.local_settings import * from dokumentor.settings.local import *
except ImportError: except ImportError:
pass pass

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
from dokumentor.settings.base import *
DEBUG = True
ADMINS = ()
MANAGERS = ADMINS
SERVER_EMAIL = 'dokumentor@localhost'
ALLOWED_HOSTS = ['*']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(ROOT_DIR, 'db.sqlite3'),
}
}
EMAIL_BACKEND = 'eml_email_backend.EmailBackend'
EMAIL_FILE_PATH = os.path.join(ROOT_DIR, 'tmp_emails')
# debug toolbar
DEBUG_TOOLBAR_PATCH_SETTINGS = False
if DEBUG:
INSTALLED_APPS.append('debug_toolbar')
MIDDLEWARE_CLASSES.append('debug_toolbar.middleware.DebugToolbarMiddleware')

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 340 KiB

After

Width:  |  Height:  |  Size: 340 KiB

Before

Width:  |  Height:  |  Size: 596 KiB

After

Width:  |  Height:  |  Size: 596 KiB

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before

Width:  |  Height:  |  Size: 150 B

After

Width:  |  Height:  |  Size: 150 B

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before

Width:  |  Height:  |  Size: 570 B

After

Width:  |  Height:  |  Size: 570 B

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before

Width:  |  Height:  |  Size: 479 KiB

After

Width:  |  Height:  |  Size: 479 KiB

Before

Width:  |  Height:  |  Size: 148 B

After

Width:  |  Height:  |  Size: 148 B

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before

Width:  |  Height:  |  Size: 416 B

After

Width:  |  Height:  |  Size: 416 B

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Before

Width:  |  Height:  |  Size: 374 B

After

Width:  |  Height:  |  Size: 374 B

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Before

Width:  |  Height:  |  Size: 145 B

After

Width:  |  Height:  |  Size: 145 B

Before

Width:  |  Height:  |  Size: 413 B

After

Width:  |  Height:  |  Size: 413 B

Before

Width:  |  Height:  |  Size: 730 B

After

Width:  |  Height:  |  Size: 730 B

Before

Width:  |  Height:  |  Size: 420 B

After

Width:  |  Height:  |  Size: 420 B

Before

Width:  |  Height:  |  Size: 523 B

After

Width:  |  Height:  |  Size: 523 B

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Before

Width:  |  Height:  |  Size: 397 B

After

Width:  |  Height:  |  Size: 397 B

Before

Width:  |  Height:  |  Size: 772 B

After

Width:  |  Height:  |  Size: 772 B

Before

Width:  |  Height:  |  Size: 395 B

After

Width:  |  Height:  |  Size: 395 B

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save