Merge branch 'master' into develop

remotes/origin/HEAD
Slava Kyrachevsky 9 years ago
commit ffc6c1f002
  1. 1
      .gitignore
  2. 1
      Makefile
  3. 49
      README.md
  4. BIN
      docs/documentation.docx
  5. 2
      emencia/django/newsletter/mailer.py
  6. 380
      fabfile.py
  7. BIN
      jpegsrc.v8c.tar.gz
  8. 7
      package.json
  9. 16
      proj/production.py
  10. 86
      proj/settings.py
  11. 1
      requirements.txt
  12. 0
      schema.xml
  13. 5
      static/client/css/main.css
  14. 2
      static/client/css_min/main.min.css
  15. 1
      support/4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html
  16. 2
      support/apache.conf
  17. 629
      support/d_dev/settings.py
  18. 1
      support/dev/.htpasswd
  19. 201
      support/dev/schema.xml
  20. 89
      support/dev/tech_work_hit.expomap.ru
  21. 25
      support/dev_work.html
  22. 21
      support/nginx.conf
  23. 84
      support/prod/hit.expomap.ru
  24. 31
      support/prod/proj.com
  25. 201
      support/prod/schema.xml
  26. 627
      support/prod/settings.py
  27. 97
      support/prod/tech_work_hit.expomap.ru
  28. 2
      templates/client/includes/header.html
  29. 6
      templates/client/includes/reverseorder_warning.html
  30. 2
      templates/client/simple_pages/participation_landing.html

1
.gitignore vendored

@ -13,7 +13,6 @@ Thumbs.db
/proj/local.py /proj/local.py
.DS_Store .DS_Store
locale locale
proj/settings.py
collected_static collected_static
# gulp # gulp

@ -20,7 +20,6 @@ syncdb:
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py migrate @PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py migrate
run: run:
-/opt/solr/bin/solr start -p 8983
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py runserver @PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py runserver
run-public: run-public:

@ -12,33 +12,58 @@ pip install south -U
### proj/local.py EXAMPLE ### proj/local.py EXAMPLE
```python ```python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from proj.settings import * from settings import *
DEBUG = True
DEFAULT_HTTP_SCHEME = 'http'
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.mysql', 'ENGINE': 'django.db.backends.mysql',
'NAME': 'expomap', 'NAME': 'expomap',
'USER': 'root', 'USER': 'root',
'PASSWORD': '***', 'PASSWORD': '1',
'HOST': '', 'HOST': '',
'PORT': '', 'PORT': '',
} }
} }
CACHES = { TEMPLATE_LOADERS = (
"default": { 'django.template.loaders.filesystem.Loader',
"BACKEND": "redis_cache.cache.RedisCache", 'django.template.loaders.app_directories.Loader',
"LOCATION": "/var/run/redis/redis.sock", )
"OPTIONS": {
"CLIENT_CLASS": "redis_cache.client.DefaultClient",
},
}
}
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
INSTALLED_APPS += ('south',) INSTALLED_APPS += ('south',)
# debug_toolbar settings
DEBUG_TOOLBAR_PATCH_SETTINGS = False
INTERNAL_IPS = ('127.0.0.1',)
MIDDLEWARE_CLASSES += (
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
INSTALLED_APPS += (
'debug_toolbar',
)
JQUERY_URL = os.path.join(SITE_ROOT, 'static/client/js/jquery-ui-1.10.4.custom.min.js'),
DEBUG_TOOLBAR_PANELS = [
#'debug_toolbar.panels.versions.VersionsPanel',
'debug_toolbar.panels.timer.TimerPanel',
'debug_toolbar.panels.settings.SettingsPanel',
'debug_toolbar.panels.headers.HeadersPanel',
'debug_toolbar.panels.request.RequestPanel',
'debug_toolbar.panels.sql.SQLPanel',
'debug_toolbar.panels.staticfiles.StaticFilesPanel',
'debug_toolbar.panels.templates.TemplatesPanel',
'debug_toolbar.panels.cache.CachePanel',
'debug_toolbar.panels.signals.SignalsPanel',
'debug_toolbar.panels.logging.LoggingPanel',
'debug_toolbar.panels.redirects.RedirectsPanel',
]
``` ```
# #
@ -77,3 +102,5 @@ bin/solr start -p 8983
python manage.py migrate expobanner 0001 --fake python manage.py migrate expobanner 0001 --fake
python manage.py migrate expobanner python manage.py migrate expobanner
``` ```
Каталог support хранит конфиги для продакшн сервера

Binary file not shown.

@ -577,7 +577,7 @@ class NewsLetterSender(object):
def test(): def test():
from django.utils.translation import activate from django.utils.translation import activate
activate('ru') activate('ru')
n = Newsletter.objects.get(pk=119) n = Newsletter.objects.get(pk=214)
m = Mailer(n, test=True) m = Mailer(n, test=True)
m.smtp_connect() m.smtp_connect()
m.attachments = m.build_daily_attachments() m.attachments = m.build_daily_attachments()

380
fabfile.py vendored

@ -1,380 +0,0 @@
# -*- coding: utf-8 -*-
from os.path import join, basename
from collections import namedtuple, OrderedDict
import re
from fabric.api import *
env.roledefs = {
'dev': ['root@176.121.11.165'],
'prod': ['root@176.121.11.162'],
}
env.passwords = {
'root@176.121.11.165:22': 'ue6R287QZfMc',
'root@176.121.11.162:22': 'XcS2jx5e8k6n',
}
REMOTE_HOME_DIR = '/home/www/expomap/'
LOCAL_HOME_DIR = '/home/as/PycharmProjects/expomap/'
nginx_conf_tech = '/etc/nginx/sites-available/tech_work_hit.expomap.ru'
nginx_conf = '/etc/nginx/sites-available/hit.expomap.ru'
apache2_conf = '/etc/apache2/sites-available/proj.com'
settings_conf = join(REMOTE_HOME_DIR, 'proj/settings.py')
services = ['nginx', 'apache2']
stages = {}
tickets = {}
commands = {}
def stage(stage_num):
def add_func(func):
if not callable(func):
raise NotImplementedError('func must be a callable')
func = ticket(func)
stages.setdefault(stage_num, OrderedDict()).update({func.__name__: func})
return func
return add_func
def ticket(func):
if not callable(func):
raise NotImplementedError('func must be a callable')
# stages.setdefault(stage_num, OrderedDict()).update({func.__name__: func})
tickets.update({func.__name__: func})
return func
# command_pattern
# cp = re.compile('^python manage.py (?P<command>\w+)$')
cp = re.compile('^(?P<command>\w+)$')
def register_command(command_string):
command = cp.match(command_string).group('command')
if not command:
raise ValueError('Invalid command string {command_string}'.format(command_string=command_string))
def func():
with cd(REMOTE_HOME_DIR):
run('python manage.py ' + command)
commands.update({command: func})
# run command
def rc(command):
if command in commands and callable(commands[command]):
commands[command]()
else:
raise ValueError('Command {command} is not callable'.format(command=command))
def set_host(host):
env.hosts = env.roledefs.get(host)
env.role = host
def dev():
set_host('dev')
def prod():
set_host('prod')
def get_configs():
localdir = join(LOCAL_HOME_DIR, 'support/', env.role)
get(nginx_conf, localdir)
get(apache2_conf, localdir)
get(join(REMOTE_HOME_DIR, 'schema.xml'), localdir)
get(settings_conf, localdir)
def put_configs():
localdir = join(LOCAL_HOME_DIR, 'support/', env.role)
# nginx
# put(join(localdir, basename(nginx_conf)),
# nginx_conf)
# # apache2
# put(join(localdir, basename(apache2_conf)),
# apache2_conf)
# settings
put(join(localdir, basename(settings_conf)),
settings_conf)
def newsletters_media():
with cd(join(REMOTE_HOME_DIR, 'media')):
run('mkdir -p newsletter')
put(
join(LOCAL_HOME_DIR, 'media/newsletter'),
join(REMOTE_HOME_DIR, 'media')
)
def call_state(state, only=None):
if only is not None and only in services:
run('service {only} {state}'.format(only=only, state=state))
return
for service in services:
run('service {service} {state}'.format(service=service, state=state))
def chown():
with cd(REMOTE_HOME_DIR):
run('chown -Rv www-data:www-data .')
def pull(with_configs=False, func=None):
with cd(REMOTE_HOME_DIR):
call_state('stop', only='apache2')
run('git pull')
if with_configs:
put_configs()
if func is not None and func in tickets and callable(tickets[func]):
tickets[func]()
run('python manage.py migrate')
call_state('start', only='apache2')
def stage_init(stage_num):
with cd(REMOTE_HOME_DIR):
call_state('stop', only='apache2')
run('git fetch')
run('git checkout stage{stage_num}'.format(stage_num=stage_num))
run('git pull')
# stage_num = int(stage_num)
# if stage_num in stages and isinstance(stages[stage_num], dict):
# for func_name, func in stages[stage_num].iteritems():
# func()
# call_state('start', only='apache2')
def migrate(app_name):
with cd(REMOTE_HOME_DIR):
run('python manage.py migrate {app_name}'.format(app_name=app_name))
def devmode(state=True):
localdir = join(LOCAL_HOME_DIR, 'support/', env.role)
# nginx
conf = nginx_conf_tech if state == True else nginx_conf
put(join(localdir, basename(conf)), nginx_conf)
run('/etc/init.d/nginx reload')
@stage(5)
def t1451():
with cd(REMOTE_HOME_DIR):
run('python manage.py migrate expobanner')
# temporary
register_command('banner_log_update_old')
register_command('banner_log_update')
#
@stage(5)
def t1458():
with cd(REMOTE_HOME_DIR):
run('python manage.py migrate service 0001 --fake')
run('python manage.py migrate service')
run('python manage.py set_events_services')
register_command('set_events_services')
@stage(5)
def t1456():
with cd(REMOTE_HOME_DIR):
run('python manage.py migrate expobanner')
@stage(5)
def t1463():
with cd(REMOTE_HOME_DIR):
run('python manage.py migrate newsletter')
run('pip install pymorphy2[fast]')
run('pip install -U pymorphy2-dicts-ru')
@stage(5)
def t1460():
with cd(REMOTE_HOME_DIR):
run('python manage.py migrate newsletter')
@ticket
def update_crontab():
with cd(REMOTE_HOME_DIR):
run('python manage.py crontab remove')
run('python manage.py crontab add')
@stage(5)
def t1461():
with cd(REMOTE_HOME_DIR):
run('pip install chainmap==1.0.2')
run('pip install suds==0.4')
run('python manage.py migrate conference')
run('python manage.py migrate exposition')
run('python manage.py update_events_filter_fields')
@ticket
def switch_to_stage4():
with cd(REMOTE_HOME_DIR):
call_state('stop', only='apache2')
run('git fetch')
run('git checkout stage4')
run('git pull')
call_state('start', only='apache2')
@ticket
def switch_to_stage5():
with cd(REMOTE_HOME_DIR):
call_state('stop', only='apache2')
run('git fetch')
run('git checkout staget5')
run('git pull')
call_state('start', only='apache2')
@ticket
def t1580():
with cd(REMOTE_HOME_DIR):
run('python manage.py migrate')
run('python manage.py users_to_mailinglist')
@ticket
def mailing():
with cd(REMOTE_HOME_DIR):
run('python manage.py migrate newsletter 0010')
run('python manage.py migrate newsletter 0011 --fake')
run('python manage.py migrate newsletter')
run('python manage.py migrate newsletter 0010 --fake')
run('python manage.py migrate newsletter 0011')
run('python manage.py migrate newsletter --fake')
run('python manage.py migrate')
run('python manage.py newsletter_create_dailymail')
@ticket
def mailing2():
with cd(REMOTE_HOME_DIR):
run('python manage.py migrate newsletter 0010 --fake')
run('python manage.py migrate newsletter 0011')
run('python manage.py migrate newsletter --fake')
@ticket
def t1609():
with cd(REMOTE_HOME_DIR):
files = ['media/cache/3b/8e/3b8ee5e07a982562d873a69550dd47c9.jpg']
for file in files:
put(
join(LOCAL_HOME_DIR, file),
join(REMOTE_HOME_DIR, file)
)
# def stage3_pre_final():
# with cd(REMOTE_HOME_DIR):
# run('pip install pandas')
# run('pip install django-rosetta==0.7.6')
# run('git checkout master')
# run('git pull')
# call_state('stop')
# put_configs()
# run('python manage.py migrate conference 0001 --fake')
# run('python manage.py migrate conference')
# run('python manage.py migrate expobanner')
# run('python manage.py migrate theme 0001 --fake')
# run('python manage.py migrate theme 0002')
# run('python manage.py migrate article 0001 --fake')
# run('python manage.py migrate article 0002')
# run('python manage.py migrate stats_collector')
# run('python manage.py crontab remove')
# run('python manage.py crontab add')
# chown()
# call_state('start')
# def stage3_release():
# call_state('stop')
# with cd(REMOTE_HOME_DIR):
# # run('python manage.py themeblog_to_blog')
# run('git fetch')
# run('git checkout stage3_release')
# run('git pull')
# # run('python manage.py migrate settings 0002 --fake')
# run('python manage.py migrate settings')
# run('python manage.py migrate article 0003')
# chown()
# call_state('start')
# def c_fix():
# with cd(REMOTE_HOME_DIR):
# call_state('stop', only='apache2')
# run('git pull')
# run('python manage.py migrate expobanner')
# call_state('start', only='apache2')
# def stage4_firstrun():
# with cd(REMOTE_HOME_DIR):
# call_state('stop')
# run('git fetch')
# run('git checkout stage4')
# # run('git checkout -- proj/settings.py')
# pull(with_configs=True)
# run('python manage.py syncdb')
# ticket1374()
# ticket1393()
# ticket1392()
# ticket1384()
# ticket1395()
# ticket1384_p1()
# ticket1384_p2()
# t1443()
# call_state('start')
# @ticket
# def ticket1395():
# with cd(REMOTE_HOME_DIR):
# run('python manage.py accounts_check_url')
# @ticket
# def ticket1374():
# with cd(REMOTE_HOME_DIR):
# run('python manage.py migrate theme')
# @ticket
# def ticket1393():
# with cd(REMOTE_HOME_DIR):
# run('python manage.py migrate newsletter 0001 --fake')
# run('python manage.py migrate newsletter')
# @ticket
# def ticket1392():
# with cd(REMOTE_HOME_DIR):
# run('python manage.py migrate newsletter')
# @ticket
# def ticket1384():
# with cd(REMOTE_HOME_DIR):
# run('python manage.py migrate exposition 0001 --fake')
# run('python manage.py migrate exposition')
# run('python manage.py migrate conference')
# @ticket
# def ticket1384_p1():
# with cd(REMOTE_HOME_DIR):
# run('python manage.py check_url')
# @ticket
# def ticket1384_p2():
# with cd(REMOTE_HOME_DIR):
# run('python manage.py check_translation')
# @ticket
# def t1443():
# with cd(REMOTE_HOME_DIR):
# run('chown -Rv www-data:www-data locale')

Binary file not shown.

@ -30,10 +30,5 @@
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"directories": { "directories": {
"doc": "docs" "doc": "docs"
}, }
"repository": {
"type": "git",
"url": "git+ssh://git@bitbucket.org/Bonus_05/expomap.git"
},
"homepage": "https://bitbucket.org/Bonus_05/expomap#readme"
} }

