Skip to content

Commit

Permalink
Merge 7776e0b into 04cfe06
Browse files Browse the repository at this point in the history
  • Loading branch information
dom-nie committed Nov 1, 2019
2 parents 04cfe06 + 7776e0b commit 5adf692
Show file tree
Hide file tree
Showing 16 changed files with 74 additions and 79 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Expand Up @@ -35,7 +35,7 @@ cache: pip
install:
- pip install -r requirements-test.txt
script:
- pytest --pep8
- pytest --pep8 --mypy
- bandit -r puppetboard
after_success:
- coveralls
Expand Down
37 changes: 16 additions & 21 deletions puppetboard/app.py
@@ -1,42 +1,37 @@
from __future__ import unicode_literals
from __future__ import absolute_import
from __future__ import unicode_literals

import logging
import collections
try:
from urllib import unquote, unquote_plus, quote_plus
except ImportError:
from urllib.parse import unquote, unquote_plus, quote_plus

from urllib.parse import unquote, unquote_plus, quote_plus
from datetime import datetime, timedelta
from itertools import tee

import sys
from flask import (
Flask, render_template, abort, url_for,
Response, stream_with_context, redirect,
request, session, jsonify
render_template, abort, url_for,
Response, stream_with_context, request, session, jsonify
)
from jinja2.utils import contextfunction

from pypuppetdb.QueryBuilder import *
import logging

from pypuppetdb.QueryBuilder import (ExtractOperator, AndOperator,
EqualsOperator, FunctionOperator,
NullOperator, OrOperator,
LessEqualOperator)

from puppetboard.forms import ENABLED_QUERY_ENDPOINTS, QueryForm
from puppetboard.utils import (get_or_abort, yield_or_stop,
get_db_version)
from puppetboard.dailychart import get_daily_reports_chart

import werkzeug.exceptions as ex

try:
import CommonMark as commonmark
except ImportError:
import commonmark

from puppetboard.core import get_app, get_puppetdb, environments
import puppetboard.errors

from . import __version__


REPORTS_COLUMNS = [
{'attr': 'end', 'filter': 'end_time',
'name': 'End time', 'type': 'datetime'},
Expand All @@ -54,7 +49,6 @@
{'attr': 'form', 'name': 'Compare'},
]


app = get_app()
graph_facts = app.config['GRAPH_FACTS']
numeric_level = getattr(logging, app.config['LOGLEVEL'].upper(), None)
Expand Down Expand Up @@ -87,7 +81,8 @@ def check_env(env, envs):
def utility_processor():
def now(format='%m/%d/%Y %H:%M:%S'):
"""returns the formated datetime"""
return datetime.datetime.now().strftime(format)
return datetime.now().strftime(format)

return dict(now=now)


Expand Down Expand Up @@ -230,7 +225,7 @@ def nodes(env):
if status_arg in ['failed', 'changed', 'unchanged']:
query.add(EqualsOperator('latest_report_status', status_arg))
elif status_arg == 'unreported':
unreported = datetime.datetime.utcnow()
unreported = datetime.utcnow()
unreported = (unreported -
timedelta(hours=app.config['UNRESPONSIVE_HOURS']))
unreported = unreported.replace(microsecond=0).isoformat()
Expand Down Expand Up @@ -725,7 +720,7 @@ def fact_ajax(env, node, fact, value):
fact_h.node))
if not value:
fact_value = fact_h.value
if isinstance(fact_value, unicode) or isinstance(fact_value, str):
if isinstance(fact_value, str) or isinstance(fact_value, str):
fact_value = quote_plus(fact_h.value)

