def get_enable_highlighting(user): if user.is_authenticated(): profile, profile_is_new = Profile.objects.get_or_create(user=user) user_syntax_highlighting = profile.syntax_highlighting else: user_syntax_highlighting = True siteconfig = SiteConfiguration.objects.get_current() return (siteconfig.get('diffviewer_syntax_highlighting') and user_syntax_highlighting and get_can_enable_syntax_highlighting())
def get_enable_highlighting(user): user_syntax_highlighting = True if user.is_authenticated(): try: profile = user.get_profile() user_syntax_highlighting = profile.syntax_highlighting except Profile.DoesNotExist: pass siteconfig = SiteConfiguration.objects.get_current() return (siteconfig.get('diffviewer_syntax_highlighting') and user_syntax_highlighting and get_can_enable_syntax_highlighting())
def load(self): # TODO: Move this check into a dependencies module so we can catch it # when the user starts up Review Board. can_syntax_highlight, reason = get_can_enable_syntax_highlighting() if not can_syntax_highlight: self.disabled_fields['diffviewer_syntax_highlighting'] = True self.disabled_reasons['diffviewer_syntax_highlighting'] = _(reason) self.disabled_fields['diffviewer_syntax_highlighting_threshold'] = True self.disabled_reasons['diffviewer_syntax_highlighting_threshold'] = _(reason) super(DiffSettingsForm, self).load() self.fields['include_space_patterns'].initial = \ ', '.join(self.siteconfig.get('diffviewer_include_space_patterns'))
def load(self): # TODO: Move this check into a dependencies module so we can catch it # when the user starts up Review Board. can_syntax_highlight, reason = get_can_enable_syntax_highlighting() if not can_syntax_highlight: self.disabled_fields['diffviewer_syntax_highlighting'] = True self.disabled_reasons['diffviewer_syntax_highlighting'] = _(reason) self.disabled_fields['diffviewer_syntax_highlighting_threshold'] = True self.disabled_reasons['diffviewer_syntax_highlighting_threshold'] = _(reason) self.fields['include_space_patterns'].initial = \ ', '.join(self.siteconfig.get('diffviewer_include_space_patterns')) super(DiffSettingsForm, self).load()
def check_dependencies(settings): # Some of our checks require access to django.conf.settings, so # tell Django about our settings. # from django.template.defaultfilters import striptags from djblets.util.filesystem import is_exe_in_path from reviewboard.admin import checks dependency_error = settings.dependency_error # Python 2.4 if sys.version_info[0] < 2 or \ (sys.version_info[0] == 2 and sys.version_info[1] < 4): dependency_error('Python 2.4 or newer is required.') # django-evolution try: imp.find_module('django_evolution') except ImportError: dependency_error("django_evolution is required.\n" "http://code.google.com/p/django-evolution/") # PIL try: imp.find_module('PIL') except ImportError: try: imp.find_module('Image') except ImportError: dependency_error('The Python Imaging Library (Pillow or PIL) ' 'is required.') # ReCaptcha try: # For some reason, imp.find_module('recaptcha') doesn't always work. import recaptcha except ImportError: dependency_error('The recaptcha python module is required.') # The following checks are non-fatal warnings, since these dependencies are # merely recommended, not required. def dependency_warning(string): sys.stderr.write('Warning: %s\n' % string) global warnings_found warnings_found += 1 try: imp.find_module('subvertpy') except ImportError: try: imp.find_module('pysvn') except ImportError: dependency_warning('Neither subvertpy nor pysvn found. ' 'SVN integration will not work.') try: imp.find_module('P4') subprocess.call(['p4', '-h'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) except ImportError: dependency_warning('p4python (>=07.3) not found. Perforce integration ' 'will not work.') except OSError: dependency_error('p4 command not found. Perforce integration will not ' 'work.') try: imp.find_module('mercurial') except ImportError: dependency_warning('hg not found. Mercurial integration will not ' 'work.') try: imp.find_module('bzrlib') except ImportError: dependency_warning('bzrlib not found. Bazaar integration will not ' 'work.') success, reason = checks.get_can_enable_syntax_highlighting() if not success: dependency_warning(striptags(reason)) if not is_exe_in_path('cvs'): dependency_warning('cvs binary not found. CVS integration ' 'will not work.') if not is_exe_in_path('git'): dependency_warning('git binary not found. Git integration ' 'will not work.') if not is_exe_in_path('mtn'): dependency_warning('mtn binary not found. Monotone integration ' 'will not work.') # Django will print warnings/errors for database backend modules and flup # if the configuration requires it. if warnings_found: sys.stderr.write(settings.install_help) sys.stderr.write('\n\n')
def load_site_config(): """ Loads any stored site configuration settings and populates the Django settings object with any that need to be there. """ def apply_setting(settings_key, db_key, default=None): db_value = siteconfig.settings.get(db_key) if db_value: setattr(settings, settings_key, db_value) elif default: setattr(settings, settings_key, default) try: siteconfig = SiteConfiguration.objects.get_current() except SiteConfiguration.DoesNotExist: raise ImproperlyConfigured, \ "The site configuration entry does not exist in the database. " \ "Re-run `./manage.py` syncdb to fix this." except: # We got something else. Likely, this doesn't exist yet and we're # doing a syncdb or something, so silently ignore. return # Populate defaults if they weren't already set. if not siteconfig.get_defaults(): siteconfig.add_defaults(defaults) # The default value for DEFAULT_EMAIL_FROM (webmaster@localhost) # is less than good, so use a better one if it's set to that or if # we haven't yet set this value in siteconfig. mail_default_from = \ siteconfig.settings.get('mail_default_from', global_settings.DEFAULT_FROM_EMAIL) if (not mail_default_from or mail_default_from == global_settings.DEFAULT_FROM_EMAIL): domain = siteconfig.site.domain.split(':')[0] siteconfig.set('mail_default_from', 'noreply@' + domain) # Populate the settings object with anything relevant from the siteconfig. apply_django_settings(siteconfig, settings_map) # Now for some more complicated stuff... # Do some dependency checks and disable things if we don't support them. if not get_can_enable_search()[0]: siteconfig.set('search_enable', False) if not get_can_enable_syntax_highlighting()[0]: siteconfig.set('diffviewer_syntax_highlighting', False) # Site administrator settings apply_setting("ADMINS", None, ( (siteconfig.get("site_admin_name", ""), siteconfig.get("site_admin_email", "")), )) apply_setting("MANAGERS", None, settings.ADMINS) # Explicitly base this off the MEDIA_URL apply_setting("ADMIN_MEDIA_PREFIX", None, settings.MEDIA_URL + "admin/") # Set the auth backends auth_backend_map = dict(get_registered_auth_backends()) auth_backend_id = siteconfig.settings.get("auth_backend", "builtin") builtin_backend_obj = auth_backend_map['builtin'] builtin_backend = "%s.%s" % (builtin_backend_obj.__module__, builtin_backend_obj.__name__) if auth_backend_id == "custom": custom_backends = siteconfig.settings.get("auth_custom_backends") if isinstance(custom_backends, basestring): custom_backends = (custom_backends,) elif isinstance(custom_backends, list): custom_backends = tuple(custom_backends) settings.AUTHENTICATION_BACKENDS = custom_backends if builtin_backend not in custom_backends: settings.AUTHENTICATION_BACKENDS += (builtin_backend,) elif auth_backend_id != "builtin" and auth_backend_id in auth_backend_map: backend = auth_backend_map[auth_backend_id] settings.AUTHENTICATION_BACKENDS = \ ("%s.%s" % (backend.__module__, backend.__name__), builtin_backend) else: settings.AUTHENTICATION_BACKENDS = (builtin_backend,) # Set the storage backend storage_backend = siteconfig.settings.get('storage_backend', 'builtin') if storage_backend in storage_backend_map: settings.DEFAULT_FILE_STORAGE = storage_backend_map[storage_backend] else: settings.DEFAULT_FILE_STORAGE = storage_backend_map['builtin'] # These blow up if they're not the perfectly right types settings.AWS_ACCESS_KEY_ID = str(siteconfig.get('aws_access_key_id')) settings.AWS_SECRET_ACCESS_KEY = str(siteconfig.get('aws_secret_access_key')) settings.AWS_STORAGE_BUCKET_NAME = str(siteconfig.get('aws_s3_bucket_name')) settings.AWS_CALLING_FORMAT = int(siteconfig.get('aws_calling_format'))
def load_site_config(): """ Loads any stored site configuration settings and populates the Django settings object with any that need to be there. """ def apply_setting(settings_key, db_key, default=None): db_value = siteconfig.settings.get(db_key) if db_value: setattr(settings, settings_key, db_value) elif default: setattr(settings, settings_key, default) try: siteconfig = SiteConfiguration.objects.get_current() except SiteConfiguration.DoesNotExist: raise ImproperlyConfigured, \ "The site configuration entry does not exist in the database. " \ "Re-run `./manage.py` syncdb to fix this." except: # We got something else. Likely, this doesn't exist yet and we're # doing a syncdb or something, so silently ignore. return # Populate defaults if they weren't already set. if not siteconfig.get_defaults(): siteconfig.add_defaults(defaults) # The default value for DEFAULT_EMAIL_FROM (webmaster@localhost) # is less than good, so use a better one if it's set to that or if # we haven't yet set this value in siteconfig. mail_default_from = \ siteconfig.settings.get('mail_default_from', global_settings.DEFAULT_FROM_EMAIL) if (not mail_default_from or mail_default_from == global_settings.DEFAULT_FROM_EMAIL): domain = siteconfig.site.domain.split(':')[0] siteconfig.set('mail_default_from', 'noreply@' + domain) # Populate the settings object with anything relevant from the siteconfig. apply_django_settings(siteconfig, settings_map) # Now for some more complicated stuff... # Do some dependency checks and disable things if we don't support them. if not get_can_enable_search()[0]: siteconfig.set('search_enable', False) if not get_can_enable_syntax_highlighting()[0]: siteconfig.set('diffviewer_syntax_highlighting', False) # Site administrator settings apply_setting("ADMINS", None, ((siteconfig.get( "site_admin_name", ""), siteconfig.get("site_admin_email", "")), )) apply_setting("MANAGERS", None, settings.ADMINS) # Explicitly base this off the MEDIA_URL apply_setting("ADMIN_MEDIA_PREFIX", None, settings.MEDIA_URL + "admin/") # Set the auth backends auth_backend_map = dict(get_registered_auth_backends()) auth_backend_id = siteconfig.settings.get("auth_backend", "builtin") builtin_backend_obj = auth_backend_map['builtin'] builtin_backend = "%s.%s" % (builtin_backend_obj.__module__, builtin_backend_obj.__name__) if auth_backend_id == "custom": custom_backends = siteconfig.settings.get("auth_custom_backends") if isinstance(custom_backends, basestring): custom_backends = (custom_backends, ) elif isinstance(custom_backends, list): custom_backends = tuple(custom_backends) settings.AUTHENTICATION_BACKENDS = custom_backends if builtin_backend not in custom_backends: settings.AUTHENTICATION_BACKENDS += (builtin_backend, ) elif auth_backend_id != "builtin" and auth_backend_id in auth_backend_map: backend = auth_backend_map[auth_backend_id] settings.AUTHENTICATION_BACKENDS = \ ("%s.%s" % (backend.__module__, backend.__name__), builtin_backend) else: settings.AUTHENTICATION_BACKENDS = (builtin_backend, ) # Set the storage backend storage_backend = siteconfig.settings.get('storage_backend', 'builtin') if storage_backend in storage_backend_map: settings.DEFAULT_FILE_STORAGE = storage_backend_map[storage_backend] else: settings.DEFAULT_FILE_STORAGE = storage_backend_map['builtin'] # These blow up if they're not the perfectly right types settings.AWS_ACCESS_KEY_ID = str(siteconfig.get('aws_access_key_id')) settings.AWS_SECRET_ACCESS_KEY = str( siteconfig.get('aws_secret_access_key')) settings.AWS_STORAGE_BUCKET_NAME = str( siteconfig.get('aws_s3_bucket_name')) try: settings.AWS_CALLING_FORMAT = int(siteconfig.get('aws_calling_format')) except ValueError: settings.AWS_CALLING_FORMAT = 0
def load_site_config(): """ Loads any stored site configuration settings and populates the Django settings object with any that need to be there. """ def apply_setting(settings_key, db_key, default=None): db_value = siteconfig.settings.get(db_key) if db_value: setattr(settings, settings_key, db_value) elif default: setattr(settings, settings_key, default) def update_haystack_settings(): """Updates the haystack settings with settings in site config.""" apply_setting("HAYSTACK_CONNECTIONS", None, { 'default': { 'ENGINE': settings.HAYSTACK_CONNECTIONS['default']['ENGINE'], 'PATH': (siteconfig.get('search_index_file') or defaults['search_index_file']), }, }) # Re-initialize Haystack's connection information to use the updated # settings. connections.connections_info = settings.HAYSTACK_CONNECTIONS connections._connections = {} try: siteconfig = SiteConfiguration.objects.get_current() except SiteConfiguration.DoesNotExist: raise ImproperlyConfigured( "The site configuration entry does not exist in the database. " "Re-run `./manage.py` syncdb to fix this.") except: # We got something else. Likely, this doesn't exist yet and we're # doing a syncdb or something, so silently ignore. return # Populate defaults if they weren't already set. if not siteconfig.get_defaults(): siteconfig.add_defaults(defaults) # The default value for DEFAULT_EMAIL_FROM (webmaster@localhost) # is less than good, so use a better one if it's set to that or if # we haven't yet set this value in siteconfig. mail_default_from = \ siteconfig.settings.get('mail_default_from', global_settings.DEFAULT_FROM_EMAIL) if (not mail_default_from or mail_default_from == global_settings.DEFAULT_FROM_EMAIL): domain = siteconfig.site.domain.split(':')[0] siteconfig.set('mail_default_from', 'noreply@' + domain) # STATIC_* and MEDIA_* must be different paths, and differ in meaning. # If site_static_* is empty or equal to media_static_*, we're probably # migrating from an earlier Review Board install. site_static_root = siteconfig.settings.get('site_static_root', '') site_media_root = siteconfig.settings.get('site_media_root') if site_static_root == '' or site_static_root == site_media_root: siteconfig.set('site_static_root', settings.STATIC_ROOT) site_static_url = siteconfig.settings.get('site_static_url', '') site_media_url = siteconfig.settings.get('site_media_url') if site_static_url == '' or site_static_url == site_media_url: siteconfig.set('site_static_url', settings.STATIC_URL) # Populate the settings object with anything relevant from the siteconfig. apply_django_settings(siteconfig, settings_map) # Now for some more complicated stuff... update_haystack_settings() # Do some dependency checks and disable things if we don't support them. if not get_can_enable_syntax_highlighting()[0]: siteconfig.set('diffviewer_syntax_highlighting', False) # Site administrator settings apply_setting("ADMINS", None, ( (siteconfig.get("site_admin_name", ""), siteconfig.get("site_admin_email", "")), )) apply_setting("MANAGERS", None, settings.ADMINS) # Explicitly base this off the STATIC_URL apply_setting("ADMIN_MEDIA_PREFIX", None, settings.STATIC_URL + "admin/") # Set the auth backends auth_backend_id = siteconfig.settings.get("auth_backend", "builtin") builtin_backend_obj = get_registered_auth_backend('builtin') builtin_backend = "%s.%s" % (builtin_backend_obj.__module__, builtin_backend_obj.__name__) if auth_backend_id == "custom": custom_backends = siteconfig.settings.get("auth_custom_backends") if isinstance(custom_backends, six.string_types): custom_backends = (custom_backends,) elif isinstance(custom_backends, list): custom_backends = tuple(custom_backends) settings.AUTHENTICATION_BACKENDS = custom_backends if builtin_backend not in custom_backends: settings.AUTHENTICATION_BACKENDS += (builtin_backend,) else: backend = get_registered_auth_backend(auth_backend_id) if backend and backend is not builtin_backend_obj: settings.AUTHENTICATION_BACKENDS = \ ("%s.%s" % (backend.__module__, backend.__name__), builtin_backend) else: settings.AUTHENTICATION_BACKENDS = (builtin_backend,) # Set the storage backend storage_backend = siteconfig.settings.get('storage_backend', 'builtin') if storage_backend in storage_backend_map: settings.DEFAULT_FILE_STORAGE = storage_backend_map[storage_backend] else: settings.DEFAULT_FILE_STORAGE = storage_backend_map['builtin'] # These blow up if they're not the perfectly right types settings.AWS_QUERYSTRING_AUTH = siteconfig.get('aws_querystring_auth') settings.AWS_ACCESS_KEY_ID = six.text_type(siteconfig.get('aws_access_key_id')) settings.AWS_SECRET_ACCESS_KEY = six.text_type(siteconfig.get('aws_secret_access_key')) settings.AWS_STORAGE_BUCKET_NAME = six.text_type(siteconfig.get('aws_s3_bucket_name')) try: settings.AWS_CALLING_FORMAT = int(siteconfig.get('aws_calling_format')) except ValueError: settings.AWS_CALLING_FORMAT = 0 if siteconfig.settings.get('site_domain_method', 'http') == 'https': os.environ['HTTPS'] = 'on' else: os.environ['HTTPS'] = 'off' site_settings_loaded.send(sender=None) return siteconfig
def load_site_config(): """ Loads any stored site configuration settings and populates the Django settings object with any that need to be there. """ def apply_setting(settings_key, db_key, default=None): db_value = siteconfig.settings.get(db_key) if db_value: setattr(settings, settings_key, db_value) elif default: setattr(settings, settings_key, default) try: siteconfig = SiteConfiguration.objects.get_current() except SiteConfiguration.DoesNotExist: raise ImproperlyConfigured, \ "The site configuration entry does not exist in the database. " \ "Re-run `./manage.py` syncdb to fix this." except: # We got something else. Likely, this doesn't exist yet and we're # doing a syncdb or something, so silently ignore. return # Populate defaults if they weren't already set. if not siteconfig.get_defaults(): siteconfig.add_defaults(defaults) # Populate the settings object with anything relevant from the siteconfig. apply_django_settings(siteconfig, settings_map) # Now for some more complicated stuff... # Do some dependency checks and disable things if we don't support them. if not get_can_enable_search()[0]: siteconfig.set('search_enable', False) if not get_can_enable_syntax_highlighting()[0]: siteconfig.set('diffviewer_syntax_highlighting', False) # Site administrator settings apply_setting("ADMINS", None, ( (siteconfig.get("site_admin_name", ""), siteconfig.get("site_admin_email", "")), )) apply_setting("MANAGERS", None, settings.ADMINS) # Explicitly base this off the MEDIA_URL apply_setting("ADMIN_MEDIA_PREFIX", None, settings.MEDIA_URL + "admin/") # Set the auth backends auth_backend = siteconfig.settings.get("auth_backend", "builtin") builtin_backend = auth_backend_map['builtin'] if auth_backend == "custom": custom_backends = siteconfig.settings.get("auth_custom_backends") if isinstance(custom_backends, basestring): custom_backends = (custom_backends,) elif isinstance(custom_backends, list): custom_backends = tuple(custom_backends) settings.AUTHENTICATION_BACKENDS = custom_backends if builtin_backend not in custom_backends: settings.AUTHENTICATION_BACKENDS += (builtin_backend,) elif auth_backend != "builtin" and auth_backend in auth_backend_map: settings.AUTHENTICATION_BACKENDS = \ (auth_backend_map[auth_backend], builtin_backend) else: settings.AUTHENTICATION_BACKENDS = (builtin_backend,)
def load_site_config(): """ Loads any stored site configuration settings and populates the Django settings object with any that need to be there. """ def apply_setting(settings_key, db_key, default=None): db_value = siteconfig.settings.get(db_key) if db_value: setattr(settings, settings_key, db_value) elif default: setattr(settings, settings_key, default) def update_haystack_settings(): """Updates the haystack settings with settings in site config.""" apply_setting("HAYSTACK_CONNECTIONS", None, { 'default': { 'ENGINE': settings.HAYSTACK_CONNECTIONS['default']['ENGINE'], 'PATH': (siteconfig.get('search_index_file') or defaults['search_index_file']), }, }) # Re-initialize Haystack's connection information to use the updated # settings. connections.connections_info = settings.HAYSTACK_CONNECTIONS connections._connections = {} # If siteconfig needs to be saved back to the DB, set dirty=true dirty = False try: siteconfig = SiteConfiguration.objects.get_current() except SiteConfiguration.DoesNotExist: raise ImproperlyConfigured( "The site configuration entry does not exist in the database. " "Re-run `./manage.py` syncdb to fix this.") except Exception as e: # We got something else. Likely, this doesn't exist yet and we're # doing a syncdb or something, so silently ignore. logging.error('Could not load siteconfig: %s' % e) return # Populate defaults if they weren't already set. if not siteconfig.get_defaults(): siteconfig.add_defaults(defaults) # The default value for DEFAULT_EMAIL_FROM (webmaster@localhost) # is less than good, so use a better one if it's set to that or if # we haven't yet set this value in siteconfig. mail_default_from = \ siteconfig.settings.get('mail_default_from', global_settings.DEFAULT_FROM_EMAIL) if (not mail_default_from or mail_default_from == global_settings.DEFAULT_FROM_EMAIL): domain = siteconfig.site.domain.split(':')[0] siteconfig.set('mail_default_from', 'noreply@' + domain) # STATIC_* and MEDIA_* must be different paths, and differ in meaning. # If site_static_* is empty or equal to media_static_*, we're probably # migrating from an earlier Review Board install. site_static_root = siteconfig.settings.get('site_static_root', '') site_media_root = siteconfig.settings.get('site_media_root') if site_static_root == '' or site_static_root == site_media_root: siteconfig.set('site_static_root', settings.STATIC_ROOT) site_static_url = siteconfig.settings.get('site_static_url', '') site_media_url = siteconfig.settings.get('site_media_url') if site_static_url == '' or site_static_url == site_media_url: siteconfig.set('site_static_url', settings.STATIC_URL) # Populate the settings object with anything relevant from the siteconfig. apply_django_settings(siteconfig, settings_map) # Now for some more complicated stuff... update_haystack_settings() # Do some dependency checks and disable things if we don't support them. if not get_can_enable_syntax_highlighting()[0]: siteconfig.set('diffviewer_syntax_highlighting', False) # Site administrator settings apply_setting("ADMINS", None, ( (siteconfig.get("site_admin_name", ""), siteconfig.get("site_admin_email", "")), )) apply_setting("MANAGERS", None, settings.ADMINS) # Explicitly base this off the STATIC_URL apply_setting("ADMIN_MEDIA_PREFIX", None, settings.STATIC_URL + "admin/") # Set the auth backends auth_backend_id = siteconfig.settings.get("auth_backend", "builtin") builtin_backend_obj = get_registered_auth_backend('builtin') builtin_backend = "%s.%s" % (builtin_backend_obj.__module__, builtin_backend_obj.__name__) if auth_backend_id == "custom": custom_backends = siteconfig.settings.get("auth_custom_backends") if isinstance(custom_backends, six.string_types): custom_backends = (custom_backends,) elif isinstance(custom_backends, list): custom_backends = tuple(custom_backends) settings.AUTHENTICATION_BACKENDS = custom_backends if builtin_backend not in custom_backends: settings.AUTHENTICATION_BACKENDS += (builtin_backend,) else: backend = get_registered_auth_backend(auth_backend_id) if backend and backend is not builtin_backend_obj: settings.AUTHENTICATION_BACKENDS = \ ("%s.%s" % (backend.__module__, backend.__name__), builtin_backend) else: settings.AUTHENTICATION_BACKENDS = (builtin_backend,) # If we're upgrading from a 1.x LDAP configuration, populate # ldap_uid and clear ldap_uid_mask if auth_backend_id == "ldap": if not hasattr(settings, 'LDAP_UID'): if hasattr(settings, 'LDAP_UID_MASK'): # Get the username attribute from the old UID mask # LDAP attributes can contain only alphanumeric # characters and the hyphen and must lead with an # alphabetic character. This is not dependent upon # locale. m = re.search("([a-zA-Z][a-zA-Z0-9-]+)=%s", settings.LDAP_UID_MASK) if m: # Assign LDAP_UID the value of the retrieved attribute settings.LDAP_UID = m.group(1) else: # Couldn't match the old value? # This should be impossible, but in this case, let's # just guess a sane default and hope for the best. settings.LDAP_UID = 'uid' else: # Neither the old nor new value? # This should be impossible, but in this case, let's just # guess a sane default and hope for the best. settings.LDAP_UID = 'uid' # Remove the LDAP_UID_MASK value settings.LDAP_UID_MASK = None siteconfig.set('auth_ldap_uid', settings.LDAP_UID) siteconfig.set('auth_ldap_uid_mask', settings.LDAP_UID_MASK) # Set the dirty flag so we save this back dirty = True # Set the storage backend storage_backend = siteconfig.settings.get('storage_backend', 'builtin') if storage_backend in storage_backend_map: settings.DEFAULT_FILE_STORAGE = storage_backend_map[storage_backend] else: settings.DEFAULT_FILE_STORAGE = storage_backend_map['builtin'] # These blow up if they're not the perfectly right types settings.AWS_QUERYSTRING_AUTH = siteconfig.get('aws_querystring_auth') settings.AWS_ACCESS_KEY_ID = six.text_type( siteconfig.get('aws_access_key_id')) settings.AWS_SECRET_ACCESS_KEY = six.text_type( siteconfig.get('aws_secret_access_key')) settings.AWS_STORAGE_BUCKET_NAME = six.text_type( siteconfig.get('aws_s3_bucket_name')) try: settings.AWS_CALLING_FORMAT = int(siteconfig.get('aws_calling_format')) except ValueError: settings.AWS_CALLING_FORMAT = 0 if siteconfig.settings.get('site_domain_method', 'http') == 'https': os.environ['HTTPS'] = 'on' else: os.environ['HTTPS'] = 'off' # Save back changes if they have been made if dirty: siteconfig.save() site_settings_loaded.send(sender=None) return siteconfig
def check_dependencies(settings): # Some of our checks require access to django.conf.settings, so # tell Django about our settings. # from django.template.defaultfilters import striptags from djblets.util.filesystem import is_exe_in_path from reviewboard.admin import checks dependency_error = settings.dependency_error # Python 2.4 if sys.version_info[0] < 2 or \ (sys.version_info[0] == 2 and sys.version_info[1] < 4): dependency_error('Python 2.4 or newer is required.') # django-evolution try: imp.find_module('django_evolution') except ImportError: dependency_error("django_evolution is required.\n" "http://code.google.com/p/django-evolution/") # PIL try: imp.find_module('PIL') except ImportError: try: imp.find_module('Image') except ImportError: dependency_error('The Python Imaging Library (Pillow or PIL) ' 'is required.') # ReCaptcha try: import recaptcha except ImportError: dependency_error('The recaptcha python module is required.') # The following checks are non-fatal warnings, since these dependencies are # merely recommended, not required. def dependency_warning(string): sys.stderr.write('Warning: %s\n' % string) global warnings_found warnings_found += 1 try: imp.find_module('subvertpy') except ImportError: try: imp.find_module('pysvn') except ImportError: dependency_warning('Neither subvertpy nor pysvn found. ' 'SVN integration will not work.') try: imp.find_module('P4') subprocess.call(['p4', '-h'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) except ImportError: dependency_warning('p4python (>=07.3) not found. Perforce integration ' 'will not work.') except OSError: dependency_error('p4 command not found. Perforce integration will not ' 'work.') try: imp.find_module('mercurial') except ImportError: dependency_warning('hg not found. Mercurial integration will not ' 'work.') try: imp.find_module('bzrlib') except ImportError: dependency_warning('bzrlib not found. Bazaar integration will not ' 'work.') success, reason = checks.get_can_enable_syntax_highlighting() if not success: dependency_warning(striptags(reason)) if not is_exe_in_path('cvs'): dependency_warning('cvs binary not found. CVS integration ' 'will not work.') if not is_exe_in_path('git'): dependency_warning('git binary not found. Git integration ' 'will not work.') if not is_exe_in_path('mtn'): dependency_warning('mtn binary not found. Monotone integration ' 'will not work.') # Django will print warnings/errors for database backend modules and flup # if the configuration requires it. if warnings_found: sys.stderr.write(settings.install_help) sys.stderr.write('\n\n')
def load_site_config(): """ Loads any stored site configuration settings and populates the Django settings object with any that need to be there. """ def apply_setting(settings_key, db_key, default=None): db_value = siteconfig.settings.get(db_key) if db_value: setattr(settings, settings_key, db_value) elif default: setattr(settings, settings_key, default) try: siteconfig = SiteConfiguration.objects.get_current() except SiteConfiguration.DoesNotExist: raise ImproperlyConfigured( "The site configuration entry does not exist in the database. " "Re-run `./manage.py` syncdb to fix this." ) except: # We got something else. Likely, this doesn't exist yet and we're # doing a syncdb or something, so silently ignore. return # Populate defaults if they weren't already set. if not siteconfig.get_defaults(): siteconfig.add_defaults(defaults) # The default value for DEFAULT_EMAIL_FROM (webmaster@localhost) # is less than good, so use a better one if it's set to that or if # we haven't yet set this value in siteconfig. mail_default_from = siteconfig.settings.get("mail_default_from", global_settings.DEFAULT_FROM_EMAIL) if not mail_default_from or mail_default_from == global_settings.DEFAULT_FROM_EMAIL: domain = siteconfig.site.domain.split(":")[0] siteconfig.set("mail_default_from", "noreply@" + domain) # STATIC_* and MEDIA_* must be different paths, and differ in meaning. # If site_static_* is empty or equal to media_static_*, we're probably # migrating from an earlier Review Board install. site_static_root = siteconfig.settings.get("site_static_root", "") site_media_root = siteconfig.settings.get("site_media_root") if site_static_root == "" or site_static_root == site_media_root: siteconfig.set("site_static_root", settings.STATIC_ROOT) site_static_url = siteconfig.settings.get("site_static_url", "") site_media_url = siteconfig.settings.get("site_media_url") if site_static_url == "" or site_static_url == site_media_url: siteconfig.set("site_static_url", settings.STATIC_URL) # Populate the settings object with anything relevant from the siteconfig. apply_django_settings(siteconfig, settings_map) # Now for some more complicated stuff... # Do some dependency checks and disable things if we don't support them. if not get_can_enable_search()[0]: siteconfig.set("search_enable", False) if not get_can_enable_syntax_highlighting()[0]: siteconfig.set("diffviewer_syntax_highlighting", False) # Site administrator settings apply_setting("ADMINS", None, ((siteconfig.get("site_admin_name", ""), siteconfig.get("site_admin_email", "")),)) apply_setting("MANAGERS", None, settings.ADMINS) # Explicitly base this off the STATIC_URL apply_setting("ADMIN_MEDIA_PREFIX", None, settings.STATIC_URL + "admin/") # Set the auth backends auth_backend_map = dict(get_registered_auth_backends()) auth_backend_id = siteconfig.settings.get("auth_backend", "builtin") builtin_backend_obj = auth_backend_map["builtin"] builtin_backend = "%s.%s" % (builtin_backend_obj.__module__, builtin_backend_obj.__name__) if auth_backend_id == "custom": custom_backends = siteconfig.settings.get("auth_custom_backends") if isinstance(custom_backends, six.string_types): custom_backends = (custom_backends,) elif isinstance(custom_backends, list): custom_backends = tuple(custom_backends) settings.AUTHENTICATION_BACKENDS = custom_backends if builtin_backend not in custom_backends: settings.AUTHENTICATION_BACKENDS += (builtin_backend,) elif auth_backend_id != "builtin" and auth_backend_id in auth_backend_map: backend = auth_backend_map[auth_backend_id] settings.AUTHENTICATION_BACKENDS = ("%s.%s" % (backend.__module__, backend.__name__), builtin_backend) else: settings.AUTHENTICATION_BACKENDS = (builtin_backend,) # Set the storage backend storage_backend = siteconfig.settings.get("storage_backend", "builtin") if storage_backend in storage_backend_map: settings.DEFAULT_FILE_STORAGE = storage_backend_map[storage_backend] else: settings.DEFAULT_FILE_STORAGE = storage_backend_map["builtin"] # These blow up if they're not the perfectly right types settings.AWS_QUERYSTRING_AUTH = siteconfig.get("aws_querystring_auth") settings.AWS_ACCESS_KEY_ID = six.text_type(siteconfig.get("aws_access_key_id")) settings.AWS_SECRET_ACCESS_KEY = six.text_type(siteconfig.get("aws_secret_access_key")) settings.AWS_STORAGE_BUCKET_NAME = six.text_type(siteconfig.get("aws_s3_bucket_name")) try: settings.AWS_CALLING_FORMAT = int(siteconfig.get("aws_calling_format")) except ValueError: settings.AWS_CALLING_FORMAT = 0