Run black on py

This commit is contained in:
2022-04-19 14:25:29 +02:00
parent 13cc531c5d
commit b925af1e7a
13 changed files with 95 additions and 86 deletions

View File

@@ -26,9 +26,7 @@ class Consist(models.Model):
class ConsistItem(models.Model): class ConsistItem(models.Model):
consist = models.ForeignKey( consist = models.ForeignKey(
Consist, Consist, on_delete=models.CASCADE, related_name="consist_item"
on_delete=models.CASCADE,
related_name="consist_item"
) )
rolling_stock = models.ForeignKey(RollingStock, on_delete=models.CASCADE) rolling_stock = models.ForeignKey(RollingStock, on_delete=models.CASCADE)
order = models.PositiveIntegerField(default=0, blank=False, null=False) order = models.PositiveIntegerField(default=0, blank=False, null=False)

View File

@@ -6,23 +6,16 @@ from solo.models import SingletonModel
class DriverConfiguration(SingletonModel): class DriverConfiguration(SingletonModel):
remote_host = models.GenericIPAddressField( remote_host = models.GenericIPAddressField(
protocol="IPv4", protocol="IPv4", default="192.168.4.1"
default="192.168.4.1"
) )
remote_port = models.SmallIntegerField(default=2560) remote_port = models.SmallIntegerField(default=2560)
timeout = models.SmallIntegerField(default=250) timeout = models.SmallIntegerField(default=250)
network = models.GenericIPAddressField( network = models.GenericIPAddressField(
protocol="IPv4", protocol="IPv4", default="192.168.4.0", blank=True, null=True
default="192.168.4.0",
blank=True,
null=True
) )
subnet_mask = models.GenericIPAddressField( subnet_mask = models.GenericIPAddressField(
protocol="IPv4", protocol="IPv4", default="255.255.255.0", blank=True, null=True
default="255.255.255.0",
blank=True,
null=True
) )
def __str__(self): def __str__(self):
@@ -31,8 +24,7 @@ class DriverConfiguration(SingletonModel):
def clean(self, *args, **kwargs): def clean(self, *args, **kwargs):
if self.network: if self.network:
try: try:
IPv4Network( IPv4Network("{0}/{1}".format(self.network, self.subnet_mask))
"{0}/{1}".format(self.network, self.subnet_mask))
except ValueError as e: except ValueError as e:
raise ValidationError(e) raise ValidationError(e)
super().clean(*args, **kwargs) super().clean(*args, **kwargs)

View File

@@ -7,7 +7,7 @@ from rest_framework.response import Response
from rest_framework.permissions import ( from rest_framework.permissions import (
IsAuthenticated, IsAuthenticated,
BasePermission, BasePermission,
SAFE_METHODS SAFE_METHODS,
) )
from ram.parsers import PlainTextParser from ram.parsers import PlainTextParser
@@ -40,16 +40,15 @@ class Firewall(BasePermission):
if not config.network: if not config.network:
return request.method in SAFE_METHODS return request.method in SAFE_METHODS
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
if x_forwarded_for: if x_forwarded_for:
ip = IPv4Address(x_forwarded_for.split(',')[0]) ip = IPv4Address(x_forwarded_for.split(",")[0])
else: else:
ip = IPv4Address(request.META.get("REMOTE_ADDR")) ip = IPv4Address(request.META.get("REMOTE_ADDR"))
network = IPv4Network("{0}/{1}".format( network = IPv4Network(
config.network, "{0}/{1}".format(config.network, config.subnet_mask)
config.subnet_mask )
))
# accept IP configured is settings or localhost # accept IP configured is settings or localhost
if ip in network or ip in IPv4Network("127.0.0.0/8"): if ip in network or ip in IPv4Network("127.0.0.0/8"):
@@ -101,6 +100,7 @@ class Function(APIView):
""" """
Send "Function" commands to a valid DCC address Send "Function" commands to a valid DCC address
""" """
permission_classes = [IsAuthenticated | Firewall] permission_classes = [IsAuthenticated | Firewall]
def put(self, request, address): def put(self, request, address):
@@ -117,6 +117,7 @@ class Cab(APIView):
""" """
Send "Cab" commands to a valid DCC address Send "Cab" commands to a valid DCC address
""" """
permission_classes = [IsAuthenticated | Firewall] permission_classes = [IsAuthenticated | Firewall]
def put(self, request, address): def put(self, request, address):
@@ -132,6 +133,7 @@ class Infra(APIView):
""" """
Send "Infra" commands to a valid DCC address Send "Infra" commands to a valid DCC address
""" """
permission_classes = [IsAuthenticated | Firewall] permission_classes = [IsAuthenticated | Firewall]
def put(self, request): def put(self, request):
@@ -147,6 +149,7 @@ class Emergency(APIView):
""" """
Send an "Emergency" stop, no matter the HTTP method used Send an "Emergency" stop, no matter the HTTP method used
""" """
permission_classes = [IsAuthenticated | Firewall] permission_classes = [IsAuthenticated | Firewall]
def put(self, request): def put(self, request):

