Solve all issues detected by PyCharm
- as of September 2021, PyCharm is used to write some of the code
- PyCharm's built-in code styler, linter, and type checker issued
some warnings that are resolved in this commit
+ spelling mistakes
+ all instance attributes must be specified explicitly
in a class's __init__() method
=> use `functools.cached_property` for caching
+ make `tuple`s explicit with `(...)`
+ one test failed randomly although everything is ok
=> adjust the fixture's return value (stub for Google Directions API)
+ reformulate SQL so that PyCharm can understand the symbols
This commit is contained in:
parent
1268aba017
commit
1c19da2f70
19 changed files with 136 additions and 151 deletions
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import functools
|
||||
from typing import List
|
||||
|
||||
import folium
|
||||
|
|
@ -68,66 +69,58 @@ class Pixel(meta.Base):
|
|||
"""The area of a pixel in square kilometers."""
|
||||
return self.grid.pixel_area
|
||||
|
||||
@property
|
||||
@functools.cached_property
|
||||
def northeast(self) -> utils.Location:
|
||||
"""The pixel's northeast corner, relative to `.grid.city.southwest`.
|
||||
|
||||
Implementation detail: This property is cached as none of the
|
||||
underlying attributes to calculate the value are to be changed.
|
||||
"""
|
||||
if not hasattr(self, '_northeast'): # noqa:WPS421 note:d334120e
|
||||
# The origin is the southwest corner of the `.grid.city`'s viewport.
|
||||
easting_origin = self.grid.city.southwest.easting
|
||||
northing_origin = self.grid.city.southwest.northing
|
||||
easting, northing = (
|
||||
self.grid.city.southwest.easting + ((self.n_x + 1) * self.side_length),
|
||||
self.grid.city.southwest.northing + ((self.n_y + 1) * self.side_length),
|
||||
)
|
||||
latitude, longitude = utm.to_latlon(
|
||||
easting, northing, *self.grid.city.southwest.zone_details,
|
||||
)
|
||||
|
||||
# `+1` as otherwise we get the pixel's `.southwest` corner.
|
||||
easting = easting_origin + ((self.n_x + 1) * self.side_length)
|
||||
northing = northing_origin + ((self.n_y + 1) * self.side_length)
|
||||
zone, band = self.grid.city.southwest.zone_details
|
||||
latitude, longitude = utm.to_latlon(easting, northing, zone, band)
|
||||
location = utils.Location(latitude, longitude)
|
||||
location.relate_to(self.grid.city.southwest)
|
||||
|
||||
self._northeast = utils.Location(latitude, longitude)
|
||||
self._northeast.relate_to(self.grid.city.southwest)
|
||||
return location
|
||||
|
||||
return self._northeast
|
||||
|
||||
@property
|
||||
@functools.cached_property
|
||||
def southwest(self) -> utils.Location:
|
||||
"""The pixel's northeast corner, relative to `.grid.city.southwest`.
|
||||
"""The pixel's southwest corner, relative to `.grid.city.southwest`.
|
||||
|
||||
Implementation detail: This property is cached as none of the
|
||||
underlying attributes to calculate the value are to be changed.
|
||||
"""
|
||||
if not hasattr(self, '_southwest'): # noqa:WPS421 note:d334120e
|
||||
# The origin is the southwest corner of the `.grid.city`'s viewport.
|
||||
easting_origin = self.grid.city.southwest.easting
|
||||
northing_origin = self.grid.city.southwest.northing
|
||||
easting, northing = (
|
||||
self.grid.city.southwest.easting + (self.n_x * self.side_length),
|
||||
self.grid.city.southwest.northing + (self.n_y * self.side_length),
|
||||
)
|
||||
latitude, longitude = utm.to_latlon(
|
||||
easting, northing, *self.grid.city.southwest.zone_details,
|
||||
)
|
||||
|
||||
easting = easting_origin + (self.n_x * self.side_length)
|
||||
northing = northing_origin + (self.n_y * self.side_length)
|
||||
zone, band = self.grid.city.southwest.zone_details
|
||||
latitude, longitude = utm.to_latlon(easting, northing, zone, band)
|
||||
location = utils.Location(latitude, longitude)
|
||||
location.relate_to(self.grid.city.southwest)
|
||||
|
||||
self._southwest = utils.Location(latitude, longitude)
|
||||
self._southwest.relate_to(self.grid.city.southwest)
|
||||
return location
|
||||
|
||||
return self._southwest
|
||||
|
||||
@property
|
||||
@functools.cached_property
|
||||
def restaurants(self) -> List[db.Restaurant]: # pragma: no cover
|
||||
"""Obtain all `Restaurant`s in `self`."""
|
||||
if not hasattr(self, '_restaurants'): # noqa:WPS421 note:d334120e
|
||||
self._restaurants = ( # noqa:ECE001
|
||||
db.session.query(db.Restaurant)
|
||||
.join(
|
||||
db.AddressPixelAssociation,
|
||||
db.Restaurant.address_id == db.AddressPixelAssociation.address_id,
|
||||
)
|
||||
.filter(db.AddressPixelAssociation.pixel_id == self.id)
|
||||
.all()
|
||||
return ( # noqa:ECE001
|
||||
db.session.query(db.Restaurant)
|
||||
.join(
|
||||
db.AddressPixelAssociation,
|
||||
db.Restaurant.address_id == db.AddressPixelAssociation.address_id,
|
||||
)
|
||||
|
||||
return self._restaurants
|
||||
.filter(db.AddressPixelAssociation.pixel_id == self.id)
|
||||
.all()
|
||||
)
|
||||
|
||||
def clear_map(self) -> Pixel: # pragma: no cover
|
||||
"""Shortcut to the `.city.clear_map()` method.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue