Rename DCC project into RAM

RAM: Railroad Assets Manager
This commit is contained in:
2022-04-10 21:05:02 +02:00
parent 305507a4e6
commit d594dbe47c
77 changed files with 16 additions and 16 deletions

0
ram/metadata/__init__.py Normal file
View File

60
ram/metadata/admin.py Normal file
View File

@@ -0,0 +1,60 @@
from django.contrib import admin
from metadata.models import (
Property,
Decoder,
Scale,
Manufacturer,
Company,
Tag,
RollingStockType,
)
@admin.register(Property)
class PropertyAdmin(admin.ModelAdmin):
search_fields = ("name",)
@admin.register(Decoder)
class DecoderAdmin(admin.ModelAdmin):
readonly_fields = ("image_thumbnail",)
list_display = ("__str__", "interface")
list_filter = ("manufacturer", "interface")
search_fields = ("__str__",)
@admin.register(Scale)
class ScaleAdmin(admin.ModelAdmin):
list_display = ("scale", "ratio", "gauge")
list_filter = ("ratio", "gauge")
search_fields = list_display
@admin.register(Company)
class CompanyAdmin(admin.ModelAdmin):
readonly_fields = ("logo_thumbnail",)
list_display = ("name", "country")
list_filter = list_display
search_fields = ("name",)
@admin.register(Manufacturer)
class ManufacturerAdmin(admin.ModelAdmin):
readonly_fields = ("logo_thumbnail",)
list_display = ("name", "category")
list_filter = ("category",)
search_fields = ("name",)
@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
readonly_fields = ("slug",)
list_display = ("name", "slug")
search_fields = ("name",)
@admin.register(RollingStockType)
class RollingStockTypeAdmin(admin.ModelAdmin):
list_display = ("__str__",)
list_filter = ("type", "category")
search_fields = list_display

6
ram/metadata/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class MetadataConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "metadata"

View File

@@ -0,0 +1,98 @@
# Generated by Django 4.0.3 on 2022-04-07 09:25
from django.db import migrations, models
import django.db.models.deletion
import django_countries.fields
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Company',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=64, unique=True)),
('extended_name', models.CharField(blank=True, max_length=128)),
('country', django_countries.fields.CountryField(max_length=2)),
('freelance', models.BooleanField(default=False)),
('logo', models.ImageField(blank=True, null=True, upload_to='images/')),
],
options={
'verbose_name_plural': 'Companies',
'ordering': ['name'],
},
),
migrations.CreateModel(
name='Manufacturer',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=128, unique=True)),
('category', models.CharField(choices=[('model', 'Model'), ('real', 'Real')], max_length=64)),
('website', models.URLField(blank=True)),
('logo', models.ImageField(blank=True, null=True, upload_to='images/')),
],
options={
'ordering': ['category', 'name'],
},
),
migrations.CreateModel(
name='Property',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=128, unique=True)),
],
options={
'verbose_name_plural': 'Properties',
'ordering': ['name'],
},
),
migrations.CreateModel(
name='Scale',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('scale', models.CharField(max_length=32, unique=True)),
('ratio', models.CharField(blank=True, max_length=16)),
('gauge', models.CharField(blank=True, max_length=16)),
],
options={
'ordering': ['scale'],
},
),
migrations.CreateModel(
name='Tag',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=128, unique=True)),
('slug', models.CharField(max_length=128, unique=True)),
],
),
migrations.CreateModel(
name='RollingStockType',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('type', models.CharField(max_length=64)),
('category', models.CharField(choices=[('engine', 'Engine'), ('car', 'Car'), ('railcar', 'Railcar'), ('equipment', 'Equipment'), ('other', 'Other')], max_length=64)),
],
options={
'unique_together': {('category', 'type')},
},
),
migrations.CreateModel(
name='Decoder',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=128, unique=True)),
('version', models.CharField(blank=True, max_length=64)),
('interface', models.PositiveSmallIntegerField(blank=True, choices=[(1, 'NEM651'), (2, 'NEM652'), (3, 'PluX'), (4, '21MTC'), (5, 'Next18/Next18S')], null=True)),
('sound', models.BooleanField(default=False)),
('image', models.ImageField(blank=True, null=True, upload_to='images/')),
('manufacturer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='metadata.manufacturer')),
],
),
]

