merged with .gitignore update commit

remotes/origin/search
Alexander Burdeiny 10 years ago
commit 3eccbae47c
  1. 71
      Makefile
  2. 1
      support/4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html
  3. 1
      support/dev/.htpasswd
  4. 74
      support/dev/hit.expomap.ru
  5. 32
      support/dev/proj.com
  6. 201
      support/dev/schema.xml
  7. 557
      support/dev/settings.py
  8. 84
      support/prod/hit.expomap.ru
  9. 31
      support/prod/proj.com
  10. 201
      support/prod/schema.xml
  11. 552
      support/prod/settings.py

@ -1,71 +0,0 @@
.PHONY: requirements requirements-upgrade freeze syncdb run run-public makemessages compilemessages collectstatic cloc clean user south
project_name=proj
requirements:
-@echo "### Installing requirements"
-@pip install -r requirements.txt
requirements-upgrade:
-@echo "### Upgrading requirements"
-@pip freeze | cut -d = -f 1 | xargs pip install -U
freeze:
-@echo "### Freezing python packages to requirements.txt"
-@pip freeze > requirements.txt
syncdb:
-@echo "### Creating database tables and loading fixtures"
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py syncdb --noinput
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py migrate
run:
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py runserver
run-public:
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py runserver 0.0.0.0:8000
shell:
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings python manage.py shell
solrrun:
/opt/solr/bin/solr start -p 8983
solrstop:
/opt/solr/bin/solr stop -all
makemessages:
-@ipython manage.py makemessages --all
compilemessages:
-@ipython manage.py compilemessages
collectstatic:
@ipython manage.py collectstatic
user:
-@ipython manage.py createsuperuser
# If the first argument is "south"...
ifeq (south,$(firstword $(MAKECMDGOALS)))
# use the rest as arguments for "south"
RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
# ...and turn them into do-nothing targets
$(eval $(RUN_ARGS):;@:)
endif
south:
-@python manage.py schemamigration $(RUN_ARGS) --auto
-@python manage.py migrate $(RUN_ARGS)
cloc:
-@echo "### Counting lines of code within the project"
-@echo "# Total:" ; find . -iregex '.*\.py\|.*\.js\|.*\.html\|.*\.css' -type f -exec cat {} + | wc -l
-@echo "# Python:" ; find . -name '*.py' -type f -exec cat {} + | wc -l
-@echo "# JavaScript:" ; find . -name '*.js' -type f -exec cat {} + | wc -l
-@echo "# HTML:" ; find . -name '*.html' -type f -exec cat {} + | wc -l
-@echo "# CSS:" ; find . -name '*.css' -type f -exec cat {} + | wc -l
clean:
-@echo "### Cleaning *.pyc and .DS_Store files "
-@find . -name '*.pyc' -exec rm -f {} \;
-@find . -name '.DS_Store' -exec rm -f {} \;

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

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

@ -0,0 +1,74 @@
server {
# server_name 176.121.11.165 expomap.ru www.expomap.ru dev.expomap.ru;
listen 80;
return 301 https://$host$request_uri;
}
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;
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 {
root /home/www/proj;
}
location /media {
root /home/www/proj;
}
location /templates {
root /home/www/proj/static;
}
location /subdmn {
root /home/old_files;
}
}

@ -0,0 +1,32 @@
<VirtualHost 127.0.0.1:8080>
WSGIDaemonProcess www-data display-name=%{GROUP} processes=2 threads=2
WSGIProcessGroup www-data
WSGIScriptAlias / "/home/www/proj/project.wsgi"
ServerName 176.121.11.165
<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
CustomLog /var/log/apache2/expo.access.log combined
</VirtualHost>

@ -0,0 +1,201 @@
<?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>

