def test_execute_collective(self): from augias.views import execute task = self._get_task() request = DummyRequest({'length': '15', 'executor': ''}) result = execute(task, request) self.assertEqual(result.code, 302) execution = DBSession.query(Execution).one() self.assertEqual(execution.executor, None) self.assertEqual(execution.length, 15) request.flash_success.assert_called_once_with('Task executed')
def test_execute_with_colon_duration(self): from augias.views import execute task = self._get_task() user = User(email='*****@*****.**') DBSession.add(user) request = DummyRequest({'length': '1:30:41', 'executor': user.email}) request.flash_success = create_autospec(lambda x: None) result = execute(task, request) self.assertEqual(result.code, 302) execution = DBSession.query(Execution).one() self.assertEqual(execution.length, 91)
def test_execute_without_duration(self): from augias.views import execute task = self._get_task() user = User(email='*****@*****.**') DBSession.add(user) request = DummyRequest({'length': '', 'executor': user.email}) result = execute(task, request) self.assertEqual(result.code, 302) execution = DBSession.query(Execution).one() self.assertEqual(execution.executor, user) self.assertEqual(execution.length, None) request.flash_success.assert_called_once_with('Task executed')
def main(argv=sys.argv): config_uri = argv[1] setup_logging(config_uri) settings = get_appsettings(config_uri) engine = engine_from_config(settings, 'sqlalchemy.') DBSession.configure(bind=engine) import augias.tests # for the null cache backend from augias.utils import cache cache.configure('null') with transaction.manager: user = get_user('*****@*****.**') for t in DBSession.query(Task).all(): if random.random() < 0.2: t.last_execution = None else: exec_time = datetime.datetime.now() - datetime.timedelta(days=t.periodicity * random.random() * 1.5) t.execute(user, 10, exec_time)
def test_new_task(self): from augias.views import new_task user = User(email='*****@*****.**') notebook = Notebook(users=[user], name='some notebook') DBSession.add_all([user, notebook]) request = DummyRequest(dict(name='Task name', periodicity=12)) result = new_task(notebook, request) self.assertEqual(result.code, 302) task = DBSession.query(Task).one() self.assertEqual(task.name, 'Task name') self.assertEqual(task.periodicity, 12) self.assertEqual(task.notebook, notebook) self.assertEqual(len(task.executions), 0) self.assertEqual(task.last_execution, None)
def report_for_range(notebook, begin, end): from augias.models import DBSession, Execution, Task executions = (DBSession.query(Execution) .filter(Execution.time.between(begin, end)) .join('task').filter(Task.notebook==notebook)).all() total = ExecutionTime() by_person = defaultdict(ExecutionTime) by_task = defaultdict(lambda: defaultdict(ExecutionTime)) for e in executions: total.add(e) by_person[e.executor].add(e) by_task[e.task][e.executor].add(e) by_task[e.task]['total'].add(e) def sorter(item): task, executions = item return (-executions['total'].total, task.name) by_task = sorted(by_task.items(), key=sorter) return {'total': total, 'by_task': by_task, 'by_person': by_person}
def step(context, name): notebook = DBSession.query(Notebook).one() with transaction.manager: task = Task(name=name, periodicity=42, notebook=notebook) DBSession.add(task) context.last['task'] = task