Fix Hacking rule H302 (import only modules)

Change-Id: Id6407aac9e5a4bdbd730576433032d43dc89f934
This commit is contained in:
Angus Salkeld 2014-06-12 09:39:32 +10:00
parent 787c48aef0
commit 976ef6c702
10 changed files with 41 additions and 47 deletions

View File

@ -16,7 +16,7 @@
import json import json
import smtplib import smtplib
from email.mime.text import MIMEText from email.mime import text
import requests import requests
@ -209,7 +209,7 @@ class SendEmailAction(base.Action):
self.smtp_server, self.body[:128])) self.smtp_server, self.body[:128]))
# TODO(dzimine): handle utf-8, http://stackoverflow.com/a/14506784 # TODO(dzimine): handle utf-8, http://stackoverflow.com/a/14506784
message = MIMEText(self.body) message = text.MIMEText(self.body)
message['Subject'] = self.subject message['Subject'] = self.subject
message['From'] = self.sender message['From'] = self.sender
message['To'] = self.to message['To'] = self.to

View File

@ -14,9 +14,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from pecan import rest import pecan
from pecan import expose
from pecan import request
from mistral.openstack.common import log as logging from mistral.openstack.common import log as logging
from mistral.db import api as db_api from mistral.db import api as db_api
@ -27,9 +25,9 @@ from mistral.utils import rest_utils
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
class WorkbookDefinitionController(rest.RestController): class WorkbookDefinitionController(pecan.rest.RestController):
@rest_utils.wrap_pecan_controller_exception @rest_utils.wrap_pecan_controller_exception
@expose() @pecan.expose()
def get(self, workbook_name): def get(self, workbook_name):
"""Return the workbook definition.""" """Return the workbook definition."""
LOG.debug("Fetch workbook definition [workbook_name=%s]" % LOG.debug("Fetch workbook definition [workbook_name=%s]" %
@ -37,10 +35,10 @@ class WorkbookDefinitionController(rest.RestController):
return db_api.workbook_definition_get(workbook_name) return db_api.workbook_definition_get(workbook_name)
@rest_utils.wrap_pecan_controller_exception @rest_utils.wrap_pecan_controller_exception
@expose(content_type="text/plain") @pecan.expose(content_type="text/plain")
def put(self, workbook_name): def put(self, workbook_name):
"""Update the workbook's definition.""" """Update the workbook's definition."""
text = request.text text = pecan.request.text
LOG.debug("Update workbook definition [workbook_name=%s, text=%s]" % LOG.debug("Update workbook definition [workbook_name=%s, text=%s]" %
(workbook_name, text)) (workbook_name, text))

View File

@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from pecan.hooks import PecanHook from pecan import hooks
from mistral import engine from mistral import engine
from mistral.openstack.common import log as logging from mistral.openstack.common import log as logging
@ -21,7 +21,7 @@ from mistral.openstack.common import log as logging
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
class EngineHook(PecanHook): class EngineHook(hooks.PecanHook):
def __init__(self, transport=None): def __init__(self, transport=None):
self.transport = engine.get_transport(transport) self.transport = engine.get_transport(transport)

View File

@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from pecan.hooks import PecanHook from pecan import hooks
import eventlet import eventlet
@ -124,7 +124,7 @@ def context_from_headers(headers):
) )
class ContextHook(PecanHook): class ContextHook(hooks.PecanHook):
def before(self, state): def before(self, state):
request_ctx = context_from_headers(state.request.headers).to_dict() request_ctx = context_from_headers(state.request.headers).to_dict()
set_ctx(request_ctx) set_ctx(request_ctx)

View File

