compatibility fixes for the database schema
When using PostgreSQL: - `CharField()` is limited to 255 character; use `TextField()` - `IntegerField()` is signed, current unix timestamps exceeds its range; use correct TimestampField()
This commit is contained in:
@@ -207,7 +207,7 @@ def charts():
|
||||
zone = request.args.get('zone', None)
|
||||
negative = request.args.get('negative', type=bool, default=False)
|
||||
logger.debug(f"API: GET /charts - {start_date} - {end_date}")
|
||||
query = MainChartTable.select().where((MainChartTable.tm >= int(start_date)) & (MainChartTable.tm <= int(end_date)))
|
||||
query = MainChartTable.select().where((MainChartTable.tm >= int(start_date)/1000) & (MainChartTable.tm <= int(end_date)/1000))
|
||||
logger.debug(f"{query}")
|
||||
factor = 1
|
||||
if negative:
|
||||
@@ -226,13 +226,13 @@ def charts():
|
||||
charts = []
|
||||
|
||||
for p in result_ppes:
|
||||
czas = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(p.tm/1000))
|
||||
czas = p.tm.strftime("%Y-%m-%d %H:%M:%S")
|
||||
chart = {
|
||||
'mp': p.mp,
|
||||
'meter_type': p.meter_type,
|
||||
'meter_type_url': urllib.parse.quote_plus(p.meter_type),
|
||||
'zone': p.zone,
|
||||
'time_tm': p.tm,
|
||||
'time_tm': int(p.tm.timestamp()*1000),
|
||||
'time': czas,
|
||||
'value': p.value * factor
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import http.cookiejar as cookiejar
|
||||
from requests.exceptions import HTTPError
|
||||
from bs4 import BeautifulSoup
|
||||
from enum import Enum
|
||||
from peewee import AutoField, Model, CharField, IntegerField, DateField, BooleanField, CompositeKey, DecimalField, ForeignKeyField, SQL
|
||||
from peewee import AutoField, Model, CharField, IntegerField, DateField, BooleanField, CompositeKey, DecimalField, ForeignKeyField, SQL, TextField, TimestampField
|
||||
import urllib.parse
|
||||
|
||||
logger = logging.getLogger("energaMeter")
|
||||
@@ -31,7 +31,7 @@ class PPETable(Model):
|
||||
class Meta:
|
||||
database = db
|
||||
table_name = 'PPE'
|
||||
constraints = [SQL('UNIQUE (ppe, tariffCode)')]
|
||||
constraints = [SQL('UNIQUE ("ppe", "tariffCode")')]
|
||||
|
||||
class MeterTable(Model):
|
||||
id = AutoField() # Meter point
|
||||
@@ -43,7 +43,7 @@ class MeterTable(Model):
|
||||
class Meta:
|
||||
database = db
|
||||
table_name = 'METER'
|
||||
constraints = [SQL('UNIQUE (ppe_id, meter_type)')]
|
||||
constraints = [SQL('UNIQUE ("ppe_id", "meter_type")')]
|
||||
|
||||
class CounterTable(Model):
|
||||
id = AutoField()
|
||||
@@ -71,7 +71,7 @@ class ChartTable(Model):
|
||||
year = IntegerField()
|
||||
month = IntegerField(null=True)
|
||||
day = IntegerField(null=True)
|
||||
value =CharField()
|
||||
value = TextField()
|
||||
|
||||
class Meta:
|
||||
database = db
|
||||
@@ -82,7 +82,7 @@ class MainChartTable(Model):
|
||||
mp = CharField()
|
||||
meter_type = CharField()
|
||||
zone = IntegerField()
|
||||
tm = IntegerField()
|
||||
tm = TimestampField()
|
||||
value = DecimalField(max_digits=20, decimal_places=16, null=True)
|
||||
tarAvg = DecimalField(max_digits=20, decimal_places=16, null=True)
|
||||
est = BooleanField(default=False)
|
||||
@@ -360,16 +360,17 @@ class MojLicznik:
|
||||
try:
|
||||
logger.debug(f"save_main_charts: mp: {mp}, val: {val}, meter_type: {m_type}")
|
||||
z = val["zones"]
|
||||
tm = int(val["tm"]) / 1000 # convert JS timestamp (milliseconds) to unix (seconds)
|
||||
if z[0]:
|
||||
# MainChartTable.get_or_create(tm = val["tm"], zone = 1, value = z[0], tarAvg=val["tarAvg"], est=val["est"], cplt=val["cplt"])
|
||||
try:
|
||||
existing_record = MainChartTable.get((MainChartTable.meter_type == m_type) & (MainChartTable.mp == mp) & (MainChartTable.tm == val["tm"]) & (MainChartTable.zone == 1))
|
||||
existing_record = MainChartTable.get((MainChartTable.meter_type == m_type) & (MainChartTable.mp == mp) & (MainChartTable.tm == tm) & (MainChartTable.zone == 1))
|
||||
except MainChartTable.DoesNotExist:
|
||||
# Jeśli rekord nie istnieje, utwórz nowy
|
||||
MainChartTable.create(
|
||||
mp=mp,
|
||||
meter_type=m_type,
|
||||
tm=val["tm"],
|
||||
tm=tm,
|
||||
zone=1,
|
||||
value=z[0],
|
||||
tarAvg=val["tarAvg"],
|
||||
@@ -379,13 +380,13 @@ class MojLicznik:
|
||||
|
||||
if z[1]:
|
||||
try:
|
||||
existing_record = MainChartTable.get((MainChartTable.meter_type == m_type) & (MainChartTable.mp == mp) & (MainChartTable.tm == val["tm"]) & (MainChartTable.zone == 2))
|
||||
existing_record = MainChartTable.get((MainChartTable.meter_type == m_type) & (MainChartTable.mp == mp) & (MainChartTable.tm == tm) & (MainChartTable.zone == 2))
|
||||
except MainChartTable.DoesNotExist:
|
||||
# Jeśli rekord nie istnieje, utwórz nowy
|
||||
MainChartTable.create(
|
||||
mp=mp,
|
||||
meter_type=m_type,
|
||||
tm=val["tm"],
|
||||
tm=tm,
|
||||
zone=2,
|
||||
value=z[1],
|
||||
tarAvg=val["tarAvg"],
|
||||
@@ -395,13 +396,13 @@ class MojLicznik:
|
||||
|
||||
if z[2]:
|
||||
try:
|
||||
existing_record = MainChartTable.get((MainChartTable.meter_type == m_type) & (MainChartTable.mp == mp) & (MainChartTable.tm == val["tm"]) & (MainChartTable.zone == 3))
|
||||
existing_record = MainChartTable.get((MainChartTable.meter_type == m_type) & (MainChartTable.mp == mp) & (MainChartTable.tm == tm) & (MainChartTable.zone == 3))
|
||||
except MainChartTable.DoesNotExist:
|
||||
# Jeśli rekord nie istnieje, utwórz nowy
|
||||
MainChartTable.create(
|
||||
mp=mp,
|
||||
meter_type=m_type,
|
||||
tm=val["tm"],
|
||||
tm=tm,
|
||||
zone=3,
|
||||
value=z[2],
|
||||
tarAvg=val["tarAvg"],
|
||||
|
||||
Reference in New Issue
Block a user