Skip to content

Commit 1a620cd

Browse files
Merge pull request #802 from hugapi/jtyler/style-ci-pipeline
Adding style tools to CI
2 parents b2f82aa + fe70c4e commit 1a620cd

File tree

13 files changed

+109
-36
lines changed

13 files changed

+109
-36
lines changed

.travis.yml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,23 @@ matrix:
2020
- os: linux
2121
sudo: required
2222
python: 3.7
23-
env: TOXENV=py37-marshmallow2
23+
env: TOXENV=py37-marshmallow3
24+
- os: linux
25+
sudo: required
26+
python: 3.7
27+
env: TOXENV=py37-black
28+
- os: linux
29+
sudo: required
30+
python: 3.7
31+
env: TOXENV=py37-flake8
32+
- os: linux
33+
sudo: required
34+
python: 3.7
35+
env: TOXENV=py37-bandit
36+
- os: linux
37+
sudo: required
38+
python: 3.7
39+
env: TOXENV=py37-vulture
2440
- os: linux
2541
sudo: required
2642
python: pypy3.5-6.0

Pipfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[[source]]
2+
url = "https://pypi.org/simple"
3+
verify_ssl = true
4+
name = "pypi"
5+
6+
[packages]
7+
8+
[dev-packages]
9+
10+
[requires]
11+
python_version = "3.7"

hug/api.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ def __init__(self, api):
7878

7979
class HTTPInterfaceAPI(InterfaceAPI):
8080
"""Defines the HTTP interface specific API"""
81+
8182
__slots__ = (
8283
"routes",
8384
"versions",
@@ -123,10 +124,10 @@ def urls(self):
123124
def handlers(self):
124125
"""Returns all registered handlers attached to this API"""
125126
used = []
126-
for base_url, mapping in self.routes.items():
127-
for url, methods in mapping.items():
128-
for method, versions in methods.items():
129-
for version, handler in versions.items():
127+
for _base_url, mapping in self.routes.items():
128+
for _url, methods in mapping.items():
129+
for _method, versions in methods.items():
130+
for _version, handler in versions.items():
130131
if not handler in used:
131132
used.append(handler)
132133
yield handler
@@ -179,15 +180,15 @@ def extend(self, http_api, route="", base_url="", **kwargs):
179180
self.versions.update(http_api.versions)
180181
base_url = base_url or self.base_url
181182

182-
for router_base_url, routes in http_api.routes.items():
183+
for _router_base_url, routes in http_api.routes.items():
183184
self.routes.setdefault(base_url, OrderedDict())
184185
for item_route, handler in routes.items():
185-
for method, versions in handler.items():
186-
for version, function in versions.items():
186+
for _method, versions in handler.items():
187+
for _version, function in versions.items():
187188
function.interface.api = self.api
188189
self.routes[base_url].setdefault(route + item_route, {}).update(handler)
189190

190-
for sink_base_url, sinks in http_api.sinks.items():
191+
for _sink_base_url, sinks in http_api.sinks.items():
191192
for url, sink in sinks.items():
192193
self.add_sink(sink, route + url, base_url=base_url)
193194

@@ -344,9 +345,11 @@ def handle_404(request, response, *args, **kwargs):
344345
return handle_404
345346

346347
def version_router(
347-
self, request, response, api_version=None, versions={}, not_found=None, **kwargs
348+
self, request, response, api_version=None, versions=None, not_found=None, **kwargs
348349
):
349350
"""Intelligently routes a request to the correct handler based on the version being requested"""
351+
if versions is None:
352+
versions = {}
350353
request_version = self.determine_version(request, api_version)
351354
if request_version:
352355
request_version = int(request_version)
@@ -551,9 +554,9 @@ def add_directive(self, directive):
551554

552555
def handlers(self):
553556
"""Returns all registered handlers attached to this API"""
554-
if getattr(self, "_http"):
557+
if getattr(self, "_http", None):
555558
yield from self.http.handlers()
556-
if getattr(self, "_cli"):
559+
if getattr(self, "_cli", None):
557560
yield from self.cli.handlers()
558561

559562
@property

hug/decorators.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ def decorator(middleware_method):
157157
class MiddlewareRouter(object):
158158
__slots__ = ()
159159

160-
def process_response(self, request, response, resource, req_succeeded):
160+
def process_response(self, request, response, resource, _req_succeeded):
161161
return middleware_method(request, response, resource)
162162

163163
apply_to_api.http.add_middleware(MiddlewareRouter())
@@ -179,7 +179,7 @@ def process_request(self, request, response):
179179
self.gen = middleware_generator(request)
180180
return self.gen.__next__()
181181

182-
def process_response(self, request, response, resource, req_succeeded):
182+
def process_response(self, request, response, resource, _req_succeeded):
183183
return self.gen.send((response, resource))
184184

185185
apply_to_api.http.add_middleware(MiddlewareRouter())

hug/interface.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def __init__(self, function, args=None):
117117

118118
self.input_transformations[name] = transformer
119119

120-
def __call__(__hug_internal_self, *args, **kwargs):
120+
def __call__(__hug_internal_self, *args, **kwargs): # noqa: N805
121121
""""Calls the wrapped function, uses __hug_internal_self incase self is passed in as a kwarg from the wrapper"""
122122
if not __hug_internal_self.is_coroutine:
123123
return __hug_internal_self._function(*args, **kwargs)
@@ -270,7 +270,7 @@ def validate(self, input_parameters, context):
270270
type_handler, input_parameters[key], context=context
271271
)
272272
except InvalidTypeData as error:
273-
errors[key] = error.reasons or str(error.message)
273+
errors[key] = error.reasons or str(error)
274274
except Exception as error:
275275
if hasattr(error, "args") and error.args:
276276
errors[key] = error.args[0]
@@ -342,7 +342,7 @@ def _rewrite_params(self, params):
342342