line.append('<a href="{0}">{1}</a>'.format(
Expand Down
10 changes: 4 additions & 6 deletions puppetboard/core.py
@@ -1,15 +1,13 @@
from __future__ import unicode_literals
from __future__ import absolute_import
from __future__ import unicode_literals

import logging

from flask import Flask

from pypuppetdb import connect
from puppetboard.utils import (jsonprint, prettyprint, url_for_field,
url_static_offline, get_or_abort)

from . import __version__
from puppetboard.utils import (get_or_abort, jsonprint, prettyprint,
url_for_field, url_static_offline)

APP = None
PUPPETDB = None
Expand Down Expand Up @@ -48,7 +46,7 @@ def get_puppetdb():
ssl_key=app.config['PUPPETDB_KEY'],
ssl_cert=app.config['PUPPETDB_CERT'],
timeout=app.config['PUPPETDB_TIMEOUT'],
protocol=app.config['PUPPETDB_PROTO'],)
protocol=app.config['PUPPETDB_PROTO'], )
PUPPETDB = puppetdb

return PUPPETDB
Expand Down
8 changes: 4 additions & 4 deletions puppetboard/dailychart.py
@@ -1,9 +1,9 @@
from datetime import datetime, timedelta

from pypuppetdb.QueryBuilder import (AndOperator, EqualsOperator,
ExtractOperator, FunctionOperator,
GreaterEqualOperator, LessOperator)
from pypuppetdb.utils import UTC
from pypuppetdb.QueryBuilder import (
ExtractOperator, FunctionOperator, AndOperator,
GreaterEqualOperator, LessOperator, EqualsOperator,
)

DATE_FORMAT = "%Y-%m-%d"
DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
Expand Down
8 changes: 4 additions & 4 deletions puppetboard/errors.py
@@ -1,10 +1,10 @@
from __future__ import unicode_literals
from __future__ import absolute_import
from __future__ import unicode_literals

from puppetboard.core import get_app, environments
from werkzeug.exceptions import InternalServerError
from flask import render_template
from . import __version__
from werkzeug.exceptions import InternalServerError

from puppetboard.core import environments, get_app

app = get_app()

Expand Down
8 changes: 2 additions & 6 deletions puppetboard/forms.py
@@ -1,17 +1,13 @@
from __future__ import unicode_literals
from __future__ import absolute_import
from __future__ import unicode_literals

from collections import OrderedDict

from flask_wtf import FlaskForm
from wtforms import (
HiddenField, RadioField, SelectField,
TextAreaField, BooleanField, validators
)
from wtforms import (BooleanField, RadioField, TextAreaField, validators)

from puppetboard.core import get_app