View File

@@ -2,5 +2,5 @@ from django.apps import AppConfig
class PortalConfig(AppConfig): class PortalConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField' default_auto_field = "django.db.models.BigAutoField"
name = 'portal' name = "portal"

View File

@@ -7,14 +7,14 @@ from solo.models import SingletonModel
class SiteConfiguration(SingletonModel): class SiteConfiguration(SingletonModel):
site_name = models.CharField( site_name = models.CharField(
max_length=256, max_length=256, default="Railroad Assets Manager"
default="Railroad Assets Manager") )
site_author = models.CharField(max_length=256, blank=True) site_author = models.CharField(max_length=256, blank=True)
about = models.TextField(blank=True) about = models.TextField(blank=True)
items_per_page = models.CharField( items_per_page = models.CharField(
max_length=2, choices=[ max_length=2,
(str(x * 3), str(x * 3)) for x in range(2, 11)], choices=[(str(x * 3), str(x * 3)) for x in range(2, 11)],
default='6' default="6",
) )
footer = models.TextField(blank=True) footer = models.TextField(blank=True)
footer_extended = models.TextField(blank=True) footer_extended = models.TextField(blank=True)

View File

@@ -9,4 +9,4 @@ register = template.Library()
@register.filter @register.filter
@stringfilter @stringfilter
def markdown(value): def markdown(value):
return md.markdown(value, extensions=['markdown.extensions.fenced_code']) return md.markdown(value, extensions=["markdown.extensions.fenced_code"])

View File

@@ -3,16 +3,20 @@ from django.urls import path
from portal.views import GetHome, GetHomeFiltered, GetRollingStock from portal.views import GetHome, GetHomeFiltered, GetRollingStock
urlpatterns = [ urlpatterns = [
path("", GetHome.as_view(), name='index'), path("", GetHome.as_view(), name="index"),
path("<int:page>", GetHome.as_view(), name='index_pagination'), path("<int:page>", GetHome.as_view(), name="index_pagination"),
path( path(
"search", "search",
GetHomeFiltered.as_view(http_method_names=['post']), GetHomeFiltered.as_view(http_method_names=["post"]),
name='index_filtered' name="index_filtered",
), ),
path("search/<str:search>", path(
GetHomeFiltered.as_view(), name='index_filtered'), "search/<str:search>", GetHomeFiltered.as_view(), name="index_filtered"
path("search/<str:search>/<int:page>", ),
GetHomeFiltered.as_view(), name='index_filtered_pagination'), path(
path("<uuid:uuid>", GetRollingStock.as_view(), name='rolling_stock'), "search/<str:search>/<int:page>",
GetHomeFiltered.as_view(),
name="index_filtered_pagination",
),
path("<uuid:uuid>", GetRollingStock.as_view(), name="rolling_stock"),
] ]

View File

@@ -2,5 +2,5 @@ from django.apps import apps
def get_site_conf(): def get_site_conf():
SiteConfiguration = apps.get_model('portal', 'SiteConfiguration') SiteConfiguration = apps.get_model("portal", "SiteConfiguration")
return SiteConfiguration.get_solo() return SiteConfiguration.get_solo()