@ -1,16 +0,0 @@
# -*- coding: utf-8 -*-
# Django local settings
DEBUG = False
ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145', 'expomap.ru']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test2',
'USER': 'kotzilla',
'PASSWORD': 'qazedc',
'HOST': '',
'PORT': '',
}
}

@ -32,18 +32,20 @@ DATABASES = {
CACHES = { CACHES = {
"default": { "default": {
"BACKEND": "redis_cache.cache.RedisCache", "BACKEND": "redis_cache.RedisCache",
"LOCATION": "/tmp/redis.sock", "LOCATION": "localhost:6379",
"OPTIONS": { 'OPTIONS': {
"CLIENT_CLASS": "redis_cache.client.DefaultClient", 'CLIENT_CLASS': 'redis_cache.client.DefaultClient',
}, }
} }
} }
# save sessions in redis
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# Hosts/domain names that are valid for this site; required if DEBUG is False # Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts # See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145', 'expomap.ru', '195.66.79.148'] ALLOWED_HOSTS = ['expomap.ru']
DEFAULT_HTTP_SCHEME = 'https' DEFAULT_HTTP_SCHEME = 'https'
# Local time zone for this installation. Choices can be found here: # Local time zone for this installation. Choices can be found here:
@ -113,8 +115,11 @@ CKEDITOR_CONFIGS = {
MEDIA_URL = '/media/' MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
STATIC_URL = '/static/' STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(SITE_ROOT, 'collected_static')
STATICFILES_DIRS = (
(os.path.join(SITE_ROOT, 'static')),
)
STATICFILES_FINDERS = ( STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.FileSystemFinder',
@ -170,7 +175,6 @@ TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows. # Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths. # Don't forget to use absolute paths, not relative paths.
# os.path.join(SITE_ROOT, 'templates/debug_toolbar'),
os.path.join(SITE_ROOT, 'templates/c_admin'), os.path.join(SITE_ROOT, 'templates/c_admin'),
os.path.join(SITE_ROOT, 'templates/c_admin/accounts'), os.path.join(SITE_ROOT, 'templates/c_admin/accounts'),
os.path.join(SITE_ROOT, 'templates/c_admin/article'), os.path.join(SITE_ROOT, 'templates/c_admin/article'),
@ -200,7 +204,16 @@ TEMPLATE_DIRS = (
os.path.join(SITE_ROOT, 'templates/client/photoreport'), os.path.join(SITE_ROOT, 'templates/client/photoreport'),
os.path.join(SITE_ROOT, 'templates/client/includes'), os.path.join(SITE_ROOT, 'templates/client/includes'),
os.path.join(SITE_ROOT, 'templates'), os.path.join(SITE_ROOT, 'templates'),
#os.path.join(SITE_ROOT, 'templates/client/popups'), )
TEMPLATE_LOADERS = (
(
'django.template.loaders.cached.Loader',
(
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
),
) )
AUTH_USER_MODEL = 'accounts.User' AUTH_USER_MODEL = 'accounts.User'
@ -402,15 +415,15 @@ CRONJOBS = [
('*/5 * * * *', 'django.core.management.call_command', ['update_views_cache']), ('*/5 * * * *', 'django.core.management.call_command', ['update_views_cache']),
('40 6 * * * ', 'django.core.management.call_command', ['newsletter_contacts_remove_notactivated']), ('40 6 * * * ', 'django.core.management.call_command', ['newsletter_contacts_remove_notactivated']),
# временно закомментировал по просьбе клиента
# ('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']), # ('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']),
('12 4 * * *', 'django.core.management.call_command', ['stats_daily']), ('12 4 * * *', 'django.core.management.call_command', ['stats_daily']),
('5 10 * * *', 'django.core.management.call_command', ['update_events_filter_fields']), ('5 10 * * *', 'django.core.management.call_command', ['update_events_filter_fields']),
] ]
PYMORPHY_DICTS = { PYMORPHY_DICTS = {
'ru': { 'dir': os.path.join(SITE_ROOT, 'settings/russian_dicts')} #'/home/www/proj/settings/russian_dicts' }, 'ru': { 'dir': os.path.join(SITE_ROOT, 'settings/russian_dicts')}
} }
# search backend # search backend
@ -418,8 +431,6 @@ HAYSTACK_CONNECTIONS = {
'default': { 'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine', 'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://localhost:8983/solr' 'URL': 'http://localhost:8983/solr'
# ...or for multicore...
# 'URL': 'http://127.0.0.1:8983/solr/mysite',
}, },
} }
@ -547,56 +558,11 @@ try:
from local import * from local import *
except ImportError, e: except ImportError, e:
pass pass
# save sessions in redis
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
if not DEBUG:
# cache template loading
TEMPLATE_LOADERS = (
('django.template.loaders.cached.Loader', (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)),
)
else:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
# debug_toolbar settings
if DEBUG:
DEBUG_TOOLBAR_PATCH_SETTINGS = False
INTERNAL_IPS = ('127.0.0.1','176.121.5.82', '176.121.11.162', '77.123.47.46')
MIDDLEWARE_CLASSES += (
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
INSTALLED_APPS += (
'debug_toolbar',
)
JQUERY_URL = os.path.join(SITE_ROOT, 'static/client/js/jquery-ui-1.10.4.custom.min.js'),
DEBUG_TOOLBAR_PANELS = [
#'debug_toolbar.panels.versions.VersionsPanel',
'debug_toolbar.panels.timer.TimerPanel',
'debug_toolbar.panels.settings.SettingsPanel',
'debug_toolbar.panels.headers.HeadersPanel',
'debug_toolbar.panels.request.RequestPanel',
'debug_toolbar.panels.sql.SQLPanel',
'debug_toolbar.panels.staticfiles.StaticFilesPanel',
'debug_toolbar.panels.templates.TemplatesPanel',
'debug_toolbar.panels.cache.CachePanel',
'debug_toolbar.panels.signals.SignalsPanel',
'debug_toolbar.panels.logging.LoggingPanel',
'debug_toolbar.panels.redirects.RedirectsPanel',
]
# logging # logging
U_LOGFILE_SIZE = 1 * 1024 * 1024 U_LOGFILE_SIZE = 1 * 1024 * 1024
U_LOGFILE_COUNT = 2 U_LOGFILE_COUNT = 2
DEFAULT_LOGGER_NAME = 'mail' DEFAULT_LOGGER_NAME = 'django'
LOGGING = { LOGGING = {
'version': 1, 'version': 1,
'disable_existing_loggers': False, 'disable_existing_loggers': False,
@ -619,7 +585,7 @@ LOGGING = {
}, },
}, },
'loggers': { 'loggers': {
'mail': { 'django': {
'handlers': ['file'], 'handlers': ['file'],
'propagate': True, 'propagate': True,
'level': 'DEBUG', 'level': 'DEBUG',

@ -57,5 +57,4 @@ scipy
numpy numpy
nltk nltk
pandas pandas
django-modeltranslation
suds suds

@ -10007,7 +10007,8 @@ hr+.rq-note {
} }
.acticle_list h3 a { .acticle_list h3 a {
color: #464646; color: #464646;
text-decoration: none text-decoration: none;
line-height: 1.1;
} }
.acticle_list h3 a:hover { .acticle_list h3 a:hover {
color: #f60 color: #f60
@ -11647,7 +11648,7 @@ button.gray:hover {
right: 0; right: 0;
top: 0; top: 0;
left: 0; left: 0;
z-index: 10; z-index: 110;
background: url(../lib/fancybox/fancybox_overlay.png); background: url(../lib/fancybox/fancybox_overlay.png);
display: none; display: none;
overflow-y: auto overflow-y: auto

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
postoffice-4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a

@ -1,5 +1,5 @@
<VirtualHost 127.0.0.1:8080> <VirtualHost 127.0.0.1:8080>
WSGIDaemonProcess www-data display-name=%{GROUP} processes=8 threads=2 WSGIDaemonProcess www-data display-name=%{GROUP} processes=2 threads=2
WSGIProcessGroup www-data WSGIProcessGroup www-data
WSGIScriptAlias / "/home/www/proj/project.wsgi" WSGIScriptAlias / "/home/www/proj/project.wsgi"
ServerName 176.121.11.165 ServerName 176.121.11.165

@ -1,629 +0,0 @@
# -*- coding: utf-8 -*-
# Django settings for proj project.
import os
import django
from django.utils.translation import ugettext_lazy as _
from ConfigParser import ConfigParser
DJANGO_ROOT = os.path.dirname(os.path.realpath(django.__file__))
SITE_ROOT = os.path.split(os.path.dirname(os.path.realpath(__file__)))[0]
DEBUG = True
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'expomap',
'USER': 'kotzilla',
'PASSWORD': 'qazedc',
'HOST': '',
'PORT': '',
}
}
CACHES = {
"default": {
"BACKEND": "redis_cache.cache.RedisCache",
"LOCATION": "/tmp/redis.sock",
"OPTIONS": {
"CLIENT_CLASS": "redis_cache.client.DefaultClient",
},
}
}
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145', 'expomap.ru', '195.66.79.148']
DEFAULT_HTTP_SCHEME = 'http'
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'UTC'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'ru'
DEFAULT_LANGUAGE = 'ru'
LANGUAGES = (
('ru', _('Russian')),
('en', _('English')),
)
LOCALE_PATHS = (
os.path.join(SITE_ROOT, 'locale'),
)
DEFAULT_CHARSET = 'utf-8'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = False
# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = False
MEDIA_ROOT = os.path.join(SITE_ROOT, 'media/')
CKEDITOR_UPLOAD_PATH = os.path.join(SITE_ROOT, 'media/upload')
CKEDITOR_CONFIGS = {
'default': {
'toolbar': 'standart',
'height': 200,
'width': 565,
'resize_enabled' : True,
'autoGrow_onStartup' : False,
'autoGrow_bottomSpace' : 300,
'fillEmptyBlocks' : False,
'autoParagraph' : False,
},
'newsletters': {
'toolbar': 'standart',
'height': 600,
'width': 750,
'resize_enabled' : True,
'autoGrow_onStartup' : False,
'autoGrow_bottomSpace' : 300,
'fillEmptyBlocks' : False,
'autoParagraph' : False,
},
}
MEDIA_URL = '/media/'
# STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(SITE_ROOT, 'static'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
# Make this unique, and don't share it with anybody.
SECRET_KEY = '=yz1@ko%1s8bmel)c84#s*xpxn%4(1e+smdnh*@rdm*5%v!mln'
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
'django_messages.context_processors.inbox',
"proj.views.expo_context"
)
#LOGIN_REDIRECT_URL = '/'
MIDDLEWARE_CLASSES = (
# 'django.middleware.cache.UpdateCacheMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'solid_i18n.middleware.SolidLocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'social.apps.django_app.middleware.SocialAuthExceptionMiddleware',
# 'django.middleware.cache.FetchFromCacheMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'proj.middleware.Referer',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
'proj.middleware.ExpoRedirectFallbackMiddleware',
'proj.middleware.SpacelessMiddleware',
)
ROOT_URLCONF = 'proj.urls'
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'proj.wsgi.application'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
# os.path.join(SITE_ROOT, 'templates/debug_toolbar'),
os.path.join(SITE_ROOT, 'templates/c_admin'),
os.path.join(SITE_ROOT, 'templates/c_admin/accounts'),
os.path.join(SITE_ROOT, 'templates/c_admin/article'),
os.path.join(SITE_ROOT, 'templates/c_admin/country'),
os.path.join(SITE_ROOT, 'templates/c_admin/city'),
os.path.join(SITE_ROOT, 'templates/c_admin/company'),
os.path.join(SITE_ROOT, 'templates/c_admin/conference'),
os.path.join(SITE_ROOT, 'templates/c_admin/directories'),
os.path.join(SITE_ROOT, 'templates/c_admin/exposition'),
os.path.join(SITE_ROOT, 'templates/c_admin/forms'),
os.path.join(SITE_ROOT, 'templates/c_admin/import templates'),
os.path.join(SITE_ROOT, 'templates/c_admin/news'),
os.path.join(SITE_ROOT, 'templates/c_admin/organiser'),
os.path.join(SITE_ROOT, 'templates/c_admin/place_conference'),
os.path.join(SITE_ROOT, 'templates/c_admin/place_exposition'),
os.path.join(SITE_ROOT, 'templates/c_admin/page'),
os.path.join(SITE_ROOT, 'templates/c_admin/photoreport'),
os.path.join(SITE_ROOT, 'templates/c_admin/settings'),
os.path.join(SITE_ROOT, 'templates/c_admin/seminar'),
os.path.join(SITE_ROOT, 'templates/c_admin/service'),
os.path.join(SITE_ROOT, 'templates/c_admin/theme'),
os.path.join(SITE_ROOT, 'templates/c_admin/translator'),
os.path.join(SITE_ROOT, 'templates/c_admin/webinar'),
os.path.join(SITE_ROOT, 'templates/client'),
os.path.join(SITE_ROOT, 'templates/client/exposition'),
os.path.join(SITE_ROOT, 'templates/client/photoreport'),
os.path.join(SITE_ROOT, 'templates/client/includes'),
os.path.join(SITE_ROOT, 'templates'),
#os.path.join(SITE_ROOT, 'templates/client/popups'),
)
AUTH_USER_MODEL = 'accounts.User'
LOGIN_URL='/'
#registration info
ACCOUNT_ACTIVATION_DAYS=2
# mail settings
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = True
EMAIL_PORT = 25
DEFAULT_FROM_EMAIL = "expomap.ru"
AUTHENTICATION_BACKENDS = (
'social.backends.open_id.OpenIdAuth',
'social.backends.vk.VKOAuth2',
'social.backends.facebook.FacebookOAuth2',
'social.backends.twitter.TwitterOAuth',
'social.backends.google.GoogleOAuth',
'social.backends.linkedin.LinkedinOAuth',
'social.backends.odnoklassniki.OdnoklassnikiOAuth2',
'social.backends.mailru.MailruOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_LOGIN_URL = '/'
SOCIAL_AUTH_USER_MODEL = 'accounts.User'
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/logged-in/'
# The user will be redirected to this URL when a social account is disconnected
SOCIAL_AUTH_INACTIVE_USER_URL = '/inactive-user/'
# #Used to redirect the user once the auth process ended successfully. The value of ?next=/foo is used if it was present
# SOCIAL_AUTH_LOGIN_ERROR_URL = '/login-error/'
# #URL where the user will be redirected in case of an error
# SOCIAL_AUTH_LOGIN_URL = '/login-url/'
# #Is used as a fallback for LOGIN_ERROR_URL
# SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/new-users-redirect-url/'
# # Used to redirect new registered users, will be used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL if defined.
# Note that ?next=/foo is appended if present, if you want new users to go to next, you’ll need to do it yourself.
# SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = '/new-association-redirect-url/'
# # Like SOCIAL_AUTH_NEW_USER_REDIRECT_URL but for new associated accounts (user is already logged in).
# Used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL
# SOCIAL_AUTH_DISCONNECT_REDIRECT_URL = '/account-disconnected-redirect-url/'
# Inactive users can be redirected to this URL when trying to authenticate.
# SOCIAL_AUTH_UID_LENGTH = <int>
# SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH = <int>
# SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH = <int>
# SOCIAL_AUTH_FORCE_EMAIL_VALIDATION = True
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = True
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'functions.pipeline.get_email', # vk
'functions.pipeline.load_user',
'social.pipeline.social_auth.auth_allowed',
'functions.pipeline.social_user',
# 'social.pipeline.social_auth.social_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.get_username',
'functions.pipeline.require_email',
#'social.pipeline.mail.mail_validation',
'functions.pipeline.create_user',
#'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_by_email',
'social.pipeline.social_auth.associate_user',
# 'social.pipeline.user.user_details'
'functions.pipeline.user_details',
)
REQUIRES_EMAIL_VALIDATION = True
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = 'functions.pipeline.SendVerificationEmail'
SOCIAL_AUTH_EMAIL_VALIDATION_URL = '/email_verify_sent/'
SOCIAL_AUTH_VK_OAUTH2_KEY = '3393841'
SOCIAL_AUTH_VK_OAUTH2_SECRET = '2P19EBUEpLZifaabbREv'
SOCIAL_AUTH_VK_OAUTH2_SCOPE =['email']
SOCIAL_AUTH_VK_OAUTH2_PROFILE_EXTRA_PARAMS = {
'fields': 'email'
}
SOCIAL_AUTH_FACEBOOK_KEY = '133775720059470'
SOCIAL_AUTH_FACEBOOK_SECRET = '434edf89c24a290497646a739df656c6'
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'publish_actions']
SOCIAL_AUTH_TWITTER_KEY = 'S6NX33FazTcWuqnXQhlOdg'
SOCIAL_AUTH_TWITTER_SECRET = 'MxUGfySQmLI5kvqSoAtWsGje2eAHQL7Jo8mXuIZ4D0'
SOCIAL_AUTH_TWITTER_SCOPE = ['email']
SOCIAL_AUTH_GOOGLE_OAUTH_KEY = '1044044901114.apps.googleusercontent.com'
SOCIAL_AUTH_GOOGLE_OAUTH_SECRET = 'j_McErlPPof88eNrmOXI-ZXI'
SOCIAL_AUTH_GOOGLE_OAUTH_SCOPE = ['email']
SOCIAL_AUTH_MAILRU_OAUTH2_KEY = '697945'
SOCIAL_AUTH_MAILRU_OAUTH2_SECRET = '343581b9e31961b334532cc1880066e8'
SOCIAL_AUTH_MAILRU_OAUTH2_SCOPE = ['email']
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_KEY = '1249032192'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SECRET = '87A7A1B964D2C73B9861BF76'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_NAME = 'CBAJLDHLEBABABABA'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SCOPE = ['GET_EMAIL']
SOCIAL_AUTH_LINKEDIN_KEY = 'jt9xwquj1fkd'
SOCIAL_AUTH_LINKEDIN_SECRET = 'GvM2xQCNADaBfiMy'
SOCIAL_AUTH_LINKEDIN_SCOPE = ['email']
INSTALLED_APPS = (
'modeltranslation',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.redirects',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'django.contrib.sitemaps',
'haystack',
#custom modules
'redirects',
'stats_collector',
'emencia.django.newsletter',
'accounts',
'article',
'comments',
'city',
'company',
'conference',
'core',
'country',
'directories',
'expobanner',
'exposition',
'file',
'import_xls',
'news',
'note',
'organiser',
'place_conference',
'place_exposition',
'photoreport',
'registration',
'review',
'seminar',
'service',
'settings',
'theme',
'translator',
'webinar',
'meta',
'events',
#django modules
'django_crontab',
'sorl.thumbnail', # for logos
'photologue', # photogallery
'sortedm2m', # photologue dependence
'hvad', #
'tinymce', # ???
'ckeditor', # wysiwig editor in admin
'django_messages', # messages
'bitfield',
'djutils', # ??
'pytils', # ??
'pymorphy', # ??
'password_reset', # reset password
'social.apps.django_app.default', # social auth
'core',
'specialist_catalog',
'south',
'rosetta',
'widget_tweaks',
)
CRONJOBS = [
('8 * * * *', 'django.core.management.call_command', ['send_newsletter']),
('0 * * * *', 'django.core.management.call_command', ['update_index', 'conference', '--remove', '--age=6']),
('5 * * * *', 'django.core.management.call_command', ['update_index', 'exposition', '--remove', '--age=6']),
('0 1,13 * * *', 'django.core.management.call_command', ['update_index', 'place_exposition', '--remove', '--age=24']),
('0 3 * * *', 'django.core.management.call_command', ['update_index', 'company', '--remove', '--age=48']),
('0 4 * * *', 'django.core.management.call_command', ['update_index', 'theme', '--remove', '--age=48']),
('0 5 * * * ', 'django.core.management.call_command', ['update_index', 'tag', '--remove', '--age=48']),
('0 6 * * *', 'django.core.management.call_command', ['update_index', 'country', '--remove', '--age=48']),
('0 7 * * *', 'django.core.management.call_command', ['update_index', 'city', '--remove', '--age=48']),
('10 * * * *', 'django.core.management.call_command', ['banner_log_update']),
('20 2,14 * * *', 'django.core.management.call_command', ['banner_log_check_previous_day']),
('*/5 * * * *', 'django.core.management.call_command', ['update_views_cache']),
('40 6 * * * ', 'django.core.management.call_command', ['newsletter_contacts_remove_notactivated']),
# ('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']),
('12 4 * * *', 'django.core.management.call_command', ['stats_daily']),
('5 10 * * *', 'django.core.management.call_command', ['update_events_filter_fields']),
]
PYMORPHY_DICTS = {
'ru': { 'dir': os.path.join(SITE_ROOT, 'settings/russian_dicts')} #'/home/www/proj/settings/russian_dicts' },
}
# search backend
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://localhost:8983/solr'
# ...or for multicore...
# 'URL': 'http://127.0.0.1:8983/solr/mysite',
},
}
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}
# TODO automate crons
"""
# update search indexes
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index conference --remove --age=6
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index exposition --remove --age=6
0 1,13 * * * /usr/bin/python /var/www/proj/manage.py update_index place_exposition --remove --age=24
0 3 * * * /usr/bin/python /var/www/proj/manage.py update_index company --remove --age=48
0 4 * * * /usr/bin/python /var/www/proj/manage.py update_index theme --remove --age=48
0 5 * * * /usr/bin/python /var/www/proj/manage.py update_index tag --remove --age=48
0 6 * * * /usr/bin/python /var/www/proj/manage.py update_index country --remove --age=48
0 7 * * * /usr/bin/python /var/www/proj/manage.py update_index city --remove --age=48
# update banner logs
10 * * * * /usr/bin/python /var/www/proj/manage.py banner_log_update
20 2,14 * * * /usr/bin/python /var/www/proj/manage.py banner_log_check_previous_day
# update hotels prices
20 1 * * 6 /usr/bin/python /var/www/proj/manage.py update_hotels_price
# newsletter
20 * * * * /usr/bin/python /var/www/proj/manage.py send_newsletter
40 6 * * * /usr/bin/python /var/www/proj/manage.py newsletter_contacts_remove_notactivated
"""
THUMBNAIL_DEBUG = DEBUG
THUMBNAIL_ENGINE = "proj.sorlengine.SorlEngine"
THUMBNAIL_FORMAT = "PNG"
CALLBACK_EMAIL = 'kotzilla@ukr.net'
BOOKING_AID = '333667'
try:
from functions.overrides import SeoPaginator as Paginator
except ImportError:
from django.core.paginator import Paginator
DEFAULT_PAGINATOR = Paginator
ADMIN_PAGINATION = 20
CLIENT_PAGINATION = 25
TEMPLATE_DEBUG = DEBUG
NO_LOGO = '/static/client/img/no-logo.png'
# events settings
CURRENCY = ('RUB', 'USD', 'EUR', 'RMB', 'GBP', 'AED', 'SGD', 'TRY', 'CZK', 'CHF', 'SEK', 'LKR', 'UAH', 'IDR', 'PLN','JPY')
BIT_AUDIENCE = (('experts', _(u'Специалисты')), ('experts and consumers', _(u'Специалисты и потребители')),
('general public', _(u'Широкая публика')))
MONTHES = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')},
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')},
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')},
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')},
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')},
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}}
SNG_COUNTRIES = [159, 186, 31, 6, 99, 13, 189, 64]
RUSSIA_PK = 159
MOSCOW_PK = -2960561
SPB_PK = -2996338
CLIENT_DATE_FORMAT = ["%d.%m.%Y"]
# cache pages in random seconds. random in this range
CACHE_RANGE = [60, 120]
DEFAULT_POPUP_COOKIE = 'expo_b_default_popup'
INI_CONFIG_PATH = os.path.join(SITE_ROOT, 'proj/config.ini')
INI_CONFIG = ConfigParser()
INI_CONFIG.read(INI_CONFIG_PATH)
C_CITY_CATALOG_KEY = 'conf_city_catalog'
C_COUNTRY_CATALOG_KEY = 'conf_country_catalog'
E_CITY_CATALOG_KEY = 'expo_city_catalog'
E_COUNTRY_CATALOG_KEY = 'expo_country_catalog'
DEFAULT_DESCRIPTION = {
'e_description_ru': 'templates/client/includes/conference/default_description_ru.html',
'e_description_en': 'templates/client/includes/conference/default_description_en.html',
'c_description_ru': 'templates/client/includes/exposition/default_description_ru.html',
'c_description_en': 'templates/client/includes/exposition/default_description_en.html',
}
PERIODIC = {
0: '',
1: _(u'Ежегодно'),
2: _(u'2 раза в год'),
3: _(u'3 раза в год'),
4: _(u'4 раза в год'),
5: _(u'5 раз в год'),
6: _(u'Раз в 2 года'),
7: _(u'Раз в 3 года'),
8: _(u'Раз в 4 года'),
9: _(u'Раз в 5 лет')
}
try:
from local import *
except ImportError, e:
pass
# save sessions in redis
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
if not DEBUG:
# cache template loading
TEMPLATE_LOADERS = (
('django.template.loaders.cached.Loader', (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)),
)
else:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
# debug_toolbar settings
if DEBUG:
DEBUG_TOOLBAR_PATCH_SETTINGS = False
INTERNAL_IPS = ('127.0.0.1','176.121.5.82', '176.121.11.162', '77.123.47.46')
MIDDLEWARE_CLASSES += (
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
INSTALLED_APPS += (
'debug_toolbar',
)
JQUERY_URL = os.path.join(SITE_ROOT, 'static/client/js/jquery-ui-1.10.4.custom.min.js'),
DEBUG_TOOLBAR_PANELS = [
#'debug_toolbar.panels.versions.VersionsPanel',
'debug_toolbar.panels.timer.TimerPanel',
'debug_toolbar.panels.settings.SettingsPanel',
'debug_toolbar.panels.headers.HeadersPanel',
'debug_toolbar.panels.request.RequestPanel',
'debug_toolbar.panels.sql.SQLPanel',
'debug_toolbar.panels.staticfiles.StaticFilesPanel',
'debug_toolbar.panels.templates.TemplatesPanel',
'debug_toolbar.panels.cache.CachePanel',
'debug_toolbar.panels.signals.SignalsPanel',
'debug_toolbar.panels.logging.LoggingPanel',
'debug_toolbar.panels.redirects.RedirectsPanel',
]
# logging
U_LOGFILE_SIZE = 1 * 1024 * 1024
U_LOGFILE_COUNT = 2
DEFAULT_LOGGER_NAME = 'django'
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s \n'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file': {
'level': 'INFO',
'filename': os.path.join(SITE_ROOT, 'logs/django.log'),
'formatter': 'verbose',
'class':'logging.handlers.RotatingFileHandler',
'maxBytes': U_LOGFILE_SIZE,
'backupCount': U_LOGFILE_COUNT,
},
},
'loggers': {
'django': {
'handlers': ['file'],
'propagate': True,
'level': 'DEBUG',
},
}
}