View File

114
ram/metadata/models.py Normal file
View File

@@ -0,0 +1,114 @@
from django.db import models
from django.conf import settings
from django.dispatch.dispatcher import receiver
from django_countries.fields import CountryField
from ram.utils import get_image_preview, slugify
class Property(models.Model):
name = models.CharField(max_length=128, unique=True)
class Meta:
verbose_name_plural = "Properties"
ordering = ["name"]
def __str__(self):
return self.name
class Manufacturer(models.Model):
name = models.CharField(max_length=128, unique=True)
category = models.CharField(
max_length=64, choices=settings.MANUFACTURER_TYPES
)
website = models.URLField(blank=True)
logo = models.ImageField(upload_to="images/", null=True, blank=True)
class Meta:
ordering = ["category", "name"]
def __str__(self):
return self.name
def logo_thumbnail(self):
return get_image_preview(self.logo.url)
logo_thumbnail.short_description = "Preview"
class Company(models.Model):
name = models.CharField(max_length=64, unique=True)
extended_name = models.CharField(max_length=128, blank=True)
country = CountryField()
freelance = models.BooleanField(default=False)
logo = models.ImageField(upload_to="images/", null=True, blank=True)
class Meta:
verbose_name_plural = "Companies"
ordering = ["name"]
def __str__(self):
return self.name
def logo_thumbnail(self):
return get_image_preview(self.logo.url)
logo_thumbnail.short_description = "Preview"
class Decoder(models.Model):
name = models.CharField(max_length=128, unique=True)
manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE)
version = models.CharField(max_length=64, blank=True)
interface = models.PositiveSmallIntegerField(
choices=settings.DECODER_INTERFACES, null=True, blank=True
)
sound = models.BooleanField(default=False)
image = models.ImageField(upload_to="images/", null=True, blank=True)
def __str__(self):
return "{0} - {1}".format(self.manufacturer, self.name)
def image_thumbnail(self):
return get_image_preview(self.image.url)
image_thumbnail.short_description = "Preview"
class Scale(models.Model):
scale = models.CharField(max_length=32, unique=True)
ratio = models.CharField(max_length=16, blank=True)
gauge = models.CharField(max_length=16, blank=True)
class Meta:
ordering = ["scale"]
def __str__(self):
return str(self.scale)
class Tag(models.Model):
name = models.CharField(max_length=128, unique=True)
slug = models.CharField(max_length=128, unique=True)
def __str__(self):
return self.name
@receiver(models.signals.pre_save, sender=Tag)
def tag_pre_save(sender, instance, **kwargs):
instance.slug = slugify(instance.name)
class RollingStockType(models.Model):
type = models.CharField(max_length=64)
category = models.CharField(
max_length=64, choices=settings.ROLLING_STOCK_TYPES
)
class Meta(object):
unique_together = ("category", "type")
def __str__(self):
return "{0} {1}".format(self.type, self.category)

View File

@@ -0,0 +1,47 @@
from rest_framework import serializers
from metadata.models import (
RollingStockType,
Scale,
Manufacturer,
Company,
Decoder,
Tag,
)
class RollingStockTypeSerializer(serializers.ModelSerializer):
class Meta:
model = RollingStockType
fields = "__all__"
class ManufacturerSerializer(serializers.ModelSerializer):
class Meta:
model = Manufacturer
fields = "__all__"
class ScaleSerializer(serializers.ModelSerializer):
class Meta:
model = Scale
fields = "__all__"
class CompanySerializer(serializers.ModelSerializer):
class Meta:
model = Company
fields = "__all__"
class DecoderSerializer(serializers.ModelSerializer):
manufacturer = serializers.StringRelatedField()
class Meta:
model = Decoder
fields = "__all__"
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
fields = "__all__"

3
ram/metadata/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
ram/metadata/views.py Normal file
View File

@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.