diff options
Diffstat (limited to 'pysite')
| -rw-r--r-- | pysite/base_route.py | 4 | ||||
| -rw-r--r-- | pysite/database.py | 24 | ||||
| -rw-r--r-- | pysite/decorators.py | 9 | ||||
| -rw-r--r-- | pysite/mixins.py | 4 | ||||
| -rw-r--r-- | pysite/views/api/bot/tag.py | 6 | ||||
| -rw-r--r-- | pysite/views/api/bot/user.py | 2 | ||||
| -rw-r--r-- | pysite/views/tests/__init__.py | 1 | ||||
| -rw-r--r-- | pysite/views/tests/index.py | 23 | 
8 files changed, 48 insertions, 25 deletions
| diff --git a/pysite/base_route.py b/pysite/base_route.py index 017a8b6e..400a4649 100644 --- a/pysite/base_route.py +++ b/pysite/base_route.py @@ -156,7 +156,7 @@ class ErrorView(BaseView):          """          if hasattr(super(), "setup"): -            super().setup(manager, blueprint) +            super().setup(manager, blueprint)  # pragma: no cover          if not cls.name or not cls.error_code:              raise RuntimeError("Error views must have both `name` and `error_code` defined") @@ -171,4 +171,4 @@ class ErrorView(BaseView):                  except KeyError:  # This happens if we try to register a handler for a HTTP code that doesn't exist                      pass          else: -            raise RuntimeError("Error views must have an `error_code` that is either an `int` or an iterable") +            raise RuntimeError("Error views must have an `error_code` that is either an `int` or an iterable")  # pragma: no cover # noqa: E501 diff --git a/pysite/database.py b/pysite/database.py index f031e2a8..239a2fdc 100644 --- a/pysite/database.py +++ b/pysite/database.py @@ -228,11 +228,11 @@ class RethinkDB:          :return: The document, or None if it wasn't found          """ -        result = self.run( +        result = self.run(  # pragma: no cover              self.query(table_name).get(key)          ) -        return dict(result) if result else None +        return dict(result) if result else None  # pragma: no cover      def get_all(self, table_name: str, *keys: str, index: str="id") -> List[Any]:          """ @@ -245,7 +245,7 @@ class RethinkDB:          :return: A list of matching documents; may be empty if no matches were made          """ -        return self.run( +        return self.run(  # pragma: no cover              self.query(table_name).get_all(*keys, index=index),              coerce=list          ) @@ -262,7 +262,7 @@ class RethinkDB:          :return: True; but may return False if the timeout was reached          """ -        result = self.run( +        result = self.run(  # pragma: no cover              self.query(table_name).wait(wait_for=wait_for, timeout=timeout),              coerce=dict          ) @@ -277,12 +277,12 @@ class RethinkDB:          :return: True if the sync was successful; False otherwise          """ -        result = self.run( +        result = self.run(  # pragma: no cover              self.query(table_name).sync(),              coerce=dict          ) -        return result.get("synced", 0) > 0 +        return result.get("synced", 0) > 0  # pragma: no cover      def changes(self, table_name: str, squash: Union[bool, int]=False, changefeed_queue_size: int=100_000,                  include_initial: Optional[bool]=None, include_states: bool=False, @@ -336,7 +336,7 @@ class RethinkDB:          :return: A special iterator that will iterate over documents in the changefeed as they're sent. If there is              no document waiting, this will block the function until there is.          """ -        return self.run( +        return self.run(  # pragma: no cover              self.query(table_name).changes(                  squash=squash, changefeed_queue_size=changefeed_queue_size, include_initial=include_initial,                  include_states=include_states, include_offsets=False, include_types=include_types @@ -368,7 +368,7 @@ class RethinkDB:          :return: A list containing the requested documents, with only the keys requested          """ -        return self.run( +        return self.run(  # pragma: no cover              self.query(table_name).pluck(*selectors),              coerce=list          ) @@ -388,7 +388,7 @@ class RethinkDB:          :return: A list containing the requested documents, without the keys requested          """ -        return self.run( +        return self.run(  # pragma: no cover              self.query(table_name).without(*selectors)          ) @@ -422,7 +422,7 @@ class RethinkDB:          :return: A list of matched documents; may be empty          """ -        return self.run( +        return self.run(  # pragma: no cover              self.query(table_name).between(lower, upper, index=index, left_bound=left_bound, right_bound=right_bound),              coerce=list          ) @@ -449,7 +449,7 @@ class RethinkDB:          :return: Unknown, needs more testing          """ -        return self.run( +        return self.run(  # pragma: no cover              self.query(table_name).map(func),              coerce=list          ) @@ -479,7 +479,7 @@ class RethinkDB:          :return: A list of documents that match the predicate; may be empty          """ -        return self.run( +        return self.run(  # pragma: no cover              self.query(table_name).filter(predicate, default=default),              coerce=list          ) diff --git a/pysite/decorators.py b/pysite/decorators.py index ff55b929..03d5e6b8 100644 --- a/pysite/decorators.py +++ b/pysite/decorators.py @@ -36,7 +36,6 @@ def api_params(schema: Schema, validation_type: ValidationTypes = ValidationType      This data will always be a list, and view functions are expected to be able to handle that      in the case of multiple sets of data being provided by the api.      """ -      def inner_decorator(f):          @wraps(f) @@ -48,7 +47,7 @@ def api_params(schema: Schema, validation_type: ValidationTypes = ValidationType                      data = list(request.get_json())                  except JSONDecodeError: -                    return self.error(ErrorCodes.bad_data_format) +                    return self.error(ErrorCodes.bad_data_format)  # pragma: no cover              elif validation_type == ValidationTypes.params:                  # I really don't like this section here, but I can't think of a better way to do it @@ -65,9 +64,9 @@ def api_params(schema: Schema, validation_type: ValidationTypes = ValidationType                          # First iteration, store it                          longest = len(items) -                    elif len(items) != longest: +                    elif len(items) != longest:  # pragma: no cover                          # At least one key has a different number of values -                        return self.error(ErrorCodes.bad_data_format) +                        return self.error(ErrorCodes.bad_data_format)  # pragma: no cover                  for i in range(longest):  # Now we know all keys have the same number of values...                      obj = {}  # New dict to store this set of values @@ -78,7 +77,7 @@ def api_params(schema: Schema, validation_type: ValidationTypes = ValidationType                      data.append(obj)              else: -                raise ValueError(f"Unknown validation type: {validation_type}") +                raise ValueError(f"Unknown validation type: {validation_type}")  # pragma: no cover              try:                  schema.validate(data) diff --git a/pysite/mixins.py b/pysite/mixins.py index 43dcf6d4..930a7eb7 100644 --- a/pysite/mixins.py +++ b/pysite/mixins.py @@ -8,7 +8,7 @@ from rethinkdb.ast import Table  from pysite.database import RethinkDB -class DBMixin: +class DBMixin():      """      Mixin for classes that make use of RethinkDB. It can automatically create a table with the specified primary      key using the attributes set at class-level. @@ -46,7 +46,7 @@ class DBMixin:          """          if hasattr(super(), "setup"): -            super().setup(manager, blueprint) +            super().setup(manager, blueprint)  # pragma: no cover          if not cls.table_name:              raise RuntimeError("Routes using DBViewMixin must define `table_name`") diff --git a/pysite/views/api/bot/tag.py b/pysite/views/api/bot/tag.py index 2117d948..8818074e 100644 --- a/pysite/views/api/bot/tag.py +++ b/pysite/views/api/bot/tag.py @@ -24,11 +24,11 @@ class TagView(APIView, DBMixin):          tag_name = request.args.get("tag_name")          if tag_name: -            data = self.db.get(self.table_name, tag_name) or {} +            data = self.db.get(self.table_name, tag_name) or {}  # pragma: no cover          else:              data = self.db.pluck(self.table_name, "tag_name") or [] -        return jsonify(data) +        return jsonify(data)  # pragma: no cover      @api_key      def post(self): @@ -54,4 +54,4 @@ class TagView(APIView, DBMixin):          else:              return self.error(ErrorCodes.incorrect_parameters) -        return jsonify({"success": True}) +        return jsonify({"success": True})  # pragma: no cover diff --git a/pysite/views/api/bot/user.py b/pysite/views/api/bot/user.py index 174407b8..f80bb826 100644 --- a/pysite/views/api/bot/user.py +++ b/pysite/views/api/bot/user.py @@ -36,4 +36,4 @@ class UserView(APIView, DBMixin):              conflict="update"          ) -        return jsonify(changes) +        return jsonify(changes)  # pragma: no cover diff --git a/pysite/views/tests/__init__.py b/pysite/views/tests/__init__.py new file mode 100644 index 00000000..adfc1286 --- /dev/null +++ b/pysite/views/tests/__init__.py @@ -0,0 +1 @@ +# .gitkeep diff --git a/pysite/views/tests/index.py b/pysite/views/tests/index.py new file mode 100644 index 00000000..78b7ef2e --- /dev/null +++ b/pysite/views/tests/index.py @@ -0,0 +1,23 @@ +# coding=utf-8 + +from flask import jsonify + +from schema import Schema + +from pysite.base_route import RouteView +from pysite.constants import ValidationTypes +from pysite.decorators import api_params + +SCHEMA = Schema([{"test": str}]) + +REQUIRED_KEYS = ["test"] + + +class TestParamsView(RouteView): +    path = "/testparams" +    name = "testparams" + +    @api_params(schema=SCHEMA, validation_type=ValidationTypes.params) +    def post(self, data): +        jsonified = jsonify(data) +        return jsonified | 