343343
@staticmethod
344344
def cleanup_parameters(parameters, exception=None):
345-
for parameter, directive in parameters.items():
345+
for _parameter, directive in parameters.items():
346346
if hasattr(directive, "cleanup"):
347347
directive.cleanup(exception=exception)
348348

@@ -385,7 +385,7 @@ def __call__(self, *args, **kwargs):
385385
context = self.api.context_factory(api=self.api, api_version=self.version, interface=self)
386386
"""Defines how calling the function locally should be handled"""
387387

388-
for requirement in self.requires:
388+
for _requirement in self.requires:
389389
lacks_requirement = self.check_requirements(context=context)
390390
if lacks_requirement:
391391
self.api.delete_context(context, lacks_requirement=lacks_requirement)
@@ -604,7 +604,7 @@ def exit_callback(message):
604604
args.extend(pass_to_function.pop(self.additional_options, ()))
605605
if self.interface.takes_kwargs:
606606
add_options_to = None
607-
for index, option in enumerate(unknown):
607+
for option in unknown:
608608
if option.startswith("--"):
609609
if add_options_to:
610610
value = pass_to_function[add_options_to]
@@ -959,9 +959,9 @@ def documentation(self, add_to=None, version=None, prefix="", base_url="", url="
959959
def urls(self, version=None):
960960
"""Returns all URLS that are mapped to this interface"""
961961
urls = []
962-
for base_url, routes in self.api.http.routes.items():
962+
for _base_url, routes in self.api.http.routes.items():
963963
for url, methods in routes.items():
964-
for method, versions in methods.items():
964+
for _method, versions in methods.items():
965965
for interface_version, interface in versions.items():
966966
if interface_version == version and interface == self:
967967
if not url in urls:

hug/json_module.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
if HUG_USE_UJSON:
66
import ujson as json
77

8-
class dumps_proxy:
8+
class dumps_proxy: # noqa: N801
99
"""Proxies the call so non supported kwargs are skipped
1010
and it enables escape_forward_slashes to simulate built-in json
1111
"""

hug/middleware.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def process_request(self, request, response):
8989
data = self.store.get(sid)
9090
request.context.update({self.context_name: data})
9191

92-
def process_response(self, request, response, resource, req_succeeded):
92+
def process_response(self, request, response, resource, _req_succeeded):
9393
"""Save request context in coupled store object. Set cookie containing a session ID."""
9494
sid = request.cookies.get(self.cookie_name, None)
9595
if sid is None or not self.store.exists(sid):
@@ -138,7 +138,7 @@ def process_request(self, request, response):
138138
)
139139
)
140140

