Skip to content

Commit

Permalink
entire codebase passes type checks
Browse files Browse the repository at this point in the history
  • Loading branch information
Jake Rye committed Oct 29, 2018
1 parent 5ee20b4 commit 87b0472
Show file tree
Hide file tree
Showing 13 changed files with 635 additions and 1,031 deletions.
2 changes: 1 addition & 1 deletion app/apps.py
Expand Up @@ -8,7 +8,7 @@
class CoreConfig(AppConfig):
name = "app"

def ready(self):
def ready(self) -> None:
# Ensure startup code only runs once
if os.environ.get("RUN_MAIN") != "true":
return
Expand Down
145 changes: 0 additions & 145 deletions app/common.py

This file was deleted.

17 changes: 10 additions & 7 deletions app/models.py
Expand Up @@ -2,6 +2,9 @@
import json as json_
import uuid as uuid_module

# Import python types
from typing import Any

# Import django modules
from django.db import models
from django.contrib.postgres.fields import JSONField
Expand Down Expand Up @@ -55,7 +58,7 @@ class Meta:
verbose_name = "Device Configuration"
verbose_name_plural = "Device Configurations"

def save(self, *args, **kwargs):
def save(self, *args: Any, **kwargs: Any) -> None:
""" Extracts uuid, name, and version from json on save. """
dict_ = json_.loads(self.json)
self.uuid = dict_["uuid"]
Expand All @@ -72,7 +75,7 @@ class Meta:
verbose_name = "Peripheral Setup"
verbose_name_plural = "Peripheral Setups"

def save(self, *args, **kwargs):
def save(self, *args: Any, **kwargs: Any) -> None:
""" Extracts uuid and name from json on save. """
dict_ = json_.loads(self.json)
self.uuid = dict_["uuid"]
Expand All @@ -88,7 +91,7 @@ class Meta:
verbose_name = "Sensor Variable"
verbose_name_plural = "Sensor Variables"

def save(self, *args, **kwargs):
def save(self, *args: Any, **kwargs: Any) -> None:
""" Extracts key from json on save. """
dict_ = json_.loads(self.json)
self.key = dict_["key"]
Expand All @@ -103,7 +106,7 @@ class Meta:
verbose_name = "Actuator Variable"
verbose_name_plural = "Actuator Variables"

def save(self, *args, **kwargs):
def save(self, *args: Any, **kwargs: Any) -> None:
""" Extracts key from json on save. """
dict_ = json_.loads(self.json)
self.key = dict_["key"]
Expand All @@ -119,7 +122,7 @@ class Meta:
verbose_name = "Cultivar"
verbose_name_plural = "Cultivars"

def save(self, *args, **kwargs):
def save(self, *args: Any, **kwargs: Any) -> None:
""" Extracts uuid and name from json on save. """
dict_ = json_.loads(self.json)
self.uuid = dict_["uuid"]
Expand All @@ -136,7 +139,7 @@ class Meta:
verbose_name = "Cultivation Method"
verbose_name_plural = "Cultivation Methods"

def save(self, *args, **kwargs):
def save(self, *args: Any, **kwargs: Any) -> None:
""" Extracts uuid and name from json on save. """
dict_ = json_.loads(self.json)
self.uuid = dict_["uuid"]
Expand All @@ -154,7 +157,7 @@ class Meta:
verbose_name = "Recipe"
verbose_name_plural = "Recipes"

def save(self, *args, **kwargs):
def save(self, *args: Any, **kwargs: Any) -> None:
""" Extracts uuid and name from json on save. """
dict_ = json_.loads(self.json)
self.uuid = dict_["uuid"]
Expand Down
43 changes: 29 additions & 14 deletions app/router.py
@@ -1,18 +1,33 @@
# Import standard python modules
import re
from rest_framework import routers
from rest_framework import views
from collections import OrderedDict

# Import python types
from typing import Dict, Any, List

# Import django modules
from django.urls import NoReverseMatch

# Import django rest modules
from rest_framework import routers, views
from rest_framework.reverse import reverse
from rest_framework.response import Response
from rest_framework.request import Request

# Import device utilities
from device.utilities import logger


class Router(routers.DefaultRouter):
def get_api_root_view(self, api_urls=None):
"""
Return a basic root view.
"""
api_root_dict = OrderedDict()
"""Custom router."""

# Initialize logger
logger = logger.Logger("Router", "app")

def get_api_root_view(self, api_urls: List[str] = None) -> Dict:
"""Gets api root view."""
self.logger.debug("Getting api root view")
api_root_dict: Dict = OrderedDict()
list_name = self.routes[0].name
for prefix, viewset, basename in self.registry:
api_root_dict[prefix] = list_name.format(basename=basename)
Expand All @@ -22,17 +37,17 @@ class APIRootView(views.APIView):

_ignore_model_permissions = True
schema = None # exclude from schema
api_root_dict = None
api_root_dict: Dict = {}

def get(self, request, *args, **kwargs):
def get(self, request: Request, *args: Any, **kwargs: Any) -> Response:
# Return a plain {"name": "hyperlink"} response.
ret = OrderedDict()
response: Dict = OrderedDict()
namespace = request.resolver_match.namespace
for key, url_name in self.api_root_dict.items():
if namespace:
url_name = namespace + ":" + url_name
try:
ret[key] = reverse(
response[key] = reverse(
url_name,
args=args,
kwargs=kwargs,
Expand All @@ -45,10 +60,10 @@ def get(self, request, *args, **kwargs):

# Add APIView endpoints
endpoints = ["recipe/stop", "recipe/{uuid}/start/"]
base = ret["state"].split("api", 1)[0] + "api/"
base = response["state"].split("api", 1)[0] + "api/"
for endpoint in endpoints:
ret[endpoint] = base + endpoint
response[endpoint] = base + endpoint

return Response(ret)
return Response(response, 200)

return APIRootView.as_view(api_root_dict=api_root_dict)
3 changes: 1 addition & 2 deletions app/templates/base.html
Expand Up @@ -20,7 +20,7 @@
body {
background-color: #f1f1f1;
}
.dashboard, .events, .recipes, .environments, .peripherals, .images, .config, .password, .logs, .iot, .resources, .connect, .upgrade, .login {
.dashboard, .recipes, .environments, .peripherals, .images, .config, .password, .logs, .iot, .resources, .connect, .upgrade, .login {
padding: 20px;
}
.card {
Expand Down Expand Up @@ -71,7 +71,6 @@
<li><a class="nav-link" href="{% url 'admin:index' %}" target="_blank">Admin</a></li>
<li><a class="nav-link" href="/api" target="_blank">API</a></li>
<li><a class="nav-link" href="{% url 'environments' %}">Environments</a></li>
<li><a class="nav-link" href="{% url 'events' %}">Events</a></li>
<li><a class="nav-link" href="{% url 'images' %}">Images</a></li>
<li><a class="nav-link" href="{% url 'iot' %}">IoT</a></li>
<li><a class="nav-link" href="{% url 'logs' %}">Logs</a></li>
Expand Down

0 comments on commit 87b0472

Please sign in to comment.