mirror of
https://github.com/daniviga/django-ram.git
synced 2025-08-03 20:57:50 +02:00
Run black on py
This commit is contained in:
@@ -26,9 +26,7 @@ class Consist(models.Model):
|
||||
|
||||
class ConsistItem(models.Model):
|
||||
consist = models.ForeignKey(
|
||||
Consist,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="consist_item"
|
||||
Consist, on_delete=models.CASCADE, related_name="consist_item"
|
||||
)
|
||||
rolling_stock = models.ForeignKey(RollingStock, on_delete=models.CASCADE)
|
||||
order = models.PositiveIntegerField(default=0, blank=False, null=False)
|
||||
|
@@ -6,23 +6,16 @@ from solo.models import SingletonModel
|
||||
|
||||
class DriverConfiguration(SingletonModel):
|
||||
remote_host = models.GenericIPAddressField(
|
||||
protocol="IPv4",
|
||||
default="192.168.4.1"
|
||||
protocol="IPv4", default="192.168.4.1"
|
||||
)
|
||||
remote_port = models.SmallIntegerField(default=2560)
|
||||
timeout = models.SmallIntegerField(default=250)
|
||||
|
||||
network = models.GenericIPAddressField(
|
||||
protocol="IPv4",
|
||||
default="192.168.4.0",
|
||||
blank=True,
|
||||
null=True
|
||||
protocol="IPv4", default="192.168.4.0", blank=True, null=True
|
||||
)
|
||||
subnet_mask = models.GenericIPAddressField(
|
||||
protocol="IPv4",
|
||||
default="255.255.255.0",
|
||||
blank=True,
|
||||
null=True
|
||||
protocol="IPv4", default="255.255.255.0", blank=True, null=True
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
@@ -31,8 +24,7 @@ class DriverConfiguration(SingletonModel):
|
||||
def clean(self, *args, **kwargs):
|
||||
if self.network:
|
||||
try:
|
||||
IPv4Network(
|
||||
"{0}/{1}".format(self.network, self.subnet_mask))
|
||||
IPv4Network("{0}/{1}".format(self.network, self.subnet_mask))
|
||||
except ValueError as e:
|
||||
raise ValidationError(e)
|
||||
super().clean(*args, **kwargs)
|
||||
|
@@ -7,7 +7,7 @@ from rest_framework.response import Response
|
||||
from rest_framework.permissions import (
|
||||
IsAuthenticated,
|
||||
BasePermission,
|
||||
SAFE_METHODS
|
||||
SAFE_METHODS,
|
||||
)
|
||||
|
||||
from ram.parsers import PlainTextParser
|
||||
@@ -40,16 +40,15 @@ class Firewall(BasePermission):
|
||||
if not config.network:
|
||||
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:
|
||||
ip = IPv4Address(x_forwarded_for.split(',')[0])
|
||||
ip = IPv4Address(x_forwarded_for.split(",")[0])
|
||||
else:
|
||||
ip = IPv4Address(request.META.get("REMOTE_ADDR"))
|
||||
|
||||
network = IPv4Network("{0}/{1}".format(
|
||||
config.network,
|
||||
config.subnet_mask
|
||||
))
|
||||
network = IPv4Network(
|
||||
"{0}/{1}".format(config.network, config.subnet_mask)
|
||||
)
|
||||
|
||||
# accept IP configured is settings or localhost
|
||||
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
|
||||
"""
|
||||
|
||||
permission_classes = [IsAuthenticated | Firewall]
|
||||
|
||||
def put(self, request, address):
|
||||
@@ -117,6 +117,7 @@ class Cab(APIView):
|
||||
"""
|
||||
Send "Cab" commands to a valid DCC address
|
||||
"""
|
||||
|
||||
permission_classes = [IsAuthenticated | Firewall]
|
||||
|
||||
def put(self, request, address):
|
||||
@@ -132,6 +133,7 @@ class Infra(APIView):
|
||||
"""
|
||||
Send "Infra" commands to a valid DCC address
|
||||
"""
|
||||
|
||||
permission_classes = [IsAuthenticated | Firewall]
|
||||
|
||||
def put(self, request):
|
||||
@@ -147,6 +149,7 @@ class Emergency(APIView):
|
||||
"""
|
||||
Send an "Emergency" stop, no matter the HTTP method used
|
||||
"""
|
||||
|
||||
permission_classes = [IsAuthenticated | Firewall]
|
||||
|
||||
def put(self, request):
|
||||
|
@@ -2,5 +2,5 @@ from django.apps import AppConfig
|
||||
|
||||
|
||||
class PortalConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'portal'
|
||||
default_auto_field = "django.db.models.BigAutoField"
|
||||
name = "portal"
|
||||
|
@@ -7,14 +7,14 @@ from solo.models import SingletonModel
|
||||
|
||||
class SiteConfiguration(SingletonModel):
|
||||
site_name = models.CharField(
|
||||
max_length=256,
|
||||
default="Railroad Assets Manager")
|
||||
max_length=256, default="Railroad Assets Manager"
|
||||
)
|
||||
site_author = models.CharField(max_length=256, blank=True)
|
||||
about = models.TextField(blank=True)
|
||||
items_per_page = models.CharField(
|
||||
max_length=2, choices=[
|
||||
(str(x * 3), str(x * 3)) for x in range(2, 11)],
|
||||
default='6'
|
||||
max_length=2,
|
||||
choices=[(str(x * 3), str(x * 3)) for x in range(2, 11)],
|
||||
default="6",
|
||||
)
|
||||
footer = models.TextField(blank=True)
|
||||
footer_extended = models.TextField(blank=True)
|
||||
|
@@ -9,4 +9,4 @@ register = template.Library()
|
||||
@register.filter
|
||||
@stringfilter
|
||||
def markdown(value):
|
||||
return md.markdown(value, extensions=['markdown.extensions.fenced_code'])
|
||||
return md.markdown(value, extensions=["markdown.extensions.fenced_code"])
|
||||
|
@@ -3,16 +3,20 @@ from django.urls import path
|
||||
from portal.views import GetHome, GetHomeFiltered, GetRollingStock
|
||||
|
||||
urlpatterns = [
|
||||
path("", GetHome.as_view(), name='index'),
|
||||
path("<int:page>", GetHome.as_view(), name='index_pagination'),
|
||||
path("", GetHome.as_view(), name="index"),
|
||||
path("<int:page>", GetHome.as_view(), name="index_pagination"),
|
||||
path(
|
||||
"search",
|
||||
GetHomeFiltered.as_view(http_method_names=['post']),
|
||||
name='index_filtered'
|
||||
GetHomeFiltered.as_view(http_method_names=["post"]),
|
||||
name="index_filtered",
|
||||
),
|
||||
path("search/<str:search>",
|
||||
GetHomeFiltered.as_view(), name='index_filtered'),
|
||||
path("search/<str:search>/<int:page>",
|
||||
GetHomeFiltered.as_view(), name='index_filtered_pagination'),
|
||||
path("<uuid:uuid>", GetRollingStock.as_view(), name='rolling_stock'),
|
||||
path(
|
||||
"search/<str:search>", GetHomeFiltered.as_view(), name="index_filtered"
|
||||
),
|
||||
path(
|
||||
"search/<str:search>/<int:page>",
|
||||
GetHomeFiltered.as_view(),
|
||||
name="index_filtered_pagination",
|
||||
),
|
||||
path("<uuid:uuid>", GetRollingStock.as_view(), name="rolling_stock"),
|
||||
]
|
||||
|
@@ -2,5 +2,5 @@ from django.apps import apps
|
||||
|
||||
|
||||
def get_site_conf():
|
||||
SiteConfiguration = apps.get_model('portal', 'SiteConfiguration')
|
||||
SiteConfiguration = apps.get_model("portal", "SiteConfiguration")
|
||||
return SiteConfiguration.get_solo()
|
||||
|
@@ -24,9 +24,7 @@ class GetHome(View):
|
||||
except EmptyPage:
|
||||
rolling_stock = paginator.page(paginator.num_pages)
|
||||
|
||||
return render(request, "home.html", {
|
||||
"rolling_stock": rolling_stock
|
||||
})
|
||||
return render(request, "home.html", {"rolling_stock": rolling_stock})
|
||||
|
||||
|
||||
class GetHomeFiltered(View):
|
||||
@@ -37,17 +35,23 @@ class GetHomeFiltered(View):
|
||||
# query = {
|
||||
# _filter: _value
|
||||
# }
|
||||
query = reduce(operator.or_, (Q(
|
||||
Q(rolling_class__identifier__icontains=s) |
|
||||
Q(rolling_class__description__icontains=s) |
|
||||
Q(rolling_class__type__type__icontains=s) |
|
||||
Q(road_number__icontains=s) |
|
||||
Q(rolling_class__company__name__icontains=s) |
|
||||
Q(rolling_class__company__country__icontains=s) |
|
||||
Q(manufacturer__name__icontains=s) |
|
||||
Q(scale__scale__icontains=s) |
|
||||
Q(tags__name__icontains=s)
|
||||
) for s in search.split()))
|
||||
query = reduce(
|
||||
operator.or_,
|
||||
(
|
||||
Q(
|
||||
Q(rolling_class__identifier__icontains=s)
|
||||
| Q(rolling_class__description__icontains=s)
|
||||
| Q(rolling_class__type__type__icontains=s)
|
||||
| Q(road_number__icontains=s)
|
||||
| Q(rolling_class__company__name__icontains=s)
|
||||
| Q(rolling_class__company__country__icontains=s)
|
||||
| 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)
|
||||
paginator = Paginator(rolling_stock, site_conf.items_per_page)
|
||||
|
||||
@@ -63,10 +67,11 @@ class GetHomeFiltered(View):
|
||||
def get(self, request, search, page=1):
|
||||
rolling_stock = self.run_search(request, search, page)
|
||||
|
||||
return render(request, "search.html", {
|
||||
"search": search,
|
||||
"rolling_stock": rolling_stock
|
||||
})
|
||||
return render(
|
||||
request,
|
||||
"search.html",
|
||||
{"search": search, "rolling_stock": rolling_stock},
|
||||
)
|
||||
|
||||
def post(self, request, page=1):
|
||||
search = request.POST.get("search")
|
||||
@@ -74,16 +79,21 @@ class GetHomeFiltered(View):
|
||||
raise Http404
|
||||
rolling_stock = self.run_search(request, search, page)
|
||||
|
||||
return render(request, "search.html", {
|
||||
"search": search,
|
||||
"rolling_stock": rolling_stock
|
||||
})
|
||||
return render(
|
||||
request,
|
||||
"search.html",
|
||||
{"search": search, "rolling_stock": rolling_stock},
|
||||
)
|
||||
|
||||
|
||||
class GetRollingStock(View):
|
||||
def get(self, request, uuid):
|
||||
rolling_stock = RollingStock.objects.get(uuid=uuid)
|
||||
|
||||
return render(request, "page.html", {
|
||||
"rolling_stock": rolling_stock,
|
||||
})
|
||||
return render(
|
||||
request,
|
||||
"page.html",
|
||||
{
|
||||
"rolling_stock": rolling_stock,
|
||||
},
|
||||
)
|
||||
|
@@ -1,4 +1,4 @@
|
||||
from ram.utils import git_suffix
|
||||
|
||||
__version__ = '0.0.1'
|
||||
__version__ = "0.0.1"
|
||||
__version__ += git_suffix(__file__)
|
||||
|
@@ -152,10 +152,7 @@ DECODER_INTERFACES = [
|
||||
(5, "Next18/Next18S"),
|
||||
]
|
||||
|
||||
MANUFACTURER_TYPES = [
|
||||
("model", "Model"),
|
||||
("real", "Real")
|
||||
]
|
||||
MANUFACTURER_TYPES = [("model", "Model"), ("real", "Real")]
|
||||
|
||||
ROLLING_STOCK_TYPES = [
|
||||
("engine", "Engine"),
|
||||
|
@@ -11,13 +11,14 @@ def git_suffix(fname):
|
||||
"""
|
||||
try:
|
||||
gh = subprocess.check_output(
|
||||
['git', 'rev-parse', '--short', 'HEAD'],
|
||||
stderr=open(os.devnull, 'w')).strip()
|
||||
gh = "-git" + gh.decode() if gh else ''
|
||||
["git", "rev-parse", "--short", "HEAD"],
|
||||
stderr=open(os.devnull, "w"),
|
||||
).strip()
|
||||
gh = "-git" + gh.decode() if gh else ""
|
||||
except Exception:
|
||||
# trapping everything on purpose; git may not be installed or it
|
||||
# may not work properly
|
||||
gh = ''
|
||||
gh = ""
|
||||
|
||||
return gh
|
||||
|
||||
|
@@ -2,6 +2,7 @@ import os
|
||||
from uuid import uuid4
|
||||
from django.db import models
|
||||
from django.urls import reverse
|
||||
|
||||
# from django.core.files.storage import FileSystemStorage
|
||||
# from django.dispatch import receiver
|
||||
|
||||
@@ -32,8 +33,11 @@ class RollingClass(models.Model):
|
||||
)
|
||||
description = models.CharField(max_length=256, blank=True)
|
||||
manufacturer = models.ForeignKey(
|
||||
Manufacturer, on_delete=models.CASCADE, null=True, blank=True,
|
||||
limit_choices_to={"category": "real"}
|
||||
Manufacturer,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
blank=True,
|
||||
limit_choices_to={"category": "real"},
|
||||
)
|
||||
|
||||
class Meta:
|
||||
@@ -74,8 +78,11 @@ class RollingStock(models.Model):
|
||||
)
|
||||
road_number = models.CharField(max_length=128, unique=False)
|
||||
manufacturer = models.ForeignKey(
|
||||
Manufacturer, on_delete=models.CASCADE, null=True, blank=True,
|
||||
limit_choices_to={"category": "model"}
|
||||
Manufacturer,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
blank=True,
|
||||
limit_choices_to={"category": "model"},
|
||||
)
|
||||
scale = models.ForeignKey(Scale, on_delete=models.CASCADE)
|
||||
sku = models.CharField(max_length=32, blank=True)
|
||||
@@ -112,9 +119,7 @@ class RollingStock(models.Model):
|
||||
|
||||
class RollingStockDocument(models.Model):
|
||||
rolling_stock = models.ForeignKey(
|
||||
RollingStock,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="document"
|
||||
RollingStock, on_delete=models.CASCADE, related_name="document"
|
||||
)
|
||||
description = models.CharField(max_length=128, blank=True)
|
||||
file = models.FileField(upload_to="files/", null=True, blank=True)
|
||||
@@ -131,9 +136,7 @@ class RollingStockDocument(models.Model):
|
||||
|
||||
class RollingStockImage(models.Model):
|
||||
rolling_stock = models.ForeignKey(
|
||||
RollingStock,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="image"
|
||||
RollingStock, on_delete=models.CASCADE, related_name="image"
|
||||
)
|
||||
image = models.ImageField(upload_to="images/", null=True, blank=True)
|
||||
is_thumbnail = models.BooleanField()
|
||||
@@ -149,7 +152,8 @@ class RollingStockImage(models.Model):
|
||||
def save(self, **kwargs):
|
||||
if self.is_thumbnail:
|
||||
RollingStockImage.objects.filter(
|
||||
rolling_stock=self.rolling_stock).update(is_thumbnail=False)
|
||||
rolling_stock=self.rolling_stock
|
||||
).update(is_thumbnail=False)
|
||||
super().save(**kwargs)
|
||||
|
||||
|
||||
@@ -159,7 +163,7 @@ class RollingStockProperty(models.Model):
|
||||
on_delete=models.CASCADE,
|
||||
related_name="property",
|
||||
null=False,
|
||||
blank=False
|
||||
blank=False,
|
||||
)
|
||||
property = models.ForeignKey(Property, on_delete=models.CASCADE)
|
||||
value = models.CharField(max_length=256)
|
||||
|
Reference in New Issue
Block a user