@ -1 +0,0 @@
dev:$apr1$51bqElVf$/.SfDBWGSjAauaw82Drbo1

@ -1,201 +0,0 @@
<?xml version="1.0" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<schema name="default" version="1.4">
<types>
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="binary" class="solr.BinaryField"/>
<!-- Numeric field types that manipulate the value into
a string value that isn't human-readable in its internal form,
but with a lexicographic ordering the same as the numeric ordering,
so that range queries work correctly. -->
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
<fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/>
<!-- A Trie based date field for faster date range queries and date faceting. -->
<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/>
<fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
<fieldtype name="geohash" class="solr.GeoHashField"/>
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
<filter class="solr.EnglishMinimalStemFilterFactory"/>
-->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
<filter class="solr.EnglishMinimalStemFilterFactory"/>
-->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>
</fieldType>
<fieldType name="ngram" class="solr.TextField" >
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
</analyzer>
</fieldType>
</types>
<fields>
<!-- general -->
<field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
<field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="_version_" type="long" indexed="true" stored="true"/>
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
<dynamicField name="*_l" type="long" indexed="true" stored="true"/>
<dynamicField name="*_t" type="text_en" indexed="true" stored="true"/>
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
<dynamicField name="*_f" type="float" indexed="true" stored="true"/>
<dynamicField name="*_d" type="double" indexed="true" stored="true"/>
<dynamicField name="*_dt" type="date" indexed="true" stored="true"/>
<dynamicField name="*_p" type="location" indexed="true" stored="true"/>
<dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
<field name="name_ru" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="url" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="catalog_name_ru" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="catalog_name_en" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="content_auto" type="edge_ngram" indexed="true" stored="true" multiValued="false" />
<field name="form_name" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="name_en" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="area_id" type="long" indexed="true" stored="true" multiValued="false" />
<field name="city_id" type="long" indexed="true" stored="true" multiValued="false" />
<field name="country_id" type="long" indexed="true" stored="true" multiValued="false" />
<field name="theme" type="text_en" indexed="true" stored="true" multiValued="true" />
<field name="tag" type="text_en" indexed="true" stored="true" multiValued="true" />
<field name="where" type="text_en" indexed="true" stored="true" multiValued="true" />
<field name="data_end" type="date" indexed="true" stored="true" multiValued="false" />
<field name="data_begin" type="date" indexed="true" stored="true" multiValued="false" />
<field name="city" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="country" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="parent_en" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="parent_ru" type="text_en" indexed="true" stored="true" multiValued="false" />
</fields>
<!-- field to use to determine and enforce document uniqueness. -->
<uniqueKey>id</uniqueKey>
<!-- field for the QueryParser to use when an explicit fieldname is absent -->
<defaultSearchField>text</defaultSearchField>
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<solrQueryParser defaultOperator="AND"/>
</schema>