app = get_app()
QUERY_ENDPOINTS = OrderedDict([
# PuppetDB API endpoint, Form name
Expand Down
15 changes: 4 additions & 11 deletions puppetboard/utils.py
@@ -1,22 +1,15 @@
from __future__ import absolute_import
from __future__ import unicode_literals

import os.path
import json
import logging

from math import ceil
from requests.exceptions import HTTPError, ConnectionError
from pypuppetdb.errors import EmptyResponseError
import os.path

from flask import abort, request, url_for
from jinja2.utils import contextfunction
from pypuppetdb.errors import EmptyResponseError
from requests.exceptions import ConnectionError, HTTPError

# Python 3 compatibility
try:
xrange
except NameError:
xrange = range

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -93,7 +86,7 @@ def prettyprint(value):
html += "</tr>"

html += "</tbody></table>"
return(html)
return (html)


def get_or_abort(func, *args, **kwargs):
Expand Down
2 changes: 2 additions & 0 deletions pytest.ini
@@ -1,3 +1,5 @@
[pytest]
filterwarnings =
ignore::DeprecationWarning
markers =
pep8: workaround for https://bitbucket.org/pytest-dev/pytest-pep8/issues/23/
2 changes: 2 additions & 0 deletions requirements-test.txt
Expand Up @@ -6,7 +6,9 @@ pytest==5.2.2
pytest-pep8==1.0.6
pytest-cov==2.8.1
pytest-mock==1.11.2
pytest-mypy==0.4.1
cov-core==1.15.0
beautifulsoup4==4.8.1
bandit
coveralls
mypy==0.740
16 changes: 8 additions & 8 deletions requirements.txt
@@ -1,10 +1,10 @@
Flask >=0.12
Flask >=1.1.1
Flask-WTF >=0.14.2
Jinja2 >=2.9.5
MarkupSafe >=0.19
WTForms >=2.1
Werkzeug >=0.12.1
itsdangerous >=0.23
Jinja2 >=2.10.3
MarkupSafe >=1.1.1
WTForms >=2.2.1
Werkzeug >=0.16.0
itsdangerous >=1.1.0
pypuppetdb >=1.2.0
requests >=2.13.0
CommonMark==0.7.2
requests >=2.22.0
CommonMark==0.9.1
9 changes: 9 additions & 0 deletions setup.cfg
Expand Up @@ -11,6 +11,15 @@ max-line-length=100
exclude=venv,dist,build
ignore=E402

[mypy]
python_version = 3.8
ignore_missing_imports=True
ignore_errors=False
pretty=True

[mypy-setup,puppetboard.docker_settings]
ignore_errors = True

[nosetests]
with-coverage = 1
with-xunit = 1
Expand Down
5 changes: 3 additions & 2 deletions test/test_app_error.py
@@ -1,10 +1,10 @@
import pytest
from flask import Flask, current_app
from bs4 import BeautifulSoup
from werkzeug.exceptions import InternalServerError

from puppetboard import app
from puppetboard.errors import (bad_request, forbidden, not_found,
precond_failed, server_error)
from bs4 import BeautifulSoup


@pytest.fixture
Expand All @@ -22,6 +22,7 @@ def mock_puppetdb_environments(mocker):
def mock_server_error(mocker):
def raiseInternalServerError():
raise InternalServerError('Hello world')

return mocker.patch('puppetboard.core.environments',
side_effect=raiseInternalServerError)

Expand Down
8 changes: 5 additions & 3 deletions test/test_docker_settings.py
@@ -1,15 +1,17 @@
import pytest
import os
from puppetboard import docker_settings

import pytest

import puppetboard.core
from puppetboard import docker_settings

try:
import future.utils
except:
pass

try:
from imp import reload as reload
from importlib import reload as reload
except:
pass

Expand Down
1 change: 0 additions & 1 deletion test/test_form.py
@@ -1,4 +1,3 @@
import pytest
from puppetboard import app, forms


Expand Down
18 changes: 8 additions & 10 deletions test/test_utils.py
@@ -1,20 +1,16 @@
import pytest
import sys
import json
import mock

import logging
from types import GeneratorType

from requests.exceptions import HTTPError, ConnectionError
import pytest
from bs4 import BeautifulSoup
from pypuppetdb.errors import EmptyResponseError
from requests import Response
from werkzeug.exceptions import NotFound, InternalServerError
from requests.exceptions import ConnectionError, HTTPError
from werkzeug.exceptions import InternalServerError, NotFound

from puppetboard import utils
from puppetboard import app

from bs4 import BeautifulSoup
import logging
from puppetboard import utils


def test_json_format():
Expand Down Expand Up @@ -206,6 +202,7 @@ def my_generator():
yield 1
raise ConnectionError
yield 2

gen = utils.yield_or_stop(my_generator())
for val in gen:
assert 1 == val
Expand All @@ -216,6 +213,7 @@ def my_generator():
yield 1
raise HTTPError
yield 2

gen = utils.yield_or_stop(my_generator())
for val in gen:
assert 1 == val
4 changes: 2 additions & 2 deletions tox.ini
@@ -1,10 +1,10 @@
[tox]
envlist = py{27,35,36,37}
envlist = py{36,37,38}

[testenv]
deps=
-rrequirements-test.txt
bandit
commands=
py.test --cov=puppetboard --pep8 -v
py{27,35,36,37}: bandit -r puppetboard
py{36,37,38}: bandit -r puppetboard

0 comments on commit 5adf692

Please sign in to comment.