Skip to content
Snippets Groups Projects
Commit 2256b4be authored by Martin Mareš's avatar Martin Mareš
Browse files

Sjednocení funkcí na hledání místa podle kódu

parent e9b53a9e
No related branches found
No related tags found
No related merge requests found
...@@ -3,12 +3,13 @@ ...@@ -3,12 +3,13 @@
import datetime import datetime
from enum import Enum as PythonEnum, auto from enum import Enum as PythonEnum, auto
import re
from sqlalchemy import \ from sqlalchemy import \
Boolean, Column, DateTime, Enum, ForeignKey, Integer, String, Text, UniqueConstraint, \ Boolean, Column, DateTime, Enum, ForeignKey, Integer, String, Text, UniqueConstraint, \
text, \ text, \
create_engine, inspect create_engine, inspect
from sqlalchemy.engine import Engine from sqlalchemy.engine import Engine
from sqlalchemy.orm import relationship, sessionmaker, Session, class_mapper from sqlalchemy.orm import relationship, sessionmaker, Session, class_mapper, joinedload
from sqlalchemy.orm.attributes import get_history from sqlalchemy.orm.attributes import get_history
from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
...@@ -106,14 +107,23 @@ class Place(Base): ...@@ -106,14 +107,23 @@ class Place(Base):
return len(PlaceType.choices(level=self.level + 1)) > 0 return len(PlaceType.choices(level=self.level + 1)) > 0
def place_by_code(code: str) -> Optional[Place]: def get_root_place():
if code.startswith("#"): return get_session().query(Place).filter_by(parent=None).one()
try:
id = int(code[1:])
return get_session().query(Place).get(id) def get_place_by_code(code: str, fetch_school: bool = False) -> Optional[Place]:
except ValueError: if code == "":
return None return None
return get_session().query(Place).filter_by(code=code).first()
q = get_session().query(Place)
if fetch_school:
q = q.options(joinedload(Place.school))
m = re.fullmatch(r'#(\d+)', code)
if m:
return q.get(int(m[1]))
else:
return q.filter_by(code=code).one_or_none()
class School(Base): class School(Base):
......
...@@ -60,7 +60,7 @@ def parse_school(kod: str, errs: List[str]) -> Optional[db.Place]: ...@@ -60,7 +60,7 @@ def parse_school(kod: str, errs: List[str]) -> Optional[db.Place]:
errs.append('Škola je povinná') errs.append('Škola je povinná')
return None return None
place = mo.util.get_place_by_code(kod, fetch_school=True) place = db.get_place_by_code(kod, fetch_school=True)
if not place: if not place:
errs.append('Škola nenalezena') errs.append('Škola nenalezena')
return None return None
......
...@@ -201,7 +201,7 @@ def org_place_move(id: int): ...@@ -201,7 +201,7 @@ def org_place_move(id: int):
if form.reset.data: if form.reset.data:
return redirect(url_for('org_place_move', id=id)) return redirect(url_for('org_place_move', id=id))
new_parent = db.place_by_code(form.code.data) new_parent = db.get_place_by_code(form.code.data)
if not new_parent: if not new_parent:
search_error = 'Místo s tímto kódem se nepovedlo nalézt' search_error = 'Místo s tímto kódem se nepovedlo nalézt'
else: else:
...@@ -350,7 +350,7 @@ def org_place_new_child(id: int): ...@@ -350,7 +350,7 @@ def org_place_new_child(id: int):
@app.route('/org/place/') @app.route('/org/place/')
def org_place_root(): def org_place_root():
root = mo.util.get_root_place() root = db.get_root_place()
return redirect(url_for('org_place', id=root.place_id)) return redirect(url_for('org_place', id=root.place_id))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment