Skip to content

Commit

Permalink
Even more type decorations
Browse files Browse the repository at this point in the history
  • Loading branch information
silasary committed Nov 10, 2018
1 parent 26254ec commit c472402
Show file tree
Hide file tree
Showing 10 changed files with 2,487 additions and 26 deletions.
8 changes: 4 additions & 4 deletions decksite/api.py
Expand Up @@ -53,7 +53,7 @@ def league_api() -> Response:
return return_json(league.active_league())

@APP.route('/api/person/<person>/')
def person_api(person):
def person_api(person: str) -> Response:
try:
p = ps.load_person_by_discord_id_or_username(person)
p.decks_url = url_for('person_decks_api', person=person)
Expand All @@ -63,7 +63,7 @@ def person_api(person):
return return_json(generate_error('NOTFOUND', 'Person does not exist'))

@APP.route('/api/person/<person>/decks')
def person_decks_api(person):
def person_decks_api(person: str) -> Response:
p = ps.load_person_by_discord_id_or_username(person)
blob = {
'name': p.name,
Expand All @@ -72,12 +72,12 @@ def person_decks_api(person):
return return_json(blob)

@APP.route('/api/person/<person>/h2h')
def person_h2h_api(person):
def person_h2h_api(person: str) -> Response:
p = ps.load_person_by_discord_id_or_username(person)
return return_json(p.head_to_head)

@APP.route('/api/league/run/<person>')
def league_run_api(person):
def league_run_api(person: str) -> Response:
decks = league.active_decks_by(person)
if len(decks) == 0:
return return_json(None)
Expand Down
8 changes: 4 additions & 4 deletions decksite/main.py
@@ -1,7 +1,7 @@
import logging
import os
import urllib.parse
from typing import Optional, Union
from typing import List, Optional, Union

from flask import (Response, abort, g, make_response, redirect, request,
send_file, session, url_for)
Expand Down Expand Up @@ -85,7 +85,7 @@ def people() -> str:
def person(person_id):
p = ps.load_person_by_id_or_mtgo_username(person_id, season_id=get_season_id())
person_cards = cs.load_cards(person_id=p.id, season_id=get_season_id())
only_played_cards = []
only_played_cards: List[cs.Card] = []
view = Person(p, person_cards, only_played_cards)
return view.page()

Expand Down Expand Up @@ -356,12 +356,12 @@ def retire_deck() -> Union[str, Response]:

@APP.route('/rotation/changes/')
@SEASONS.route('/rotation/changes/')
def rotation_changes():
def rotation_changes() -> str:
view = RotationChanges(*oracle.pd_rotation_changes(get_season_id()), cs.playability())
return view.page()

@APP.route('/rotation/speculation/')
def rotation_speculation():
def rotation_speculation() -> str:
view = RotationChanges(oracle.if_todays_prices(out=False), oracle.if_todays_prices(out=True), cs.playability(), speculation=True)
return view.page()

Expand Down
2,463 changes: 2,459 additions & 4 deletions decksite/scrapers/test_gatherling.yaml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion decksite/views/resources.py
Expand Up @@ -15,5 +15,5 @@ def sections(self):
section['items'].append(item)
return sections

def page_title(self):
def page_title(self) -> str:
return 'Resources'
6 changes: 3 additions & 3 deletions decksite/views/rotation_changes.py
@@ -1,4 +1,4 @@
from typing import Any, Dict, List
from typing import Any, Dict, List, Sequence

from decksite.view import View
from magic import rotation
Expand All @@ -7,10 +7,10 @@

# pylint: disable=no-self-use
class RotationChanges(View):
def __init__(self, cards_in: List[Card], cards_out: List[Card], playability: Dict[str, float], speculation: bool = False) -> None:
def __init__(self, cards_in: Sequence[Card], cards_out: Sequence[Card], playability: Dict[str, float], speculation: bool = False) -> None:
super().__init__()
self.sections: List[Dict[str, Any]] = []
self.cards = cards_in + cards_out
self.cards = list(cards_in) + list(cards_out)
entries_in = [{'name': c.name, 'card': c, 'interestingness': rotation.interesting(playability, c, speculation)} for c in cards_in]
entries_out = [{'name': c.name, 'card': c, 'interestingness': rotation.interesting(playability, c, speculation, new=False)} for c in cards_out]
self.sections.append({'name': 'New this season', 'entries': entries_in, 'num_entries': len(entries_in)})
Expand Down
1 change: 1 addition & 0 deletions dev.py
Expand Up @@ -83,6 +83,7 @@ def mypy(argv: List[str], strict: bool = False) -> None:
]
if strict:
args.append('--check-untyped-defs') # Typecheck on all methods, not just typed ones.
# args.append('--disallow-untyped-defs') # All methods must be typed.
args.extend(argv or [
'.' # Invoke on the entire project.
])
Expand Down
9 changes: 5 additions & 4 deletions magic/oracle.py
Expand Up @@ -134,7 +134,8 @@ def insert_scryfall_card(sfcard: Dict, rebuild_cache: bool = True) -> None:
multiverse.update_cache()
CARDS_BY_NAME[sfcard['name']] = load_card(sfcard['name'])

