screen model with search to fix
This commit is contained in:
parent
2ccf6c0cd3
commit
e2c79cf698
4 changed files with 65 additions and 4 deletions
|
@ -1,6 +1,6 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from suitablephones.models import Bluetooth, Camera, Device
|
from suitablephones.models import Bluetooth, Camera, Device, Screen
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Camera)
|
@admin.register(Camera)
|
||||||
|
@ -16,3 +16,7 @@ class AdminBluetooth(admin.ModelAdmin):
|
||||||
@admin.register(Device)
|
@admin.register(Device)
|
||||||
class AdminDevice(admin.ModelAdmin):
|
class AdminDevice(admin.ModelAdmin):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@admin.register(Screen)
|
||||||
|
class AdminScreen(admin.ModelAdmin):
|
||||||
|
pass
|
||||||
|
|
|
@ -4,10 +4,39 @@ import yaml
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
|
||||||
from suitablephones.models import Bluetooth, Camera, Device
|
from suitablephones.models import Bluetooth, Camera, Device, Screen
|
||||||
|
|
||||||
|
import subprocess
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
def update_repo():
|
||||||
|
devicesdir = settings.LINEAGEWIKI
|
||||||
|
pull_status = subprocess.run(["git", "pull"], cwd=devicesdir)
|
||||||
|
if pull_status.returncode != 0:
|
||||||
|
logging.error("Error pulling repo")
|
||||||
|
|
||||||
|
def set_screen(args):
|
||||||
|
#if type(args)
|
||||||
|
screen = Screen.objects.filter(**args)
|
||||||
|
if not screen.exists():
|
||||||
|
screen = Screen()
|
||||||
|
for subkey, subvalue in args.items():
|
||||||
|
if subkey == 'size':
|
||||||
|
size_mm = subvalue.split(' ')[0]
|
||||||
|
setattr(screen, 'size_mm', size_mm)
|
||||||
|
size_inch = subvalue.split(' ')[2].replace('(', '')
|
||||||
|
setattr(screen, 'size_in', size_inch)
|
||||||
|
setattr(screen, subkey, subvalue)
|
||||||
|
#elif subkey == 'technology':
|
||||||
|
# setattr(screen, 'type', subvalue)
|
||||||
|
setattr(screen, subkey, subvalue)
|
||||||
|
screen.save()
|
||||||
|
else:
|
||||||
|
screen = screen.get()
|
||||||
|
return screen
|
||||||
|
|
||||||
|
|
||||||
def set_camera(args):
|
def set_camera(args):
|
||||||
cam = Camera.objects.filter(**args)
|
cam = Camera.objects.filter(**args)
|
||||||
if not cam.exists():
|
if not cam.exists():
|
||||||
|
@ -36,12 +65,14 @@ class Command(BaseCommand):
|
||||||
Device.objects.all().delete()
|
Device.objects.all().delete()
|
||||||
Bluetooth.objects.all().delete()
|
Bluetooth.objects.all().delete()
|
||||||
Camera.objects.all().delete()
|
Camera.objects.all().delete()
|
||||||
|
update_repo()
|
||||||
devicesdir = settings.LINEAGEWIKI + "/_data/devices/"
|
devicesdir = settings.LINEAGEWIKI + "/_data/devices/"
|
||||||
# import pdb; pdb.set_trace()
|
# import pdb; pdb.set_trace()
|
||||||
for filename in os.listdir(devicesdir):
|
for filename in os.listdir(devicesdir):
|
||||||
dev = Device()
|
dev = Device()
|
||||||
cameras = []
|
cameras = []
|
||||||
bluetooth = {}
|
bluetooth = {}
|
||||||
|
screen = []
|
||||||
peripherals = []
|
peripherals = []
|
||||||
|
|
||||||
with open(os.path.join(devicesdir, filename), "r") as stream:
|
with open(os.path.join(devicesdir, filename), "r") as stream:
|
||||||
|
@ -84,6 +115,13 @@ class Command(BaseCommand):
|
||||||
elif key == "storage":
|
elif key == "storage":
|
||||||
if str(value) == "None":
|
if str(value) == "None":
|
||||||
value = None
|
value = None
|
||||||
|
elif key == "screen":
|
||||||
|
if type(value) is list:
|
||||||
|
for s in value:
|
||||||
|
for k,v in s.items():
|
||||||
|
screen.append(set_screen(v))
|
||||||
|
elif type(value) is dict:
|
||||||
|
screen.append(set_screen(value))
|
||||||
else:
|
else:
|
||||||
setattr(dev, key, value)
|
setattr(dev, key, value)
|
||||||
except yaml.YAMLError as exc:
|
except yaml.YAMLError as exc:
|
||||||
|
|
|
@ -22,6 +22,16 @@ class Camera(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f" {self.flash} - {str(self.megapixel)} - {self.info}"
|
return f" {self.flash} - {str(self.megapixel)} - {self.info}"
|
||||||
|
|
||||||
|
class Screen(models.Model):
|
||||||
|
size = models.CharField(max_length=500, null=True)
|
||||||
|
size_mm = models.DecimalField(max_digits=5, decimal_places=1)
|
||||||
|
size_in = models.DecimalField(max_digits=5, decimal_places=1)
|
||||||
|
resolution = models.CharField(max_length=100)
|
||||||
|
density = models.CharField(max_length=100)
|
||||||
|
technology = models.CharField(max_length=100)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.size_in} - {self.density} - {self.technology}"
|
||||||
|
|
||||||
class Device(models.Model):
|
class Device(models.Model):
|
||||||
#architecture = models.JSONField(default=dict)
|
#architecture = models.JSONField(default=dict)
|
||||||
|
@ -51,7 +61,7 @@ class Device(models.Model):
|
||||||
recovery_boot = models.CharField(max_length=1000)
|
recovery_boot = models.CharField(max_length=1000)
|
||||||
recovery_reboot = models.CharField(max_length=100)
|
recovery_reboot = models.CharField(max_length=100)
|
||||||
#release = models.DateField()
|
#release = models.DateField()
|
||||||
#screen = models.JSONField(default=dict) # dict or str
|
screen = models.ManyToManyField(Screen)
|
||||||
#sdcard = models.JSONField(default=dict) # dict or str{1}
|
#sdcard = models.JSONField(default=dict) # dict or str{1}
|
||||||
soc = models.CharField(max_length=1000)
|
soc = models.CharField(max_length=1000)
|
||||||
storage = models.CharField(max_length=100, blank=True)
|
storage = models.CharField(max_length=100, blank=True)
|
||||||
|
|
|
@ -17,6 +17,9 @@ class DeviceViewSet(viewsets.ModelViewSet):
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
name = self.request.query_params.get('name')
|
name = self.request.query_params.get('name')
|
||||||
megapixel = self.request.query_params.get('megapixel')
|
megapixel = self.request.query_params.get('megapixel')
|
||||||
|
size_in = self.request.query_params.get('size_in')
|
||||||
|
resolution = self.request.query_params.get('resolution')
|
||||||
|
screen_type = self.request.query_params.get('screen_type')
|
||||||
#maintainers = self.request.query_params.getlist('maintainers')
|
#maintainers = self.request.query_params.getlist('maintainers')
|
||||||
version = self.request.query_params.get('version')
|
version = self.request.query_params.get('version')
|
||||||
if name:
|
if name:
|
||||||
|
@ -24,7 +27,13 @@ class DeviceViewSet(viewsets.ModelViewSet):
|
||||||
if megapixel:
|
if megapixel:
|
||||||
self.queryset = self.queryset.filter(cameras__megapixel__gt=Decimal(megapixel))
|
self.queryset = self.queryset.filter(cameras__megapixel__gt=Decimal(megapixel))
|
||||||
if version:
|
if version:
|
||||||
self.queryset = self.queryset.filter(versions__icontains=version)
|
self.queryset = self.queryset.filter(versions__icontains=version)
|
||||||
|
if size_in:
|
||||||
|
self.queryset = self.queryset.filter(screen__size_in__gt=Decimal(size_in))
|
||||||
|
if resolution:
|
||||||
|
self.queryset = self.queryset.filter(screen__resolution__icontains=resolution)
|
||||||
|
if screen_type:
|
||||||
|
self.queryset = self.queryset.filter(screen__technology__icontains=screen_type)
|
||||||
#if maintainers:
|
#if maintainers:
|
||||||
self.queryset = self.queryset.filter(maintainers__len__gt=0)
|
self.queryset = self.queryset.filter(maintainers__len__gt=0)
|
||||||
return self.queryset
|
return self.queryset
|
||||||
|
|
Loading…
Reference in a new issue