@ -15,14 +15,14 @@
# limitations under the License. # limitations under the License.
from croniter import croniter from croniter import croniter
from datetime import datetime import datetime
from datetime import timedelta
from mistral.db import api as db_api from mistral.db import api as db_api
from mistral import dsl_parser as parser from mistral import dsl_parser as parser
def get_next_triggers(): 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): def set_next_execution_time(trigger):
@ -30,17 +30,17 @@ def set_next_execution_time(trigger):
cron = croniter(trigger['pattern'], base) cron = croniter(trigger['pattern'], base)
return db_api.trigger_update(trigger['id'], { 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): 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): def create_trigger(name, pattern, workbook_name, start_time=None):
if not start_time: if not start_time:
start_time = datetime.now() start_time = datetime.datetime.now()
return db_api.trigger_create({ return db_api.trigger_create({
"name": name, "name": name,
@ -62,7 +62,7 @@ def create_associated_triggers(db_workbook):
for e in triggers: for e in triggers:
pattern = e['parameters']['cron-pattern'] 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({ db_triggers.append({
"name": e['name'], "name": e['name'],
"pattern": pattern, "pattern": pattern,

View File

@ -16,7 +16,7 @@
import pecan import pecan
import pecan.testing import pecan.testing
from webtest.app import AppError from webtest import app as webtest_app
from oslo.config import cfg from oslo.config import cfg
@ -56,7 +56,7 @@ class FunctionalTest(base.DbTestCase):
def assertNotFound(self, url): def assertNotFound(self, url):
try: try:
self.app.get(url, headers={'Accept': 'application/json'}) 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)) self.assertIn('Bad response: 404 Not Found', str(error))
return return
self.fail('Expected 404 Not found but got OK') self.fail('Expected 404 Not found but got OK')
@ -64,7 +64,7 @@ class FunctionalTest(base.DbTestCase):
def assertUnauthorized(self, url): def assertUnauthorized(self, url):
try: try:
self.app.get(url, headers={'Accept': 'application/json'}) 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)) self.assertIn('Bad response: 401 Unauthorized', str(error))
return return
self.fail('Expected 401 Unauthorized but got OK') self.fail('Expected 401 Unauthorized but got OK')

View File

@ -18,7 +18,7 @@ import mock
import json import json
from mistral import exceptions as ex 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.tests.api import base
from mistral.db import api as db_api from mistral.db import api as db_api
from mistral import engine from mistral import engine
@ -130,7 +130,7 @@ class TestExecutionsController(base.FunctionalTest):
@mock.patch.object(engine.EngineClient, 'start_workflow_execution', @mock.patch.object(engine.EngineClient, 'start_workflow_execution',
mock.MagicMock(side_effect=ex.MistralException)) mock.MagicMock(side_effect=ex.MistralException))
def test_post_throws_exception(self): 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', '/v1/workbooks/my_workbook/executions',
EXECS[0]) EXECS[0])
self.assertIn('Bad response: 400', context.message) self.assertIn('Bad response: 400', context.message)

View File

@ -14,12 +14,9 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from email import parser
import mock
import testtools 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.actions import std_actions as std
from mistral import exceptions as exc from mistral import exceptions as exc
@ -81,7 +78,7 @@ class SendEmailActionTest(base.BaseTest):
action.run() action.run()
@patch('smtplib.SMTP') @mock.patch('smtplib.SMTP')
def test_send_email(self, smtp): def test_send_email(self, smtp):
action = std.SendEmailAction(self.params, self.settings) action = std.SendEmailAction(self.params, self.settings)
@ -97,14 +94,14 @@ class SendEmailActionTest(base.BaseTest):
self.assertEqual( self.assertEqual(
sendmail.call_args[1]['to_addrs'], self.to_addrs) 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.settings['from'], message['from'])
self.assertEqual(self.to_addrs, message['to']) self.assertEqual(self.to_addrs, message['to'])
self.assertEqual(self.params['subject'], message['subject']) self.assertEqual(self.params['subject'], message['subject'])
self.assertEqual(self.params['body'], message.get_payload()) self.assertEqual(self.params['body'], message.get_payload())
@patch('smtplib.SMTP') @mock.patch('smtplib.SMTP')
def test_with_password(self, smtp): def test_with_password(self, smtp):
self.settings['password'] = "secret" self.settings['password'] = "secret"
@ -113,13 +110,14 @@ class SendEmailActionTest(base.BaseTest):
action.run() action.run()
smtpmock = smtp.return_value smtpmock = smtp.return_value
calls = [call.ehlo(), call.starttls(), call.ehlo(), calls = [mock.call.ehlo(), mock.call.starttls(), mock.call.ehlo(),
call.login(self.settings['from'], self.settings['password'])] mock.call.login(self.settings['from'],
self.settings['password'])]
smtpmock.assert_has_calls(calls) smtpmock.assert_has_calls(calls)
self.assertTrue(smtpmock.sendmail.called, "should call sendmail") 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): def test_exception(self, log):
self.params['smtp_server'] = "wrong host" self.params['smtp_server'] = "wrong host"

View File

@ -14,11 +14,9 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from datetime import datetime import datetime
from datetime import timedelta
from mistral.openstack.common import timeutils from mistral.openstack.common import timeutils
from mistral.services import scheduler as s from mistral.services import scheduler as s
from mistral.tests import base from mistral.tests import base
@ -38,23 +36,23 @@ class SchedulerTest(base.DbTestCase):
self.wb_name = "My workbook" self.wb_name = "My workbook"
def test_trigger_create_and_update(self): def test_trigger_create_and_update(self):
base = datetime(2010, 8, 25) base = datetime.datetime(2010, 8, 25)
next_trigger = datetime(2010, 8, 25, 0, 5) next_trigger = datetime.datetime(2010, 8, 25, 0, 5)
trigger = s.create_trigger("test", "*/5 * * * *", self.wb_name, base) trigger = s.create_trigger("test", "*/5 * * * *", self.wb_name, base)
self.assertEqual(trigger['next_execution_time'], next_trigger) self.assertEqual(trigger['next_execution_time'], next_trigger)
trigger = s.set_next_execution_time(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) self.assertEqual(trigger['next_execution_time'], next_trigger)
def test_get_trigger_in_correct_orders(self): 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) 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) 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) 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) s.create_trigger("test4", "*/5 * * * *", self.wb_name, base)
triggersName = [e['name'] for e in s.get_next_triggers()] triggersName = [e['name'] for e in s.get_next_triggers()]

View File

@ -39,6 +39,6 @@ commands = bash tools/lintstack.sh
[flake8] [flake8]
show-source = true show-source = true
ignore = H302,H306,H803,H305,H405,H307,H904,H236 ignore = H306,H803,H305,H405,H307,H904,H236
builtins = _ builtins = _
exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,tools exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,tools