View File

@@ -24,9 +24,7 @@ class GetHome(View):
except EmptyPage: except EmptyPage:
rolling_stock = paginator.page(paginator.num_pages) rolling_stock = paginator.page(paginator.num_pages)
return render(request, "home.html", { return render(request, "home.html", {"rolling_stock": rolling_stock})
"rolling_stock": rolling_stock
})
class GetHomeFiltered(View): class GetHomeFiltered(View):
@@ -37,17 +35,23 @@ class GetHomeFiltered(View):
# query = { # query = {
# _filter: _value # _filter: _value
# } # }
query = reduce(operator.or_, (Q( query = reduce(
Q(rolling_class__identifier__icontains=s) | operator.or_,
Q(rolling_class__description__icontains=s) | (
Q(rolling_class__type__type__icontains=s) | Q(
Q(road_number__icontains=s) | Q(rolling_class__identifier__icontains=s)
Q(rolling_class__company__name__icontains=s) | | Q(rolling_class__description__icontains=s)
Q(rolling_class__company__country__icontains=s) | | Q(rolling_class__type__type__icontains=s)
Q(manufacturer__name__icontains=s) | | Q(road_number__icontains=s)
Q(scale__scale__icontains=s) | | Q(rolling_class__company__name__icontains=s)
Q(tags__name__icontains=s) | Q(rolling_class__company__country__icontains=s)
) for s in search.split())) | Q(manufacturer__name__icontains=s)
| Q(scale__scale__icontains=s)
| Q(tags__name__icontains=s)
)
for s in search.split()
),
)
rolling_stock = RollingStock.objects.filter(query) rolling_stock = RollingStock.objects.filter(query)
paginator = Paginator(rolling_stock, site_conf.items_per_page) paginator = Paginator(rolling_stock, site_conf.items_per_page)
@@ -63,10 +67,11 @@ class GetHomeFiltered(View):
def get(self, request, search, page=1): def get(self, request, search, page=1):
rolling_stock = self.run_search(request, search, page) rolling_stock = self.run_search(request, search, page)
return render(request, "search.html", { return render(
"search": search, request,
"rolling_stock": rolling_stock "search.html",
}) {"search": search, "rolling_stock": rolling_stock},
)
def post(self, request, page=1): def post(self, request, page=1):
search = request.POST.get("search") search = request.POST.get("search")
@@ -74,16 +79,21 @@ class GetHomeFiltered(View):
raise Http404 raise Http404
rolling_stock = self.run_search(request, search, page) rolling_stock = self.run_search(request, search, page)
return render(request, "search.html", { return render(
"search": search, request,
"rolling_stock": rolling_stock "search.html",
}) {"search": search, "rolling_stock": rolling_stock},
)
class GetRollingStock(View): class GetRollingStock(View):
def get(self, request, uuid): def get(self, request, uuid):
rolling_stock = RollingStock.objects.get(uuid=uuid) rolling_stock = RollingStock.objects.get(uuid=uuid)
return render(request, "page.html", { return render(
"rolling_stock": rolling_stock, request,
}) "page.html",
{
"rolling_stock": rolling_stock,
},
)

View File

@@ -1,4 +1,4 @@
from ram.utils import git_suffix from ram.utils import git_suffix
__version__ = '0.0.1' __version__ = "0.0.1"
__version__ += git_suffix(__file__) __version__ += git_suffix(__file__)

View File

