def loaddata(args, options): filepath, = args deserialize = optional_import('django.core.serializers').deserialize with open(filepath, 'r') as handle: models_by_class = collections.defaultdict(list) related_models = list() for model in deserialize('json', handle): model_class = model.object.__class__ models_by_class[model_class].append(model.object) for field, values in model.m2m_data.items(): if values: related_models.append((model.object, field, values)) from django.db import transaction waiting_room = WaitingRoom() with transaction.atomic(): for model_class, models_list in models_by_class.items(): dependencies = Dependencies.from_model(model_class) debug('Needs %s for %s', dependencies, model_class.__name__) if model_class in dependencies: debug('Circual dependencies for %s, proceed with caution', model_class) proceed = Proceed(model_class, models_list) waiting_room.enter(dependencies, proceed) waiting_room.empty() if options.force: for proceed, deps in list(waiting_room): for dep in deps: def noop(): debug('== Force resolve for %s ==', proceed) return dep waiting_room.enter(Dependencies.none(), noop) if waiting_room: raise RuntimeError('Still some people in the waiting room:\n{}'.format( waiting_room)) for model, field, values in related_models: debug('Adding %s to %s(%s)', values, model, field) getattr(model, field).add(*values)
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import os from paver.easy import task, call_task, path, no_help, needs, debug, info from paver.setuputils import setup, _get_distribution from sett import ROOT, optional_import version = optional_import('packaging.version') @task @no_help def setup_options(options): try: from setup import build_info except ImportError: sys.path.append(ROOT) from setup import build_info setup(**build_info) @task def clean(): """Clean the workspace""" path('dist').rmtree()
from __future__ import absolute_import import sys import os import re import itertools import subprocess import collections from paver.easy import (task, consume_nargs, consume_args, might_call, call_task, sh, no_help, info, needs, debug, path) from paver.deps.six import text_type from sett import which, DeployContext, defaults, task_alternative, optional_import django_module = optional_import('django') @task def clean_migrations(env): """ Merge uncommitted migrations """ migration_re = re.compile('^\d{4}_[a-z0-9_]+\.py$') git_status = subprocess.Popen([ which.git, 'ls-files', '--others', '--exclude-standard', ], stdout=subprocess.PIPE, ) encoding = sys.getfilesystemencoding() matches = collections.defaultdict(list)
# -*- coding: utf-8 -*- import sys from xml.etree import ElementTree as ET from paver.easy import task, info, path, debug from paver.deps.six import text_type from sett import which, ROOT, defaults, optional_import from sett.daemon import Daemon, daemon_task from sett.paths import LOGS from sett.pip import VENV_DIR from sett.deploy_context import DeployContext yaml = optional_import('yaml') UWSGI_PATH = ROOT.joinpath('var') CONFIG_ROOT = ROOT.joinpath('parts/uwsgi/') @DeployContext.register_default def uwsgi_context(): return { 'uwsgi': { 'config': get_uwsgi_output().config_path, }, 'ctl': '{} daemon'.format(path(sys.argv[0]).abspath()), }
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import time import json import optparse from paver.easy import task, cmdopts, consume_nargs from sett import defaults, __version__ as sett_version, optional_import requests = optional_import('requests') @task @cmdopts([ optparse.make_option( '--remote', default='', ), optparse.make_option( '-m', '--method', default='POST', ), optparse.make_option( '-s', '--stream', action='store_true', default=False, ),
# -*- coding: utf-8 -*- import os from sett import optional_import from paver.easy import task, consume_nargs, info docker_compose = optional_import('compose.cli.command', 'docker-compose') class DockerCompose(object): """ A docker compose context manager. It can start a set of containers described by a docker-compose.yml, stop and remove them after. >>> with DockerCompose() as infra: ... infra.ip('db') 172.16.0.2 """ def __init__(self, basedir='.', name=None, keep=False, filename='docker-compose.yml'): self.project = docker_compose.get_project( base_dir=basedir, config_path=[filename], project_name=name, ) self.keep = keep def __repr__(self): return '<{} {}>'.format(self.__class__.__name__, self.project.name)
# -*- coding: utf-8 -*- import time import os.path import collections import importlib import traceback import threading from sett import optional_import, defaults, ROOT from sett.utils.dispatch import Dispatcher from paver.easy import task, info, debug, consume_args, path, error from paver.deps.six import string_types, moves observers = optional_import('watchdog.observers') events = optional_import('watchdog.events') libsass = optional_import('sass', 'libsass') # Time to wait for additional events in seconds DEBOUNCE_WAIT = 0.250 class SassDispatcher(Dispatcher): def __init__(self): self._sass = Sass.default() @Dispatcher.auto @Dispatcher.on('watch', -1) def compile(self): """Launches the compilation of all sass files"""