@ -0,0 +1,557 @@
# -*- coding: utf-8 -*-
# Django settings for proj project.
import os
import django
from django.utils.translation import ugettext_lazy as _
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']
# 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, 'collected_static')
STATICFILES_DIRS = (
(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',
# Uncomment the next line for simple clickjacking protection:
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
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/admin'),
os.path.join(SITE_ROOT, 'templates/admin/accounts'),
os.path.join(SITE_ROOT, 'templates/admin/article'),
os.path.join(SITE_ROOT, 'templates/admin/country'),
os.path.join(SITE_ROOT, 'templates/admin/city'),
os.path.join(SITE_ROOT, 'templates/admin/company'),
os.path.join(SITE_ROOT, 'templates/admin/conference'),
os.path.join(SITE_ROOT, 'templates/admin/directories'),
os.path.join(SITE_ROOT, 'templates/admin/exposition'),
os.path.join(SITE_ROOT, 'templates/admin/forms'),
os.path.join(SITE_ROOT, 'templates/admin/import templates'),
os.path.join(SITE_ROOT, 'templates/admin/news'),
os.path.join(SITE_ROOT, 'templates/admin/organiser'),
os.path.join(SITE_ROOT, 'templates/admin/place_conference'),
os.path.join(SITE_ROOT, 'templates/admin/place_exposition'),
os.path.join(SITE_ROOT, 'templates/admin/page'),
os.path.join(SITE_ROOT, 'templates/admin/photoreport'),
os.path.join(SITE_ROOT, 'templates/admin/settings'),
os.path.join(SITE_ROOT, 'templates/admin/seminar'),
os.path.join(SITE_ROOT, 'templates/admin/service'),
os.path.join(SITE_ROOT, 'templates/admin/theme'),
os.path.join(SITE_ROOT, 'templates/admin/translator'),
os.path.join(SITE_ROOT, 'templates/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.load_user',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'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.social_auth.load_extra_data',
'social.pipeline.user.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 = 'CBAQDCKIABABABABA'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SECRET = '814CDDCD3E2D2F278EF1591B'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_NAME = '128007936'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_SCOPE = ['email']
SOCIAL_AUTH_LINKEDIN_KEY = 'jt9xwquj1fkd'
SOCIAL_AUTH_LINKEDIN_SECRET = 'GvM2xQCNADaBfiMy'
SOCIAL_AUTH_LINKEDIN_SCOPE = ['email']
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'django.contrib.sitemaps',
'haystack',
#custom modules
'emencia.django.newsletter',
'accounts',
'article',
'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',
#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',
)
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']),
]
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
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 = 15
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]
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'
try:
from local import *
except ImportError, e:
pass
try:
from dev_settings 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',
]

@ -0,0 +1,84 @@
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 {
root /home/www/proj;
}
location /media {
root /home/www/proj;
}
location /templates {
root /home/www/proj/static;
}
location /subdmn {
root /home/old_files;
}
}

@ -0,0 +1,31 @@
<VirtualHost 127.0.0.1:8080>
WSGIDaemonProcess www-data display-name=%{GROUP} processes=8 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>

@ -0,0 +1,201 @@
<?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>

@ -0,0 +1,552 @@
# -*- coding: utf-8 -*-
# Django settings for proj project.
import os
import django
from django.utils.translation import ugettext_lazy as _
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']
# 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')
#STATICFILES_DIRS = (
# (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',
# Uncomment the next line for simple clickjacking protection:
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
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/admin'),
os.path.join(SITE_ROOT, 'templates/admin/accounts'),
os.path.join(SITE_ROOT, 'templates/admin/article'),
os.path.join(SITE_ROOT, 'templates/admin/country'),
os.path.join(SITE_ROOT, 'templates/admin/city'),
os.path.join(SITE_ROOT, 'templates/admin/company'),
os.path.join(SITE_ROOT, 'templates/admin/conference'),
os.path.join(SITE_ROOT, 'templates/admin/directories'),
os.path.join(SITE_ROOT, 'templates/admin/exposition'),
os.path.join(SITE_ROOT, 'templates/admin/forms'),
os.path.join(SITE_ROOT, 'templates/admin/import templates'),
os.path.join(SITE_ROOT, 'templates/admin/news'),
os.path.join(SITE_ROOT, 'templates/admin/organiser'),
os.path.join(SITE_ROOT, 'templates/admin/place_conference'),
os.path.join(SITE_ROOT, 'templates/admin/place_exposition'),
os.path.join(SITE_ROOT, 'templates/admin/page'),
os.path.join(SITE_ROOT, 'templates/admin/photoreport'),
os.path.join(SITE_ROOT, 'templates/admin/settings'),
os.path.join(SITE_ROOT, 'templates/admin/seminar'),
os.path.join(SITE_ROOT, 'templates/admin/service'),
os.path.join(SITE_ROOT, 'templates/admin/theme'),
os.path.join(SITE_ROOT, 'templates/admin/translator'),
os.path.join(SITE_ROOT, 'templates/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.load_user',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'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.social_auth.load_extra_data',
'social.pipeline.user.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 = 'CBAQDCKIABABABABA'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SECRET = '814CDDCD3E2D2F278EF1591B'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_NAME = '128007936'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_SCOPE = ['email']
SOCIAL_AUTH_LINKEDIN_KEY = 'jt9xwquj1fkd'
SOCIAL_AUTH_LINKEDIN_SECRET = 'GvM2xQCNADaBfiMy'
SOCIAL_AUTH_LINKEDIN_SCOPE = ['email']
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'django.contrib.sitemaps',
'haystack',
#custom modules
'emencia.django.newsletter',
'accounts',
'article',
'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',
#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',
)
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']),
]
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
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 = 15
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]
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'
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',
]
Loading…
Cancel
Save