141-
def process_response(self, request, response, resource, req_succeeded):
141+
def process_response(self, request, response, resource, _req_succeeded):
142142
"""Logs the basic data returned by the API"""
143143
self.logger.info(self._generate_combined_log(request, response))
144144

@@ -153,8 +153,10 @@ class CORSMiddleware(object):
153153
__slots__ = ("api", "allow_origins", "allow_credentials", "max_age")
154154

155155
def __init__(
156-
self, api, allow_origins: list = ["*"], allow_credentials: bool = True, max_age: int = None
156+
self, api, allow_origins: list = None, allow_credentials: bool = True, max_age: int = None
157157
):
158+
if allow_origins is None:
159+
allow_origins = ["*"]
158160
self.api = api
159161
self.allow_origins = allow_origins
160162
self.allow_credentials = allow_credentials
@@ -174,7 +176,7 @@ def match_route(self, reqpath):
174176

175177
return reqpath
176178

177-
def process_response(self, request, response, resource, req_succeeded):
179+
def process_response(self, request, response, resource, _req_succeeded):
178180
"""Add CORS headers to the response"""
179181
response.set_header("Access-Control-Allow-Credentials", str(self.allow_credentials).lower())
180182

hug/output_format.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ def output_type(data, request, response):
384384
handler = default
385385
accepted = [accept_quality(accept_type) for accept_type in accept.split(",")]
386386
accepted.sort(key=itemgetter(0))
387-
for quality, accepted_content_type in reversed(accepted):
387+
for _quality, accepted_content_type in reversed(accepted):
388388
if accepted_content_type in handlers:
389389
handler = handlers[accepted_content_type]
390390
break

hug/route.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@
2727
from falcon import HTTP_METHODS
2828

2929
import hug.api
30-
from hug.routing import CLIRouter as cli
31-
from hug.routing import ExceptionRouter as exception
32-
from hug.routing import LocalRouter as local
33-
from hug.routing import NotFoundRouter as not_found
34-
from hug.routing import SinkRouter as sink
35-
from hug.routing import StaticRouter as static
36-
from hug.routing import URLRouter as http
30+
from hug.routing import CLIRouter as cli # noqa: N813
31+
from hug.routing import ExceptionRouter as exception # noqa: N813
32+
from hug.routing import LocalRouter as local # noqa: N813
33+
from hug.routing import NotFoundRouter as not_found # noqa: N813
34+
from hug.routing import SinkRouter as sink # noqa: N813
35+
from hug.routing import StaticRouter as static # noqa: N813
36+
from hug.routing import URLRouter as http # noqa: N813
3737

3838

3939
class Object(http):

hug/routing.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,13 +221,15 @@ def __init__(
221221
versions=any,
222222
parse_body=False,
223223
parameters=None,
224-
defaults={},
224+
defaults=None,
225225
status=None,
226226
response_headers=None,
227227
private=False,
228228
inputs=None,
229229
**kwargs
230230
):
231+
if defaults is None:
232+
defaults = {}
231233
super().__init__(**kwargs)
232234
if versions is not any:
233235
self.route["versions"] = (

0 commit comments

Comments
 (0)