def prepare_profiles(): """ Prepares a dict 'app.model' -> profile, for use in model_profile() """ # NOTE: this is a compatibility for old style config, # TODO: remove in cacheops 3.0 if hasattr(settings, 'CACHEOPS_PROFILES'): profiles.update(settings.CACHEOPS_PROFILES) if hasattr(settings, 'CACHEOPS_DEFAULTS'): profile_defaults.update(settings.CACHEOPS_DEFAULTS) model_profiles = {} ops = getattr(settings, 'CACHEOPS', {}) for app_model, profile in ops.items(): # NOTE: this is a compatibility for old style config, # TODO: remove in cacheops 3.0 if is_tuple(profile): profile_name, timeout = profile[:2] try: model_profiles[app_model] = mp = deepcopy(profiles[profile_name]) except KeyError: raise ImproperlyConfigured('Unknown cacheops profile "%s"' % profile_name) if len(profile) > 2: mp.update(profile[2]) mp['timeout'] = timeout mp['ops'] = set(mp['ops']) else: model_profiles[app_model] = merge(profile_defaults, profile) return model_profiles
def setup(cmd_args, suppress_output=False): """ Call a setup.py command or list of commands >>> result = setup('--name', suppress_output=True) >>> result.exitval 0 >>> result = setup('notreal') >>> result.exitval 1 """ if not funcy.is_list(cmd_args) and not funcy.is_tuple(cmd_args): cmd_args = shlex.split(cmd_args) cmd_args = [sys.executable, 'setup.py'] + [x for x in cmd_args] return call(cmd_args, suppress_output=suppress_output)
def prepare_profiles(): """ Prepares a dict 'app.model' -> profile, for use in model_profile() """ # NOTE: this is a compatibility for old style config, # TODO: remove in cacheops 3.0 if hasattr(settings, 'CACHEOPS_PROFILES'): profiles.update(settings.CACHEOPS_PROFILES) if hasattr(settings, 'CACHEOPS_DEFAULTS'): profile_defaults.update(settings.CACHEOPS_DEFAULTS) model_profiles = {} ops = getattr(settings, 'CACHEOPS', {}) for app_model, profile in ops.items(): if profile is None: model_profiles[app_model] = None continue # NOTE: this is a compatibility for old style config, # TODO: remove in cacheops 3.0 if is_tuple(profile): profile_name, timeout = profile[:2] try: model_profiles[app_model] = mp = deepcopy( profiles[profile_name]) except KeyError: raise ImproperlyConfigured('Unknown cacheops profile "%s"' % profile_name) if len(profile) > 2: mp.update(profile[2]) mp['timeout'] = timeout mp['ops'] = set(mp['ops']) else: model_profiles[app_model] = mp = merge(profile_defaults, profile) if mp['ops'] == 'all': mp['ops'] = ALL_OPS # People will do that anyway :) if isinstance(mp['ops'], six.string_types): mp['ops'] = [mp['ops']] mp['ops'] = set(mp['ops']) if 'timeout' not in mp: raise ImproperlyConfigured( 'You must specify "timeout" option in "%s" CACHEOPS profile' % app_model) return model_profiles
def prepare_profiles(): """ Prepares a dict 'app.model' -> profile, for use in model_profile() """ # NOTE: this is a compatibility for old style config, # TODO: remove in cacheops 3.0 if hasattr(settings, 'CACHEOPS_PROFILES'): profiles.update(settings.CACHEOPS_PROFILES) if hasattr(settings, 'CACHEOPS_DEFAULTS'): profile_defaults.update(settings.CACHEOPS_DEFAULTS) model_profiles = {} ops = getattr(settings, 'CACHEOPS', {}) for app_model, profile in ops.items(): if profile is None: model_profiles[app_model] = None continue # NOTE: this is a compatibility for old style config, # TODO: remove in cacheops 3.0 if is_tuple(profile): profile_name, timeout = profile[:2] try: model_profiles[app_model] = mp = deepcopy(profiles[profile_name]) except KeyError: raise ImproperlyConfigured('Unknown cacheops profile "%s"' % profile_name) if len(profile) > 2: mp.update(profile[2]) mp['timeout'] = timeout mp['ops'] = set(mp['ops']) else: model_profiles[app_model] = mp = merge(profile_defaults, profile) if mp['ops'] == 'all': mp['ops'] = ALL_OPS # People will do that anyway :) if isinstance(mp['ops'], six.string_types): mp['ops'] = [mp['ops']] mp['ops'] = set(mp['ops']) if 'timeout' not in mp: raise ImproperlyConfigured( 'You must specify "timeout" option in "%s" CACHEOPS profile' % app_model) return model_profiles
def call(cmd_args, suppress_output=False): """ Call an arbitary command and return the exit value, stdout, and stderr as a tuple Command can be passed in as either a string or iterable >>> result = call('hatchery', suppress_output=True) >>> result.exitval 0 >>> result = call(['hatchery', 'notreal']) >>> result.exitval 1 """ if not funcy.is_list(cmd_args) and not funcy.is_tuple(cmd_args): cmd_args = shlex.split(cmd_args) logger.info('executing `{}`'.format(' '.join(cmd_args))) call_request = CallRequest(cmd_args, suppress_output=suppress_output) call_result = call_request.run() if call_result.exitval: logger.error('`{}` returned error code {}'.format(' '.join(cmd_args), call_result.exitval)) return call_result