@@ -152,10 +152,7 @@ DECODER_INTERFACES = [
(5, "Next18/Next18S"), (5, "Next18/Next18S"),
] ]
MANUFACTURER_TYPES = [ MANUFACTURER_TYPES = [("model", "Model"), ("real", "Real")]
("model", "Model"),
("real", "Real")
]
ROLLING_STOCK_TYPES = [ ROLLING_STOCK_TYPES = [
("engine", "Engine"), ("engine", "Engine"),

View File

@@ -11,13 +11,14 @@ def git_suffix(fname):
""" """
try: try:
gh = subprocess.check_output( gh = subprocess.check_output(
['git', 'rev-parse', '--short', 'HEAD'], ["git", "rev-parse", "--short", "HEAD"],
stderr=open(os.devnull, 'w')).strip() stderr=open(os.devnull, "w"),
gh = "-git" + gh.decode() if gh else '' ).strip()
gh = "-git" + gh.decode() if gh else ""
except Exception: except Exception:
# trapping everything on purpose; git may not be installed or it # trapping everything on purpose; git may not be installed or it
# may not work properly # may not work properly
gh = '' gh = ""
return gh return gh

View File

@@ -2,6 +2,7 @@ import os
from uuid import uuid4 from uuid import uuid4
from django.db import models from django.db import models
from django.urls import reverse from django.urls import reverse
# from django.core.files.storage import FileSystemStorage # from django.core.files.storage import FileSystemStorage
# from django.dispatch import receiver # from django.dispatch import receiver
@@ -32,8 +33,11 @@ class RollingClass(models.Model):
) )
description = models.CharField(max_length=256, blank=True) description = models.CharField(max_length=256, blank=True)
manufacturer = models.ForeignKey( manufacturer = models.ForeignKey(
Manufacturer, on_delete=models.CASCADE, null=True, blank=True, Manufacturer,
limit_choices_to={"category": "real"} on_delete=models.CASCADE,
null=True,
blank=True,
limit_choices_to={"category": "real"},
) )
class Meta: class Meta:
@@ -74,8 +78,11 @@ class RollingStock(models.Model):
) )
road_number = models.CharField(max_length=128, unique=False) road_number = models.CharField(max_length=128, unique=False)
manufacturer = models.ForeignKey( manufacturer = models.ForeignKey(
Manufacturer, on_delete=models.CASCADE, null=True, blank=True, Manufacturer,
limit_choices_to={"category": "model"} on_delete=models.CASCADE,
null=True,
blank=True,
limit_choices_to={"category": "model"},
) )
scale = models.ForeignKey(Scale, on_delete=models.CASCADE) scale = models.ForeignKey(Scale, on_delete=models.CASCADE)
sku = models.CharField(max_length=32, blank=True) sku = models.CharField(max_length=32, blank=True)
@@ -112,9 +119,7 @@ class RollingStock(models.Model):
class RollingStockDocument(models.Model): class RollingStockDocument(models.Model):
rolling_stock = models.ForeignKey( rolling_stock = models.ForeignKey(
RollingStock, RollingStock, on_delete=models.CASCADE, related_name="document"
on_delete=models.CASCADE,
related_name="document"
) )
description = models.CharField(max_length=128, blank=True) description = models.CharField(max_length=128, blank=True)
file = models.FileField(upload_to="files/", null=True, blank=True) file = models.FileField(upload_to="files/", null=True, blank=True)
@@ -131,9 +136,7 @@ class RollingStockDocument(models.Model):
class RollingStockImage(models.Model): class RollingStockImage(models.Model):
rolling_stock = models.ForeignKey( rolling_stock = models.ForeignKey(
RollingStock, RollingStock, on_delete=models.CASCADE, related_name="image"
on_delete=models.CASCADE,
related_name="image"
) )
image = models.ImageField(upload_to="images/", null=True, blank=True) image = models.ImageField(upload_to="images/", null=True, blank=True)
is_thumbnail = models.BooleanField() is_thumbnail = models.BooleanField()
@@ -149,7 +152,8 @@ class RollingStockImage(models.Model):
def save(self, **kwargs): def save(self, **kwargs):
if self.is_thumbnail: if self.is_thumbnail:
RollingStockImage.objects.filter( RollingStockImage.objects.filter(
rolling_stock=self.rolling_stock).update(is_thumbnail=False) rolling_stock=self.rolling_stock
).update(is_thumbnail=False)
super().save(**kwargs) super().save(**kwargs)
@@ -159,7 +163,7 @@ class RollingStockProperty(models.Model):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name="property", related_name="property",
null=False, null=False,
blank=False blank=False,
) )
property = models.ForeignKey(Property, on_delete=models.CASCADE) property = models.ForeignKey(Property, on_delete=models.CASCADE)
value = models.CharField(max_length=256) value = models.CharField(max_length=256)