def pd_rotation_changes(season_id):

def pd_rotation_changes(season_id: int) -> Tuple[Sequence[Card], Sequence[Card]]:
# It doesn't really make sense to do this for 'all' so just show current season in that case.
if season_id == 'all':
season_id = rotation.current_season_num()
Expand Down Expand Up @@ -165,7 +166,7 @@ def query_diff_formats(f1: int, f2: int) -> Sequence[Card]:
out = [Card(r) for r in rs]
return sorted(out, key=lambda card: card['name'])

def if_todays_prices(out=True):
def if_todays_prices(out: bool = True) -> List[Card]:
current_format = multiverse.get_format_id('Penny Dreadful')
if out:
not_clause = ''
Expand All @@ -183,5 +184,5 @@ def if_todays_prices(out=True):
""".format(not_clause=not_clause, format=current_format, compare=compare, layouts=', '.join([sqlescape(k) for k, v in multiverse.layouts().items() if v]))

rs = db().select(multiverse.cached_base_query(where=where))
out = [Card(r) for r in rs]
return sorted(out, key=lambda card: card['name'])
cards = [Card(r) for r in rs]
return sorted(cards, key=lambda card: card['name'])
2 changes: 1 addition & 1 deletion maintenance/deck_hash.py
Expand Up @@ -4,7 +4,7 @@
from decksite.database import db


def run():
def run() -> None:
all_decks = deck.load_decks()
for d in all_decks:
# Recalculate all hashes, in case they've changed. Or we've changed the default sort order.
Expand Down
3 changes: 2 additions & 1 deletion pylint_monolith/__init__.py
@@ -1,8 +1,9 @@
from pylint.lint import PyLinter
from .l18n_check import TranslationStringConstantsChecker
from .monolith_checker import MonolithChecker


def register(linter):
def register(linter: PyLinter) -> None:
"""Required method to auto register this checker.
Args:
Expand Down
11 changes: 7 additions & 4 deletions pylint_monolith/monolith_checker.py
@@ -1,10 +1,11 @@
from typing import Dict, List
from typing import Dict, List, Optional

import astroid
import isort
from pylint.checkers import BaseChecker
from pylint.checkers.utils import check_messages
from pylint.interfaces import IAstroidChecker
from pylint.lint import PyLinter

ACCEPTABLE_IMPORTS: Dict[str, List[str]] = {
'decksite': ['decksite', 'magic', 'shared', 'shared_web'],
Expand Down Expand Up @@ -39,14 +40,14 @@ class MonolithChecker(BaseChecker):

options = ()

def __init__(self, linter=None):
def __init__(self, linter: Optional[PyLinter] = None) -> None:
BaseChecker.__init__(self, linter)
self.isort_obj = isort.SortImports(
file_contents='',
)

@check_messages(*(msgs.keys()))
def visit_importfrom(self, node):
def visit_importfrom(self, node: astroid.nodes.ImportFrom) -> None:
"""triggered when a from statement is seen"""
# We only care about imports within the monolith.
basename = get_basename(node.modname)
Expand All @@ -60,6 +61,8 @@ def visit_importfrom(self, node):
parent_basename = get_basename(parent.name)
# Get the real name of the imported module
imported_module = _get_imported_module(node, basename)
if imported_module is None:
return
basename = get_basename(imported_module.name)
# print("{p} ({pb}) -> {i} ({c})".format(p=parent.name, pb=parent_basename, i=imported_module.name, c=import_category))
# verify
Expand All @@ -83,7 +86,7 @@ def get_basename(modname: str) -> str:
return '.' + modname.split('.')[1]
return modname.split('.')[0]

def _get_imported_module(importnode, modname):
def _get_imported_module(importnode: astroid.nodes.ImportFrom, modname: str) -> Optional[astroid.nodes.Module]:
try:
return importnode.do_import_module(modname)
except astroid.TooManyLevelsError:
Expand Down

0 comments on commit c472402

Please sign in to comment.