@ -1,89 +0,0 @@
server {
# server_name 176.121.11.165 expomap.ru www.expomap.ru dev.expomap.ru;
listen 80;
return 301 https://$host$request_uri;
}
geo $maintenance {
default yes;
127.0.0.1/32 no;
31.43.24.170/24 no;
}
server {
listen 443;
server_name 176.121.11.165 www.expomap.ru expomap.ru dev.expomap.ru;
#ssl_stapling on;
ssl on;
ssl_certificate /etc/nginx/ssl/expomap.ru.crt;
ssl_certificate_key /etc/nginx/ssl/expomap.ru.key;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:25m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000;";
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:";
client_header_timeout 360s;
error_page 503 /dev_work.html;
location / {
if ($maintenance = yes) {
return 503;
}
auth_basic "Unauthorized";
auth_basic_user_file /home/www/proj/.htpasswd;
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
include /etc/nginx/geoip_proxy.conf;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 256 8k;
proxy_busy_buffers_size 2000k;
proxy_temp_file_write_size 2048k;
}
location /965E1EE7949FD639CA0124C8D8C57774.txt {
root /home/www/proj/;
}
location /4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html {
root /home/www/proj/support;
}
location /static {
root /home/www/proj;
}
location /media {
root /home/www/proj;
}
location /templates {
root /home/www/proj/static;
}
location /subdmn {
root /home/old_files;
}
location = /dev_work.html {
root /home/www/proj/support/;
internal;
}
}

