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)
|
zone = request.args.get('zone', None)
|
||||||
negative = request.args.get('negative', type=bool, default=False)
|
negative = request.args.get('negative', type=bool, default=False)
|
||||||
logger.debug(f"API: GET /charts - {start_date} - {end_date}")
|
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}")
|
logger.debug(f"{query}")
|
||||||
factor = 1
|
factor = 1
|
||||||
if negative:
|
if negative:
|
||||||
@@ -226,13 +226,13 @@ def charts():
|
|||||||
charts = []
|
charts = []
|
||||||
|
|
||||||
for p in result_ppes:
|
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 = {
|
chart = {
|
||||||
'mp': p.mp,
|
'mp': p.mp,
|
||||||
'meter_type': p.meter_type,
|
'meter_type': p.meter_type,
|
||||||
'meter_type_url': urllib.parse.quote_plus(p.meter_type),
|
'meter_type_url': urllib.parse.quote_plus(p.meter_type),
|
||||||
'zone': p.zone,
|
'zone': p.zone,
|
||||||
'time_tm': p.tm,
|
'time_tm': int(p.tm.timestamp()*1000),
|
||||||
'time': czas,
|
'time': czas,
|
||||||
'value': p.value * factor
|
'value': p.value * factor
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import http.cookiejar as cookiejar
|
|||||||
from requests.exceptions import HTTPError
|
from requests.exceptions import HTTPError
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from enum import Enum
|
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
|
import urllib.parse
|
||||||
|
|
||||||
logger = logging.getLogger("energaMeter")
|
logger = logging.getLogger("energaMeter")
|
||||||
@@ -31,7 +31,7 @@ class PPETable(Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
database = db
|
database = db
|
||||||
table_name = 'PPE'
|
table_name = 'PPE'
|
||||||
constraints = [SQL('UNIQUE (ppe, tariffCode)')]
|
constraints = [SQL('UNIQUE ("ppe", "tariffCode")')]
|
||||||
|
|
||||||
class MeterTable(Model):
|
class MeterTable(Model):
|
||||||
id = AutoField() # Meter point
|
id = AutoField() # Meter point
|
||||||
@@ -43,7 +43,7 @@ class MeterTable(Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
database = db
|
database = db
|
||||||
table_name = 'METER'
|
table_name = 'METER'
|
||||||
constraints = [SQL('UNIQUE (ppe_id, meter_type)')]
|
constraints = [SQL('UNIQUE ("ppe_id", "meter_type")')]
|
||||||
|
|
||||||
class CounterTable(Model):
|
class CounterTable(Model):
|
||||||
id = AutoField()
|
id = AutoField()
|
||||||
@@ -71,7 +71,7 @@ class ChartTable(Model):
|
|||||||
year = IntegerField()
|
year = IntegerField()
|
||||||
month = IntegerField(null=True)
|
month = IntegerField(null=True)
|
||||||
day = IntegerField(null=True)
|
day = IntegerField(null=True)
|
||||||
value =CharField()
|
value = TextField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
database = db
|
database = db
|
||||||
@@ -82,7 +82,7 @@ class MainChartTable(Model):
|
|||||||
mp = CharField()
|
mp = CharField()
|
||||||
meter_type = CharField()
|
meter_type = CharField()
|
||||||
zone = IntegerField()
|
zone = IntegerField()
|
||||||
tm = IntegerField()
|
tm = TimestampField()
|
||||||
value = DecimalField(max_digits=20, decimal_places=16, null=True)
|
value = DecimalField(max_digits=20, decimal_places=16, null=True)
|
||||||
tarAvg = DecimalField(max_digits=20, decimal_places=16, null=True)
|
tarAvg = DecimalField(max_digits=20, decimal_places=16, null=True)
|
||||||
est = BooleanField(default=False)
|
est = BooleanField(default=False)
|
||||||
@@ -360,16 +360,17 @@ class MojLicznik:
|
|||||||
try:
|
try:
|
||||||
logger.debug(f"save_main_charts: mp: {mp}, val: {val}, meter_type: {m_type}")
|
logger.debug(f"save_main_charts: mp: {mp}, val: {val}, meter_type: {m_type}")
|
||||||
z = val["zones"]
|
z = val["zones"]
|
||||||
|
tm = int(val["tm"]) / 1000 # convert JS timestamp (milliseconds) to unix (seconds)
|
||||||
if z[0]:
|
if z[0]:
|
||||||
# MainChartTable.get_or_create(tm = val["tm"], zone = 1, value = z[0], tarAvg=val["tarAvg"], est=val["est"], cplt=val["cplt"])
|
# MainChartTable.get_or_create(tm = val["tm"], zone = 1, value = z[0], tarAvg=val["tarAvg"], est=val["est"], cplt=val["cplt"])
|
||||||
try:
|
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:
|
except MainChartTable.DoesNotExist:
|
||||||
# Jeśli rekord nie istnieje, utwórz nowy
|
# Jeśli rekord nie istnieje, utwórz nowy
|
||||||
MainChartTable.create(
|
MainChartTable.create(
|
||||||
mp=mp,
|
mp=mp,
|
||||||
meter_type=m_type,
|
meter_type=m_type,
|
||||||
tm=val["tm"],
|
tm=tm,
|
||||||
zone=1,
|
zone=1,
|
||||||
value=z[0],
|
value=z[0],
|
||||||
tarAvg=val["tarAvg"],
|
tarAvg=val["tarAvg"],
|
||||||
@@ -379,13 +380,13 @@ class MojLicznik:
|
|||||||
|
|
||||||
if z[1]:
|
if z[1]:
|
||||||
try:
|
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:
|
except MainChartTable.DoesNotExist:
|
||||||
# Jeśli rekord nie istnieje, utwórz nowy
|
# Jeśli rekord nie istnieje, utwórz nowy
|
||||||
MainChartTable.create(
|
MainChartTable.create(
|
||||||
mp=mp,
|
mp=mp,
|
||||||
meter_type=m_type,
|
meter_type=m_type,
|
||||||
tm=val["tm"],
|
tm=tm,
|
||||||
zone=2,
|
zone=2,
|
||||||
value=z[1],
|
value=z[1],
|
||||||
tarAvg=val["tarAvg"],
|
tarAvg=val["tarAvg"],
|
||||||
@@ -395,13 +396,13 @@ class MojLicznik:
|
|||||||
|
|
||||||
if z[2]:
|
if z[2]:
|
||||||
try:
|
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:
|
except MainChartTable.DoesNotExist:
|
||||||
# Jeśli rekord nie istnieje, utwórz nowy
|
# Jeśli rekord nie istnieje, utwórz nowy
|
||||||
MainChartTable.create(
|
MainChartTable.create(
|
||||||
mp=mp,
|
mp=mp,
|
||||||
meter_type=m_type,
|
meter_type=m_type,
|
||||||
tm=val["tm"],
|
tm=tm,
|
||||||
zone=3,
|
zone=3,
|
||||||
value=z[2],
|
value=z[2],
|
||||||
tarAvg=val["tarAvg"],
|
tarAvg=val["tarAvg"],
|
||||||
|
|||||||
Reference in New Issue
Block a user