Skip to content

Commit

Permalink
reintroduce linting
Browse files Browse the repository at this point in the history
  • Loading branch information
the-infinity committed Oct 26, 2023
1 parent 1ac9bc3 commit 6b428f7
Show file tree
Hide file tree
Showing 12 changed files with 150 additions and 90 deletions.
43 changes: 43 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: lint

on:
push:
branches:
- '*'
pull_request:
branches:
- '*'
# make workflow "callable" by others
workflow_call:

jobs:
lint:
runs-on: ubuntu-latest
strategy:
matrix:
python-version:
- '3'
steps:
- name: checkout
uses: actions/checkout@v4
- name: setup Python v${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'

- name: pip install
run: pip install -r requirements.txt -r requirements-dev.txt

- name: lint using ruff
# We could also use the official GitHub Actions integration.
# https://beta.ruff.rs/docs/usage/#github-action
# uses: chartboost/ruff-action@v1
run: ruff --exclude webapp/converter --output-format github ./webapp

- name: format using black
# We could also use the official GitHub Actions integration.
# https://black.readthedocs.io/en/stable/integrations/github_actions.html
# uses: uses: psf/black@stable
run: |
black --exclude webapp/converter -S --check --diff ./webapp
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -179,9 +179,9 @@ open-coverage:
.PHONY: lint-fix
lint-fix:
$(FLASK_RUN) ruff --exclude webapp/converters --fix ./webapp
$(FLASK_RUN) black ./webapp
$(FLASK_RUN) black --exclude webapp/converter ./webapp

.PHONY: lint-check
lint-check:
$(FLASK_RUN) ruff --exclude webapp/converter ./webapp
$(FLASK_RUN) black -S --check --diff webapp
$(FLASK_RUN) black --exclude webapp/converter -S --check --diff webapp
71 changes: 42 additions & 29 deletions webapp/prometheus_api/prometheus_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,28 +66,38 @@ def get_metrics(self) -> str:
if source.status in [SourceStatus.DISABLED, SourceStatus.PROVISIONED]:
continue
if source.static_data_updated_at:
last_static_update_metrics.metrics.append(SourceMetric(
source=source.uid,
value=int((datetime.now(tz=timezone.utc) - source.static_data_updated_at).total_seconds()),
))
last_static_update_metrics.metrics.append(
SourceMetric(
source=source.uid,
value=int((datetime.now(tz=timezone.utc) - source.static_data_updated_at).total_seconds()),
)
)
if source.realtime_data_updated_at:
last_realtime_update_metrics.metrics.append(SourceMetric(
last_realtime_update_metrics.metrics.append(
SourceMetric(
source=source.uid,
value=int((datetime.now(tz=timezone.utc) - source.realtime_data_updated_at).total_seconds()),
)
)
source_static_parking_site_error_count.metrics.append(
SourceMetric(
source=source.uid,
value=int((datetime.now(tz=timezone.utc) - source.realtime_data_updated_at).total_seconds()),
))
source_static_parking_site_error_count.metrics.append(SourceMetric(
source=source.uid,
value=source.static_parking_site_error_count,
))
source_realtime_parking_site_error_count.metrics.append(SourceMetric(
source=source.uid,
value=source.realtime_parking_site_error_count,
))
if source.status == SourceStatus.FAILED:
failed_sources.metrics.append(SourceMetric(
value=source.static_parking_site_error_count,
)
)
source_realtime_parking_site_error_count.metrics.append(
SourceMetric(
source=source.uid,
value=1,
))
value=source.realtime_parking_site_error_count,
)
)
if source.status == SourceStatus.FAILED:
failed_sources.metrics.append(
SourceMetric(
source=source.uid,
value=1,
)
)

metrics = (
last_static_update_metrics.to_metrics()
Expand Down Expand Up @@ -117,17 +127,20 @@ def get_parking_site_metrics(self) -> list[str]:
)

for parking_site in parking_sites:
parking_site_static_capacity.metrics.append(ParkingSiteMetric(
parking_site=parking_site.original_uid,
source=parking_site.source.uid,
value=parking_site.capacity,
))
if parking_site.has_realtime_data:
parking_site_realtime_capacity.metrics.append(ParkingSiteMetric(
parking_site_static_capacity.metrics.append(
ParkingSiteMetric(
parking_site=parking_site.original_uid,
source=parking_site.source.uid,
value=parking_site.realtime_capacity,
))
value=parking_site.capacity,
)
)
if parking_site.has_realtime_data:
parking_site_realtime_capacity.metrics.append(
ParkingSiteMetric(
parking_site=parking_site.original_uid,
source=parking_site.source.uid,
value=parking_site.realtime_capacity,
)
)

return parking_site_static_capacity.to_metrics() + parking_site_realtime_capacity.to_metrics()

7 changes: 3 additions & 4 deletions webapp/prometheus_api/prometheus_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ class Metrics:
metrics: List[BaseMetric] = field(default_factory=list)

def to_metrics(self) -> List[str]:
return (
[f'# HELP {self.identifier} {self.help}', f'# TYPE {self.identifier} {self.type.name}']
+ [metric.to_metric(self.identifier) for metric in self.metrics]
)
return [f'# HELP {self.identifier} {self.help}', f'# TYPE {self.identifier} {self.type.name}'] + [
metric.to_metric(self.identifier) for metric in self.metrics
]
1 change: 0 additions & 1 deletion webapp/prometheus_api/prometheus_rest_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,3 @@ def get(self):
response = make_response(response_string)
response.mimetype = 'text/plain; version=0.0.4'
return response

98 changes: 49 additions & 49 deletions webapp/public_rest_api/parking_sites/parking_sites_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@
source_schema = JsonSchema(
title='Source',
properties={
'uid': StringField(minLength=1, maxLength=256),
'name': StringField(maxLength=256, required=False),
'public_url': UriField(maxLength=4096),
'last_import': DateTimeField(required=False),
'attribution_license': StringField(required=False),
'attribution_contributor': StringField(maxLength=256, required=False),
'attribution_url': StringField(maxLength=256, required=False),
'uid': StringField(minLength=1, maxLength=256),
'name': StringField(maxLength=256, required=False),
'public_url': UriField(maxLength=4096),
'last_import': DateTimeField(required=False),
'attribution_license': StringField(required=False),
'attribution_contributor': StringField(maxLength=256, required=False),
'attribution_url': StringField(maxLength=256, required=False),
},
)

Expand All @@ -37,48 +37,48 @@
parking_site_schema = JsonSchema(
title='ParkingSite',
properties={
'source_id': IntegerField(minimum=1),
'original_uid': StringField(maxLength=256),
'name': StringField(maxLength=256),
'operator_name': StringField(maxLength=256, required=False),
'public_url': UriField(maxLength=4096, required=False),
'address': StringField(maxLength=512, required=False),
'description': StringField(maxLength=4096, required=False),
'type': EnumField(enum=ParkingSiteType),
'max_stay': IntegerField(minimum=0, required=False),
'has_lighting': BooleanField(required=False),
'park_and_ride_type': ArrayField(items=EnumField(enum=ParkAndRideType), required=False),
'is_supervised': BooleanField(required=False),
'has_realtime_data': BooleanField(default=False),
'static_data_updated_at': DateTimeField(),
'realtime_opening_status': DateTimeField(required=False),
'lat': DecimalField(precision=10, scale=7),
'lon': DecimalField(precision=10, scale=7),
'capacity': IntegerField(minimum=0),
'capacity_disabled': IntegerField(minimum=0, required=False),
'capacity_woman': IntegerField(minimum=0, required=False),
'capacity_family': IntegerField(minimum=0, required=False),
'capacity_charging': IntegerField(minimum=0, required=False),
'capacity_carsharing': IntegerField(minimum=0, required=False),
'capacity_truck': IntegerField(minimum=0, required=False),
'capacity_bus': IntegerField(minimum=0, required=False),
'realtime_capacity': IntegerField(minimum=0, required=False),
'realtime_capacity_disabled': IntegerField(minimum=0, required=False),
'realtime_capacity_woman': IntegerField(minimum=0, required=False),
'realtime_capacity_family': IntegerField(minimum=0, required=False),
'realtime_capacity_charging': IntegerField(minimum=0, required=False),
'realtime_capacity_carsharing': IntegerField(minimum=0, required=False),
'realtime_capacity_truck': IntegerField(minimum=0, required=False),
'realtime_capacity_bus': IntegerField(minimum=0, required=False),
'realtime_free_capacity': IntegerField(minimum=0, required=False),
'realtime_free_capacity_disabled': IntegerField(minimum=0, required=False),
'realtime_free_capacity_woman': IntegerField(minimum=0, required=False),
'realtime_free_capacity_family': IntegerField(minimum=0, required=False),
'realtime_free_capacity_charging': IntegerField(minimum=0, required=False),
'realtime_free_capacity_carsharing': IntegerField(minimum=0, required=False),
'realtime_free_capacity_truck': IntegerField(minimum=0, required=False),
'realtime_free_capacity_bus': IntegerField(minimum=0, required=False),
'opening_hours': StringField(maxLength=512, required=False, description='OSM opening_hours format'),
'source_id': IntegerField(minimum=1),
'original_uid': StringField(maxLength=256),
'name': StringField(maxLength=256),
'operator_name': StringField(maxLength=256, required=False),
'public_url': UriField(maxLength=4096, required=False),
'address': StringField(maxLength=512, required=False),
'description': StringField(maxLength=4096, required=False),
'type': EnumField(enum=ParkingSiteType),
'max_stay': IntegerField(minimum=0, required=False),
'has_lighting': BooleanField(required=False),
'park_and_ride_type': ArrayField(items=EnumField(enum=ParkAndRideType), required=False),
'is_supervised': BooleanField(required=False),
'has_realtime_data': BooleanField(default=False),
'static_data_updated_at': DateTimeField(),
'realtime_opening_status': DateTimeField(required=False),
'lat': DecimalField(precision=10, scale=7),
'lon': DecimalField(precision=10, scale=7),
'capacity': IntegerField(minimum=0),
'capacity_disabled': IntegerField(minimum=0, required=False),
'capacity_woman': IntegerField(minimum=0, required=False),
'capacity_family': IntegerField(minimum=0, required=False),
'capacity_charging': IntegerField(minimum=0, required=False),
'capacity_carsharing': IntegerField(minimum=0, required=False),
'capacity_truck': IntegerField(minimum=0, required=False),
'capacity_bus': IntegerField(minimum=0, required=False),
'realtime_capacity': IntegerField(minimum=0, required=False),
'realtime_capacity_disabled': IntegerField(minimum=0, required=False),
'realtime_capacity_woman': IntegerField(minimum=0, required=False),
'realtime_capacity_family': IntegerField(minimum=0, required=False),
'realtime_capacity_charging': IntegerField(minimum=0, required=False),
'realtime_capacity_carsharing': IntegerField(minimum=0, required=False),
'realtime_capacity_truck': IntegerField(minimum=0, required=False),
'realtime_capacity_bus': IntegerField(minimum=0, required=False),
'realtime_free_capacity': IntegerField(minimum=0, required=False),
'realtime_free_capacity_disabled': IntegerField(minimum=0, required=False),
'realtime_free_capacity_woman': IntegerField(minimum=0, required=False),
'realtime_free_capacity_family': IntegerField(minimum=0, required=False),
'realtime_free_capacity_charging': IntegerField(minimum=0, required=False),
'realtime_free_capacity_carsharing': IntegerField(minimum=0, required=False),
'realtime_free_capacity_truck': IntegerField(minimum=0, required=False),
'realtime_free_capacity_bus': IntegerField(minimum=0, required=False),
'opening_hours': StringField(maxLength=512, required=False, description='OSM opening_hours format'),
},
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
ImportDatasetException,
ImportException,
)

from .parking_site_import_xlsx_validator import ParkingSiteInput


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,17 @@
AnyOfValidator,
DecimalValidator,
IntegerValidator,
NumericValidator,
StringValidator,
UrlValidator, NumericValidator,
UrlValidator,
)

from webapp.common.validation import (
ExcelNoneable,
ExcelTimeValidator,
ExtendedBooleanValidator,
NumberCastingStringValidator,
GermanDurationIntegerValidator,
NumberCastingStringValidator,
)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from webapp.models import ParkingSite
from webapp.models.parking_site import OpeningStatus, ParkingSiteType

from .parking_site_generic_import_validator import LotDataInput, LotInfoInput


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
ConverterMissingException,
ImportDatasetException,
)

from .parking_site_generic_import_mapper import ParkingSiteGenericImportMapper
from .parking_site_generic_import_validator import LotDataInput, LotInfoInput

Expand All @@ -31,7 +32,7 @@ class ParkingSiteGenericImportService(BaseService):
source_repository: SourceRepository
parking_site_repository: ParkingSiteRepository

converters: dict[str, ]
converters: dict

lot_info_validator = DataclassValidator(LotInfoInput)
lot_data_validator = DataclassValidator(LotDataInput)
Expand Down Expand Up @@ -100,7 +101,7 @@ def update_source_static(self, source_uid: str):
return

if getattr(lot_infos, 'lot_error_count', None) is not None:
source.realtime_parking_site_error_count = getattr(lot_infos, 'lot_error_count')
source.realtime_parking_site_error_count = lot_infos.lot_error_count

for lot_info in lot_infos:
try:
Expand Down Expand Up @@ -165,7 +166,7 @@ def update_source_realtime(self, source_uid: str):
return

if getattr(lot_datasets, 'lot_error_count', None) is not None:
source.realtime_parking_site_error_count = getattr(lot_datasets, 'lot_error_count')
source.realtime_parking_site_error_count = lot_datasets.lot_error_count

for lot_data in lot_datasets:
try:
Expand Down
1 change: 1 addition & 0 deletions webapp/services/tasks/generic_import_heartbeat_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from webapp.dependencies import dependencies
from webapp.extensions import celery
from webapp.services.import_service import ParkingSiteGenericImportService

from .base_task import BaseTask


Expand Down
1 change: 1 addition & 0 deletions webapp/services/tasks/task_runner_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from webapp.common.config import ConfigHelper
from webapp.common.logger import Logger
from webapp.extensions import celery

from .base_task import BaseTask
from .generic_import_heartbeat_task import RunGenericRealtimeImportTask

Expand Down

0 comments on commit 6b428f7

Please sign in to comment.