@ -1,25 +0,0 @@
<html>
<head>
<title>Извините, идут технические работы</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="no-cache">
<style>
body{
margin:0px;
font-family:Arial;
}
.head{
height:70px;
background-color:#c7d9f0;
}
.body{
padding-top:70px;
text-align:center;
}
</style>
</head>
<body style="margin:0;">
<div class="head"></div>
<div class="body">Извините, идут технические работы.</div>
</body>
</html>

@ -1,5 +1,4 @@
server { server {
# server_name 176.121.11.165 expomap.ru www.expomap.ru dev.expomap.ru;
listen 80; listen 80;
return 301 https://$host$request_uri; return 301 https://$host$request_uri;
} }
@ -7,7 +6,6 @@ server {
server { server {
listen 443; listen 443;
server_name 176.121.11.165 www.expomap.ru expomap.ru dev.expomap.ru; server_name 176.121.11.165 www.expomap.ru expomap.ru dev.expomap.ru;
#ssl_stapling on;
ssl on; ssl on;
ssl_certificate /etc/nginx/ssl/expomap.ru.crt; ssl_certificate /etc/nginx/ssl/expomap.ru.crt;
ssl_certificate_key /etc/nginx/ssl/expomap.ru.key; ssl_certificate_key /etc/nginx/ssl/expomap.ru.key;
@ -22,8 +20,6 @@ server {
client_header_timeout 360s; client_header_timeout 360s;
location / { location / {
auth_basic "Unauthorized";
auth_basic_user_file /home/www/proj/.htpasswd;
proxy_pass http://127.0.0.1:8080/; proxy_pass http://127.0.0.1:8080/;
proxy_redirect off; proxy_redirect off;
proxy_set_header Host $host; proxy_set_header Host $host;
@ -42,12 +38,12 @@ server {
proxy_temp_file_write_size 2048k; proxy_temp_file_write_size 2048k;
} }
location /965E1EE7949FD639CA0124C8D8C57774.txt { location /4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html {
root /home/www/proj/; root /home/www/proj;
} }
location /4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html { location /965E1EE7949FD639CA0124C8D8C57774.txt {
root /home/www/proj/support; root /home/www/proj;
} }
location /static { location /static {
@ -68,13 +64,4 @@ server {
root /home/www/proj/static; root /home/www/proj/static;
} }
location /subdmn {
root /home/old_files;
} }
#location ~* ^.+\.(rss|atom|jpg|jpeg|gif|png|ico|rtf|js|css)$ {
# expires max;
#}
}

@ -1,84 +0,0 @@
server {
server_name expomap.ru www.expomap.ru;
# listen 80;
return 301 https://expomap.ru$request_uri;
}
server {
listen 176.121.11.162:443 ssl;
server_name www.expomap.ru;
# ssl on;
# ssl_certificate /etc/nginx/ssl/expomap.ru.crt;
# ssl_certificate_key /etc/nginx/ssl/expomap.ru.key;
return 301 https://expomap.ru$request_uri;
}
server {
listen 176.121.11.162:443 ssl default_server ;
server_name expomap.ru ;
# ssl_stapling on;
ssl on;
ssl_certificate /etc/nginx/ssl/expomap.ru.crt;
ssl_certificate_key /etc/nginx/ssl/expomap.ru.key;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:25m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000;";
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:";
client_header_timeout 360s;
location / {
# auth_basic "Unauthorized";
# auth_basic_user_file /home/www/proj/.htpasswd;
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
include /etc/nginx/geoip_proxy.conf;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 256 8k;
proxy_busy_buffers_size 2000k;
proxy_temp_file_write_size 2048k;
}
location /965E1EE7949FD639CA0124C8D8C57774.txt {
root /home/www/proj/;
}
location /4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html {
root /home/www/proj/support;
}
location /static {
access_log off;
expires max;
root /home/www/proj;
}
location /media {
access_log off;
expires max;
root /home/www/proj;
}
location /templates {
access_log off;
expires max;
root /home/www/proj/static;
}
location /subdmn {
root /home/old_files;
}
}

@ -1,31 +0,0 @@
<VirtualHost 127.0.0.1:8080>
WSGIDaemonProcess www-data display-name=%{GROUP} processes=16 threads=1
WSGIProcessGroup www-data
WSGIScriptAlias / "/home/www/proj/project.wsgi"
ServerName hit.expomap.ru
<Directory "/home/www/proj/">
Order allow,deny
Options Indexes FollowSymLinks
Allow from all
IndexOptions FancyIndexing
</Directory>
Alias /media "/home/www/proj/media/"
Alias /static "/home/www/proj/static/"
<Directory "/home/www/proj/media">
Order allow,deny
Options Indexes FollowSymLinks
Allow from all
IndexOptions FancyIndexing
</Directory>
<Directory "/home/www/proj/static">
Order allow,deny
Options Indexes FollowSymLinks
Allow from all
IndexOptions FancyIndexing
</Directory>
ErrorLog /var/log/apache2/expo.error.log
</VirtualHost>

@ -1,201 +0,0 @@
<?xml version="1.0" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<schema name="default" version="1.4">
<types>
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="binary" class="solr.BinaryField"/>
<!-- Numeric field types that manipulate the value into
a string value that isn't human-readable in its internal form,
but with a lexicographic ordering the same as the numeric ordering,
so that range queries work correctly. -->
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
<fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
<fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/>
<!-- A Trie based date field for faster date range queries and date faceting. -->
<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/>
<fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
<fieldtype name="geohash" class="solr.GeoHashField"/>
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
<filter class="solr.EnglishMinimalStemFilterFactory"/>
-->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
<filter class="solr.EnglishMinimalStemFilterFactory"/>
-->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>
</fieldType>
<fieldType name="ngram" class="solr.TextField" >
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
</analyzer>
</fieldType>
</types>
<fields>
<!-- general -->
<field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
<field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="_version_" type="long" indexed="true" stored="true"/>
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
<dynamicField name="*_l" type="long" indexed="true" stored="true"/>
<dynamicField name="*_t" type="text_en" indexed="true" stored="true"/>
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
<dynamicField name="*_f" type="float" indexed="true" stored="true"/>
<dynamicField name="*_d" type="double" indexed="true" stored="true"/>
<dynamicField name="*_dt" type="date" indexed="true" stored="true"/>
<dynamicField name="*_p" type="location" indexed="true" stored="true"/>
<dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
<field name="name_ru" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="url" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="catalog_name_ru" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="catalog_name_en" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="content_auto" type="edge_ngram" indexed="true" stored="true" multiValued="false" />
<field name="form_name" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="name_en" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="area_id" type="long" indexed="true" stored="true" multiValued="false" />
<field name="city_id" type="long" indexed="true" stored="true" multiValued="false" />
<field name="country_id" type="long" indexed="true" stored="true" multiValued="false" />
<field name="theme" type="text_en" indexed="true" stored="true" multiValued="true" />
<field name="tag" type="text_en" indexed="true" stored="true" multiValued="true" />
<field name="where" type="text_en" indexed="true" stored="true" multiValued="true" />
<field name="data_end" type="date" indexed="true" stored="true" multiValued="false" />
<field name="data_begin" type="date" indexed="true" stored="true" multiValued="false" />
<field name="city" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="country" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="parent_en" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="parent_ru" type="text_en" indexed="true" stored="true" multiValued="false" />
</fields>
<!-- field to use to determine and enforce document uniqueness. -->
<uniqueKey>id</uniqueKey>
<!-- field for the QueryParser to use when an explicit fieldname is absent -->
<defaultSearchField>text</defaultSearchField>
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<solrQueryParser defaultOperator="AND"/>
</schema>

@ -1,627 +0,0 @@
# -*- coding: utf-8 -*-
# Django settings for proj project.
import os
import django
from django.utils.translation import ugettext_lazy as _
from ConfigParser import ConfigParser
DJANGO_ROOT = os.path.dirname(os.path.realpath(django.__file__))
SITE_ROOT = os.path.split(os.path.dirname(os.path.realpath(__file__)))[0]
DEBUG = False
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'expomap',
'USER': 'kotzilla',
'PASSWORD': 'qazedc',
'HOST': '',
'PORT': '',
}
}
CACHES = {
"default": {
"BACKEND": "redis_cache.cache.RedisCache",
"LOCATION": "/tmp/redis.sock",
"OPTIONS": {
"CLIENT_CLASS": "redis_cache.client.DefaultClient",
},
}
}
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145', 'expomap.ru', '195.66.79.148']
DEFAULT_HTTP_SCHEME = 'https'
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'UTC'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'ru'
DEFAULT_LANGUAGE = 'ru'
LANGUAGES = (
('ru', _('Russian')),
('en', _('English')),
)
LOCALE_PATHS = (
os.path.join(SITE_ROOT, 'locale'),
)
DEFAULT_CHARSET = 'utf-8'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = False
# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = False
MEDIA_ROOT = os.path.join(SITE_ROOT, 'media/')
CKEDITOR_UPLOAD_PATH = os.path.join(SITE_ROOT, 'media/upload')
CKEDITOR_CONFIGS = {
'default': {
'toolbar': 'standart',
'height': 200,
'width': 565,
'resize_enabled' : True,
'autoGrow_onStartup' : False,
'autoGrow_bottomSpace' : 300,
'fillEmptyBlocks' : False,
'autoParagraph' : False,
},
'newsletters': {
'toolbar': 'standart',
'height': 600,
'width': 750,
'resize_enabled' : True,
'autoGrow_onStartup' : False,
'autoGrow_bottomSpace' : 300,
'fillEmptyBlocks' : False,
'autoParagraph' : False,
},
}
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
# Make this unique, and don't share it with anybody.
SECRET_KEY = '=yz1@ko%1s8bmel)c84#s*xpxn%4(1e+smdnh*@rdm*5%v!mln'
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
'django_messages.context_processors.inbox',
"proj.views.expo_context"
)
#LOGIN_REDIRECT_URL = '/'
MIDDLEWARE_CLASSES = (
# 'django.middleware.cache.UpdateCacheMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'solid_i18n.middleware.SolidLocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'social.apps.django_app.middleware.SocialAuthExceptionMiddleware',
# 'django.middleware.cache.FetchFromCacheMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'proj.middleware.Referer',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
'proj.middleware.ExpoRedirectFallbackMiddleware',
'proj.middleware.SpacelessMiddleware',
)
ROOT_URLCONF = 'proj.urls'
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'proj.wsgi.application'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
# os.path.join(SITE_ROOT, 'templates/debug_toolbar'),
os.path.join(SITE_ROOT, 'templates/c_admin'),
os.path.join(SITE_ROOT, 'templates/c_admin/accounts'),
os.path.join(SITE_ROOT, 'templates/c_admin/article'),
os.path.join(SITE_ROOT, 'templates/c_admin/country'),
os.path.join(SITE_ROOT, 'templates/c_admin/city'),
os.path.join(SITE_ROOT, 'templates/c_admin/company'),
os.path.join(SITE_ROOT, 'templates/c_admin/conference'),
os.path.join(SITE_ROOT, 'templates/c_admin/directories'),
os.path.join(SITE_ROOT, 'templates/c_admin/exposition'),
os.path.join(SITE_ROOT, 'templates/c_admin/forms'),
os.path.join(SITE_ROOT, 'templates/c_admin/import templates'),
os.path.join(SITE_ROOT, 'templates/c_admin/news'),
os.path.join(SITE_ROOT, 'templates/c_admin/organiser'),
os.path.join(SITE_ROOT, 'templates/c_admin/place_conference'),
os.path.join(SITE_ROOT, 'templates/c_admin/place_exposition'),
os.path.join(SITE_ROOT, 'templates/c_admin/page'),
os.path.join(SITE_ROOT, 'templates/c_admin/photoreport'),
os.path.join(SITE_ROOT, 'templates/c_admin/settings'),
os.path.join(SITE_ROOT, 'templates/c_admin/seminar'),
os.path.join(SITE_ROOT, 'templates/c_admin/service'),
os.path.join(SITE_ROOT, 'templates/c_admin/theme'),
os.path.join(SITE_ROOT, 'templates/c_admin/translator'),
os.path.join(SITE_ROOT, 'templates/c_admin/webinar'),
os.path.join(SITE_ROOT, 'templates/client'),
os.path.join(SITE_ROOT, 'templates/client/exposition'),
os.path.join(SITE_ROOT, 'templates/client/photoreport'),
os.path.join(SITE_ROOT, 'templates/client/includes'),
os.path.join(SITE_ROOT, 'templates'),
#os.path.join(SITE_ROOT, 'templates/client/popups'),
)
AUTH_USER_MODEL = 'accounts.User'
LOGIN_URL='/'
#registration info
ACCOUNT_ACTIVATION_DAYS=2
# mail settings
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = True
EMAIL_PORT = 25
DEFAULT_FROM_EMAIL = "expomap.ru"
AUTHENTICATION_BACKENDS = (
'social.backends.open_id.OpenIdAuth',
'social.backends.vk.VKOAuth2',
'social.backends.facebook.FacebookOAuth2',
'social.backends.twitter.TwitterOAuth',
'social.backends.google.GoogleOAuth',
'social.backends.linkedin.LinkedinOAuth',
'social.backends.odnoklassniki.OdnoklassnikiOAuth2',
'social.backends.mailru.MailruOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_LOGIN_URL = '/'
SOCIAL_AUTH_USER_MODEL = 'accounts.User'
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/logged-in/'
# The user will be redirected to this URL when a social account is disconnected
SOCIAL_AUTH_INACTIVE_USER_URL = '/inactive-user/'
# #Used to redirect the user once the auth process ended successfully. The value of ?next=/foo is used if it was present
# SOCIAL_AUTH_LOGIN_ERROR_URL = '/login-error/'
# #URL where the user will be redirected in case of an error
# SOCIAL_AUTH_LOGIN_URL = '/login-url/'
# #Is used as a fallback for LOGIN_ERROR_URL
# SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/new-users-redirect-url/'
# # Used to redirect new registered users, will be used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL if defined.
# Note that ?next=/foo is appended if present, if you want new users to go to next, you’ll need to do it yourself.
# SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = '/new-association-redirect-url/'
# # Like SOCIAL_AUTH_NEW_USER_REDIRECT_URL but for new associated accounts (user is already logged in).
# Used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL
# SOCIAL_AUTH_DISCONNECT_REDIRECT_URL = '/account-disconnected-redirect-url/'
# Inactive users can be redirected to this URL when trying to authenticate.
# SOCIAL_AUTH_UID_LENGTH = <int>
# SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH = <int>
# SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH = <int>
# SOCIAL_AUTH_FORCE_EMAIL_VALIDATION = True
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = True
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'functions.pipeline.get_email', # vk
'functions.pipeline.load_user',
'social.pipeline.social_auth.auth_allowed',
'functions.pipeline.social_user',
# 'social.pipeline.social_auth.social_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.get_username',
'functions.pipeline.require_email',
#'social.pipeline.mail.mail_validation',
'functions.pipeline.create_user',
#'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_by_email',
'social.pipeline.social_auth.associate_user',
# 'social.pipeline.user.user_details'
'functions.pipeline.user_details',
)
REQUIRES_EMAIL_VALIDATION = True
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = 'functions.pipeline.SendVerificationEmail'
SOCIAL_AUTH_EMAIL_VALIDATION_URL = '/email_verify_sent/'
SOCIAL_AUTH_VK_OAUTH2_KEY = '3393841'
SOCIAL_AUTH_VK_OAUTH2_SECRET = '2P19EBUEpLZifaabbREv'
SOCIAL_AUTH_VK_OAUTH2_SCOPE =['email']
SOCIAL_AUTH_VK_OAUTH2_PROFILE_EXTRA_PARAMS = {
'fields': 'email'
}
SOCIAL_AUTH_VK_OAUTH2_EXTRA_DATA = ['email']
SOCIAL_AUTH_FACEBOOK_KEY = '133775720059470'
SOCIAL_AUTH_FACEBOOK_SECRET = '434edf89c24a290497646a739df656c6'
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'publish_actions']
SOCIAL_AUTH_TWITTER_KEY = 'S6NX33FazTcWuqnXQhlOdg'
SOCIAL_AUTH_TWITTER_SECRET = 'MxUGfySQmLI5kvqSoAtWsGje2eAHQL7Jo8mXuIZ4D0'
SOCIAL_AUTH_TWITTER_SCOPE = ['email']
SOCIAL_AUTH_GOOGLE_OAUTH_KEY = '1044044901114.apps.googleusercontent.com'
SOCIAL_AUTH_GOOGLE_OAUTH_SECRET = 'j_McErlPPof88eNrmOXI-ZXI'
SOCIAL_AUTH_GOOGLE_OAUTH_SCOPE = ['email']
SOCIAL_AUTH_MAILRU_OAUTH2_KEY = '697945'
SOCIAL_AUTH_MAILRU_OAUTH2_SECRET = '343581b9e31961b334532cc1880066e8'
SOCIAL_AUTH_MAILRU_OAUTH2_SCOPE = ['email']
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_KEY = '1249032192'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SECRET = '87A7A1B964D2C73B9861BF76'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_NAME = 'CBAJLDHLEBABABABA'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SCOPE = ['GET_EMAIL']
SOCIAL_AUTH_LINKEDIN_KEY = 'jt9xwquj1fkd'
SOCIAL_AUTH_LINKEDIN_SECRET = 'GvM2xQCNADaBfiMy'
SOCIAL_AUTH_LINKEDIN_SCOPE = ['email']
INSTALLED_APPS = (
'modeltranslation',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.redirects',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'django.contrib.sitemaps',
'haystack',
#custom modules
'redirects',
'stats_collector',
'emencia.django.newsletter',
'accounts',
'article',
'comments',
'city',
'company',
'conference',
'core',
'country',
'directories',
'expobanner',
'exposition',
'file',
'import_xls',
'news',
'note',
'organiser',
'place_conference',
'place_exposition',
'photoreport',
'registration',
'review',
'seminar',
'service',
'settings',
'theme',
'translator',
'webinar',
'meta',
'events',
#django modules
'django_crontab',
'sorl.thumbnail', # for logos
'photologue', # photogallery
'sortedm2m', # photologue dependence
'hvad', #
'tinymce', # ???
'ckeditor', # wysiwig editor in admin
'django_messages', # messages
'bitfield',
'djutils', # ??
'pytils', # ??
'pymorphy', # ??
'password_reset', # reset password
'social.apps.django_app.default', # social auth
'core',
'specialist_catalog',
'south',
'rosetta',
'widget_tweaks',
)
CRONJOBS = [
('8 * * * *', 'django.core.management.call_command', ['send_newsletter']),
('0 * * * *', 'django.core.management.call_command', ['update_index', 'conference', '--remove', '--age=6']),
('5 * * * *', 'django.core.management.call_command', ['update_index', 'exposition', '--remove', '--age=6']),
('0 1,13 * * *', 'django.core.management.call_command', ['update_index', 'place_exposition', '--remove', '--age=24']),
('0 3 * * *', 'django.core.management.call_command', ['update_index', 'company', '--remove', '--age=48']),
('0 4 * * *', 'django.core.management.call_command', ['update_index', 'theme', '--remove', '--age=48']),
('0 5 * * * ', 'django.core.management.call_command', ['update_index', 'tag', '--remove', '--age=48']),
('0 6 * * *', 'django.core.management.call_command', ['update_index', 'country', '--remove', '--age=48']),
('0 7 * * *', 'django.core.management.call_command', ['update_index', 'city', '--remove', '--age=48']),
('10 * * * *', 'django.core.management.call_command', ['banner_log_update']),
('20 2,14 * * *', 'django.core.management.call_command', ['banner_log_check_previous_day']),
('*/5 * * * *', 'django.core.management.call_command', ['update_views_cache']),
('40 6 * * * ', 'django.core.management.call_command', ['newsletter_contacts_remove_notactivated']),
('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']),
('12 4 * * *', 'django.core.management.call_command', ['stats_daily']),
('5 10 * * *', 'django.core.management.call_command', ['update_events_filter_fields']),
]
PYMORPHY_DICTS = {
'ru': { 'dir': os.path.join(SITE_ROOT, 'settings/russian_dicts')} #'/home/www/proj/settings/russian_dicts' },
}
# search backend
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://localhost:8983/solr'
# ...or for multicore...
# 'URL': 'http://127.0.0.1:8983/solr/mysite',
},
}
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}
# TODO automate crons
"""
# update search indexes
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index conference --remove --age=6
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index exposition --remove --age=6
0 1,13 * * * /usr/bin/python /var/www/proj/manage.py update_index place_exposition --remove --age=24
0 3 * * * /usr/bin/python /var/www/proj/manage.py update_index company --remove --age=48
0 4 * * * /usr/bin/python /var/www/proj/manage.py update_index theme --remove --age=48
0 5 * * * /usr/bin/python /var/www/proj/manage.py update_index tag --remove --age=48
0 6 * * * /usr/bin/python /var/www/proj/manage.py update_index country --remove --age=48
0 7 * * * /usr/bin/python /var/www/proj/manage.py update_index city --remove --age=48
# update banner logs
10 * * * * /usr/bin/python /var/www/proj/manage.py banner_log_update
20 2,14 * * * /usr/bin/python /var/www/proj/manage.py banner_log_check_previous_day
# update hotels prices
20 1 * * 6 /usr/bin/python /var/www/proj/manage.py update_hotels_price
# newsletter
20 * * * * /usr/bin/python /var/www/proj/manage.py send_newsletter
40 6 * * * /usr/bin/python /var/www/proj/manage.py newsletter_contacts_remove_notactivated
"""
THUMBNAIL_DEBUG = DEBUG
THUMBNAIL_ENGINE = "proj.sorlengine.SorlEngine"
THUMBNAIL_FORMAT = "PNG"
CALLBACK_EMAIL = 'kotzilla@ukr.net'
BOOKING_AID = '333667'
try:
from functions.overrides import SeoPaginator as Paginator
except ImportError:
from django.core.paginator import Paginator
DEFAULT_PAGINATOR = Paginator
ADMIN_PAGINATION = 20
CLIENT_PAGINATION = 25
TEMPLATE_DEBUG = DEBUG
NO_LOGO = '/static/client/img/no-logo.png'
# events settings
CURRENCY = ('RUB', 'USD', 'EUR', 'RMB', 'GBP', 'AED', 'SGD', 'TRY', 'CZK', 'CHF', 'SEK', 'LKR', 'UAH', 'IDR', 'PLN','JPY')
BIT_AUDIENCE = (('experts', _(u'Специалисты')), ('experts and consumers', _(u'Специалисты и потребители')),
('general public', _(u'Широкая публика')))
MONTHES = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')},
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')},
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')},
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')},
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')},
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}}
SNG_COUNTRIES = [159, 186, 31, 6, 99, 13, 189, 64]
RUSSIA_PK = 159
MOSCOW_PK = -2960561
SPB_PK = -2996338
CLIENT_DATE_FORMAT = ["%d.%m.%Y"]
# cache pages in random seconds. random in this range
CACHE_RANGE = [60, 120]
DEFAULT_POPUP_COOKIE = 'expo_b_default_popup'
INI_CONFIG_PATH = os.path.join(SITE_ROOT, 'proj/config.ini')
INI_CONFIG = ConfigParser()
INI_CONFIG.read(INI_CONFIG_PATH)
C_CITY_CATALOG_KEY = 'conf_city_catalog'
C_COUNTRY_CATALOG_KEY = 'conf_country_catalog'
E_CITY_CATALOG_KEY = 'expo_city_catalog'
E_COUNTRY_CATALOG_KEY = 'expo_country_catalog'
DEFAULT_DESCRIPTION = {
'e_description_ru': 'templates/client/includes/conference/default_description_ru.html',
'e_description_en': 'templates/client/includes/conference/default_description_en.html',
'c_description_ru': 'templates/client/includes/exposition/default_description_ru.html',
'c_description_en': 'templates/client/includes/exposition/default_description_en.html',
}
PERIODIC = {
0: '',
1: _(u'Ежегодно'),
2: _(u'2 раза в год'),
3: _(u'3 раза в год'),
4: _(u'4 раза в год'),
5: _(u'5 раз в год'),
6: _(u'Раз в 2 года'),
7: _(u'Раз в 3 года'),
8: _(u'Раз в 4 года'),
9: _(u'Раз в 5 лет')
}
try:
from local import *
except ImportError, e:
pass
# save sessions in redis
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
if not DEBUG:
# cache template loading
TEMPLATE_LOADERS = (
('django.template.loaders.cached.Loader', (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)),
)
else:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
# debug_toolbar settings
if DEBUG:
DEBUG_TOOLBAR_PATCH_SETTINGS = False
INTERNAL_IPS = ('127.0.0.1','176.121.5.82', '176.121.11.162', '77.123.47.46')
MIDDLEWARE_CLASSES += (
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
INSTALLED_APPS += (
'debug_toolbar',
)
JQUERY_URL = os.path.join(SITE_ROOT, 'static/client/js/jquery-ui-1.10.4.custom.min.js'),
DEBUG_TOOLBAR_PANELS = [
#'debug_toolbar.panels.versions.VersionsPanel',
'debug_toolbar.panels.timer.TimerPanel',
'debug_toolbar.panels.settings.SettingsPanel',
'debug_toolbar.panels.headers.HeadersPanel',
'debug_toolbar.panels.request.RequestPanel',
'debug_toolbar.panels.sql.SQLPanel',
'debug_toolbar.panels.staticfiles.StaticFilesPanel',
'debug_toolbar.panels.templates.TemplatesPanel',
'debug_toolbar.panels.cache.CachePanel',
'debug_toolbar.panels.signals.SignalsPanel',
'debug_toolbar.panels.logging.LoggingPanel',
'debug_toolbar.panels.redirects.RedirectsPanel',
]
# logging
U_LOGFILE_SIZE = 1 * 1024 * 1024
U_LOGFILE_COUNT = 2
DEFAULT_LOGGER_NAME = 'django'
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s \n'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file': {
'level': 'INFO',
'filename': os.path.join(SITE_ROOT, 'logs/django.log'),
'formatter': 'verbose',
'class':'logging.handlers.RotatingFileHandler',
'maxBytes': U_LOGFILE_SIZE,
'backupCount': U_LOGFILE_COUNT,
},
},
'loggers': {
'django': {
'handlers': ['file'],
'propagate': True,
'level': 'DEBUG',
},
}
}

@ -1,97 +0,0 @@
server {
server_name expomap.ru www.expomap.ru;
# listen 80;
return 301 https://expomap.ru$request_uri;
}
geo $maintenance {
default yes;
127.0.0.1/32 no;
31.43.24.170/24 no;
}
server {
listen 176.121.11.162:443 ssl;
server_name www.expomap.ru;
# ssl on;
# ssl_certificate /etc/nginx/ssl/expomap.ru.crt;
# ssl_certificate_key /etc/nginx/ssl/expomap.ru.key;
return 301 https://expomap.ru$request_uri;
}
server {
listen 176.121.11.162:443 ssl default_server ;
server_name expomap.ru ;
# ssl_stapling on;
ssl on;
ssl_certificate /etc/nginx/ssl/expomap.ru.crt;
ssl_certificate_key /etc/nginx/ssl/expomap.ru.key;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:25m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000;";
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:";
client_header_timeout 360s;
error_page 503 /dev_work.html;
location / {
# auth_basic "Unauthorized";
# auth_basic_user_file /home/www/proj/.htpasswd;
if ($maintenance = yes) {
return 503;
}
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
include /etc/nginx/geoip_proxy.conf;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 256 8k;
proxy_busy_buffers_size 2000k;
proxy_temp_file_write_size 2048k;
}
location /965E1EE7949FD639CA0124C8D8C57774.txt {
root /home/www/proj/;
}
location /4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html {
root /home/www/proj/support;
}
location /static {
root /home/www/proj;
}
location /media {
root /home/www/proj;
}
location /templates {
root /home/www/proj/static;
}
location /subdmn {
root /home/old_files;
}
}

