From 976ef6c70265da4641483f5b71031ae25dc87e84 Mon Sep 17 00:00:00 2001 From: Angus Salkeld Date: Thu, 12 Jun 2014 09:39:32 +1000 Subject: [PATCH] Fix Hacking rule H302 (import only modules) Change-Id: Id6407aac9e5a4bdbd730576433032d43dc89f934 --- mistral/actions/std_actions.py | 4 ++-- .../api/controllers/v1/workbook_definition.py | 12 +++++------ mistral/api/hooks/engine.py | 4 ++-- mistral/context.py | 4 ++-- mistral/services/scheduler.py | 14 ++++++------- mistral/tests/api/base.py | 6 +++--- .../api/v1/controllers/test_executions.py | 4 ++-- .../unit/actions/test_std_email_action.py | 20 +++++++++---------- mistral/tests/unit/test_scheduler.py | 18 ++++++++--------- tox.ini | 2 +- 10 files changed, 41 insertions(+), 47 deletions(-) diff --git a/mistral/actions/std_actions.py b/mistral/actions/std_actions.py index 6f640c0bd..f11e7ebed 100644 --- a/mistral/actions/std_actions.py +++ b/mistral/actions/std_actions.py @@ -16,7 +16,7 @@ import json import smtplib -from email.mime.text import MIMEText +from email.mime import text import requests @@ -209,7 +209,7 @@ class SendEmailAction(base.Action): self.smtp_server, self.body[:128])) # TODO(dzimine): handle utf-8, http://stackoverflow.com/a/14506784 - message = MIMEText(self.body) + message = text.MIMEText(self.body) message['Subject'] = self.subject message['From'] = self.sender message['To'] = self.to diff --git a/mistral/api/controllers/v1/workbook_definition.py b/mistral/api/controllers/v1/workbook_definition.py index ffae45844..d296d41a4 100644 --- a/mistral/api/controllers/v1/workbook_definition.py +++ b/mistral/api/controllers/v1/workbook_definition.py @@ -14,9 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from pecan import rest -from pecan import expose -from pecan import request +import pecan from mistral.openstack.common import log as logging from mistral.db import api as db_api @@ -27,9 +25,9 @@ from mistral.utils import rest_utils LOG = logging.getLogger(__name__) -class WorkbookDefinitionController(rest.RestController): +class WorkbookDefinitionController(pecan.rest.RestController): @rest_utils.wrap_pecan_controller_exception - @expose() + @pecan.expose() def get(self, workbook_name): """Return the workbook definition.""" LOG.debug("Fetch workbook definition [workbook_name=%s]" % @@ -37,10 +35,10 @@ class WorkbookDefinitionController(rest.RestController): return db_api.workbook_definition_get(workbook_name) @rest_utils.wrap_pecan_controller_exception - @expose(content_type="text/plain") + @pecan.expose(content_type="text/plain") def put(self, workbook_name): """Update the workbook's definition.""" - text = request.text + text = pecan.request.text LOG.debug("Update workbook definition [workbook_name=%s, text=%s]" % (workbook_name, text)) diff --git a/mistral/api/hooks/engine.py b/mistral/api/hooks/engine.py index 8605313a1..c4b4e4bb4 100644 --- a/mistral/api/hooks/engine.py +++ b/mistral/api/hooks/engine.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from pecan.hooks import PecanHook +from pecan import hooks from mistral import engine from mistral.openstack.common import log as logging @@ -21,7 +21,7 @@ from mistral.openstack.common import log as logging LOG = logging.getLogger(__name__) -class EngineHook(PecanHook): +class EngineHook(hooks.PecanHook): def __init__(self, transport=None): self.transport = engine.get_transport(transport) diff --git a/mistral/context.py b/mistral/context.py index 7cbfb9e2a..77e635b52 100644 --- a/mistral/context.py +++ b/mistral/context.py @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from pecan.hooks import PecanHook +from pecan import hooks import eventlet @@ -124,7 +124,7 @@ def context_from_headers(headers): ) -class ContextHook(PecanHook): +class ContextHook(hooks.PecanHook): def before(self, state): request_ctx = context_from_headers(state.request.headers).to_dict() set_ctx(request_ctx) diff --git a/mistral/services/scheduler.py b/mistral/services/scheduler.py index c773b1fd1..4e3af82ca 100644 --- a/mistral/services/scheduler.py +++ b/mistral/services/scheduler.py @@ -15,14 +15,14 @@ # limitations under the License. from croniter import croniter -from datetime import datetime -from datetime import timedelta +import datetime from mistral.db import api as db_api from mistral import dsl_parser as parser def get_next_triggers(): - return db_api.get_next_triggers(datetime.now() + timedelta(0, 2)) + return db_api.get_next_triggers(datetime.datetime.now() + + datetime.timedelta(0, 2)) def set_next_execution_time(trigger): @@ -30,17 +30,17 @@ def set_next_execution_time(trigger): cron = croniter(trigger['pattern'], base) return db_api.trigger_update(trigger['id'], { - 'next_execution_time': cron.get_next(datetime) + 'next_execution_time': cron.get_next(datetime.datetime) }) def _get_next_execution_time(pattern, start_time): - return croniter(pattern, start_time).get_next(datetime) + return croniter(pattern, start_time).get_next(datetime.datetime) def create_trigger(name, pattern, workbook_name, start_time=None): if not start_time: - start_time = datetime.now() + start_time = datetime.datetime.now() return db_api.trigger_create({ "name": name, @@ -62,7 +62,7 @@ def create_associated_triggers(db_workbook): for e in triggers: pattern = e['parameters']['cron-pattern'] - next_time = _get_next_execution_time(pattern, datetime.now()) + next_time = _get_next_execution_time(pattern, datetime.datetime.now()) db_triggers.append({ "name": e['name'], "pattern": pattern, diff --git a/mistral/tests/api/base.py b/mistral/tests/api/base.py index 4bffea768..0959ca902 100644 --- a/mistral/tests/api/base.py +++ b/mistral/tests/api/base.py @@ -16,7 +16,7 @@ import pecan import pecan.testing -from webtest.app import AppError +from webtest import app as webtest_app from oslo.config import cfg @@ -56,7 +56,7 @@ class FunctionalTest(base.DbTestCase): def assertNotFound(self, url): try: self.app.get(url, headers={'Accept': 'application/json'}) - except AppError as error: + except webtest_app.AppError as error: self.assertIn('Bad response: 404 Not Found', str(error)) return self.fail('Expected 404 Not found but got OK') @@ -64,7 +64,7 @@ class FunctionalTest(base.DbTestCase): def assertUnauthorized(self, url): try: self.app.get(url, headers={'Accept': 'application/json'}) - except AppError as error: + except webtest_app.AppError as error: self.assertIn('Bad response: 401 Unauthorized', str(error)) return self.fail('Expected 401 Unauthorized but got OK') diff --git a/mistral/tests/api/v1/controllers/test_executions.py b/mistral/tests/api/v1/controllers/test_executions.py index da2da3911..4b29590ec 100644 --- a/mistral/tests/api/v1/controllers/test_executions.py +++ b/mistral/tests/api/v1/controllers/test_executions.py @@ -18,7 +18,7 @@ import mock import json from mistral import exceptions as ex -from webtest.app import AppError +from webtest import app as webtest_app from mistral.tests.api import base from mistral.db import api as db_api from mistral import engine @@ -130,7 +130,7 @@ class TestExecutionsController(base.FunctionalTest): @mock.patch.object(engine.EngineClient, 'start_workflow_execution', mock.MagicMock(side_effect=ex.MistralException)) def test_post_throws_exception(self): - context = self.assertRaises(AppError, self.app.post_json, + context = self.assertRaises(webtest_app.AppError, self.app.post_json, '/v1/workbooks/my_workbook/executions', EXECS[0]) self.assertIn('Bad response: 400', context.message) diff --git a/mistral/tests/unit/actions/test_std_email_action.py b/mistral/tests/unit/actions/test_std_email_action.py index be197425f..eb938cde0 100644 --- a/mistral/tests/unit/actions/test_std_email_action.py +++ b/mistral/tests/unit/actions/test_std_email_action.py @@ -14,12 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. - +from email import parser +import mock import testtools -from mock import call -from mock import patch - -from email.parser import Parser from mistral.actions import std_actions as std from mistral import exceptions as exc @@ -81,7 +78,7 @@ class SendEmailActionTest(base.BaseTest): action.run() - @patch('smtplib.SMTP') + @mock.patch('smtplib.SMTP') def test_send_email(self, smtp): action = std.SendEmailAction(self.params, self.settings) @@ -97,14 +94,14 @@ class SendEmailActionTest(base.BaseTest): self.assertEqual( sendmail.call_args[1]['to_addrs'], self.to_addrs) - message = Parser().parsestr(sendmail.call_args[1]['msg']) + message = parser.Parser().parsestr(sendmail.call_args[1]['msg']) self.assertEqual(self.settings['from'], message['from']) self.assertEqual(self.to_addrs, message['to']) self.assertEqual(self.params['subject'], message['subject']) self.assertEqual(self.params['body'], message.get_payload()) - @patch('smtplib.SMTP') + @mock.patch('smtplib.SMTP') def test_with_password(self, smtp): self.settings['password'] = "secret" @@ -113,13 +110,14 @@ class SendEmailActionTest(base.BaseTest): action.run() smtpmock = smtp.return_value - calls = [call.ehlo(), call.starttls(), call.ehlo(), - call.login(self.settings['from'], self.settings['password'])] + calls = [mock.call.ehlo(), mock.call.starttls(), mock.call.ehlo(), + mock.call.login(self.settings['from'], + self.settings['password'])] smtpmock.assert_has_calls(calls) self.assertTrue(smtpmock.sendmail.called, "should call sendmail") - @patch('mistral.actions.std_actions.LOG') + @mock.patch('mistral.actions.std_actions.LOG') def test_exception(self, log): self.params['smtp_server'] = "wrong host" diff --git a/mistral/tests/unit/test_scheduler.py b/mistral/tests/unit/test_scheduler.py index d34670262..2e6d77b35 100644 --- a/mistral/tests/unit/test_scheduler.py +++ b/mistral/tests/unit/test_scheduler.py @@ -14,11 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -from datetime import datetime -from datetime import timedelta +import datetime from mistral.openstack.common import timeutils - from mistral.services import scheduler as s from mistral.tests import base @@ -38,23 +36,23 @@ class SchedulerTest(base.DbTestCase): self.wb_name = "My workbook" def test_trigger_create_and_update(self): - base = datetime(2010, 8, 25) - next_trigger = datetime(2010, 8, 25, 0, 5) + base = datetime.datetime(2010, 8, 25) + next_trigger = datetime.datetime(2010, 8, 25, 0, 5) trigger = s.create_trigger("test", "*/5 * * * *", self.wb_name, base) self.assertEqual(trigger['next_execution_time'], next_trigger) trigger = s.set_next_execution_time(trigger) - next_trigger = datetime(2010, 8, 25, 0, 10) + next_trigger = datetime.datetime(2010, 8, 25, 0, 10) self.assertEqual(trigger['next_execution_time'], next_trigger) def test_get_trigger_in_correct_orders(self): - base = datetime(2010, 8, 25) + base = datetime.datetime(2010, 8, 25) s.create_trigger("test1", "*/5 * * * *", self.wb_name, base) - base = datetime(2010, 8, 22) + base = datetime.datetime(2010, 8, 22) s.create_trigger("test2", "*/5 * * * *", self.wb_name, base) - base = datetime(2010, 9, 21) + base = datetime.datetime(2010, 9, 21) s.create_trigger("test3", "*/5 * * * *", self.wb_name, base) - base = datetime.now() + timedelta(0, 50) + base = datetime.datetime.now() + datetime.timedelta(0, 50) s.create_trigger("test4", "*/5 * * * *", self.wb_name, base) triggersName = [e['name'] for e in s.get_next_triggers()] diff --git a/tox.ini b/tox.ini index 7d5e952a3..42fbc8014 100644 --- a/tox.ini +++ b/tox.ini @@ -39,6 +39,6 @@ commands = bash tools/lintstack.sh [flake8] show-source = true -ignore = H302,H306,H803,H305,H405,H307,H904,H236 +ignore = H306,H803,H305,H405,H307,H904,H236 builtins = _ exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,tools