# -*- 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'] # 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', # Uncomment the next line for simple clickjacking protection: 'django.middleware.clickjacking.XFrameOptionsMiddleware', '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 = # SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH = # SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH = # 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', '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' ) 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 = '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.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', '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', ) 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 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 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', } 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 = 'mail' 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': { 'mail': { 'handlers': ['file'], 'propagate': True, 'level': 'DEBUG', }, } }