@ -112,7 +112,7 @@
{# <a class="cl-btn icon-cal" href="{% url 'account_calendar' %}">{% trans 'календарь' %}</a>#} {# <a class="cl-btn icon-cal" href="{% url 'account_calendar' %}">{% trans 'календарь' %}</a>#}
{# <a class="cl-btn icon-doc" href="/profile/feed/">{% trans 'документы' %}</a>#} {# <a class="cl-btn icon-doc" href="/profile/feed/">{% trans 'документы' %}</a>#}
<a href="{% url 'account_calendar' %}" data-tooltip="{% trans 'Календарь' %}"><i class="fa fa-calendar"></i></a> <a href="{% url 'account_calendar' %}" data-tooltip="{% trans 'Календарь' %}"><i class="fa fa-calendar"></i></a>
<a href="/profile/feed/" data-tooltip="{% trans 'Документы' %}"><i class="fa fa-file-text-o"></i></a> <a href="/profile/feed/" data-tooltip="{% trans 'Лента событий' %}"><i class="fa fa-file-text-o"></i></a>
</div> </div>
<div class="clb-profile"> <div class="clb-profile">

@ -1,11 +1,11 @@
{% load i18n %} {% load i18n %}
<div class="reversed" style="border-left: 5px solid #ff9900; padding: 8px 12px; background-color: #fff; font-size:17px; text-align: justify; margin-bottom: 10px">{% trans "События по указанным параметрам не найдены. Попробуйте упростить параметры или расширить временные рамки. Также, вы можете посмотреть уже прошедшие события и проверить самостоятельно, будут ли они проходить в будущем." %}</div> <div class="reversed" style="border-left: 5px solid #ff9900; padding: 8px 12px; background-color: #fff; font-size:17px; text-align: justify; margin-bottom: 10px">{% trans "События по указанным параметрам не найдены. Попробуйте упростить параметры или расширить временные рамки. Также вы можете посмотреть уже прошедшие события и проверить самостоятельно, будут ли они проходить в будущем." %}</div>
<div id="message-not-found" class="modal_not_found"> <div id="message-not-found" class="modal_not_found">
<div class="modal_not_found_body"> <div class="modal_not_found_body">
<h3>{% trans 'События по указанным параметрам не найдены.' %}</h3> <h3>{% trans 'События по указанным параметрам не найдены' %}</h3>
<p>{% trans "Попробуйте упростить параметры или расширить временные рамки. Также, вы можете посмотреть уже прошедшие события и проверить самостоятельно, будут ли они проходить в будущем." %}</p> <p>{% trans "Попробуйте упростить параметры или расширить временные рамки. Также вы можете посмотреть уже прошедшие события и проверить самостоятельно, будут ли они проходить в будущем." %}</p>
</div> </div>
</div> </div>

@ -108,7 +108,7 @@
<h3>{% trans "Решение 1." %}</h3> <h3>{% trans "Решение 1." %}</h3>
<p>{% blocktrans %}<a href="#" data-scroll="#reviews">Воспитать выставочного специалиста</a> в своей компании.{% endblocktrans %}</p> <p>{% blocktrans %}<a href="#" data-scroll="#reviews">Воспитать выставочного специалиста</a> в своей компании.{% endblocktrans %}</p>
<p>{% trans "Необходимо выделить хотя бы 1 человека, который в течение минимум 2-3 месяцев будет заниматься подготовкой к выставке." %}</p> <p>{% trans "Необходимо выделить хотя бы 1 человека, который в течение минимум 2-3 месяцев будет заниматься подготовкой к выставке." %}</p>
<p class="with_arrow">{% trans 'А как это может быть в реальнлсти, посмотрите в нашем мультфильме" и стрелочку оранжевую на проигрыватель.' %}</p> <p class="with_arrow">{% trans 'А как это может быть в реальности, посмотрите в нашем мультфильме.' %}</p>
</div> </div>
<div class="variant expomap"> <div class="variant expomap">

Loading…
Cancel
Save