aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2026-09-30 23:23:55 +0200
committerDaniel Schadt <kingdread@gmx.de>2026-09-30 23:23:55 +0200
commitad05060f35b72ac188287986863ef359ddcb7f0f (patch)
tree57101392d4fd8052d3857a220e4e0960b3343fd7
parent1f9e1d0517266418ea5a61f5c9948783ab0a604a (diff)
downloadfietsboek-ad05060f35b72ac188287986863ef359ddcb7f0f.tar.gz
fietsboek-ad05060f35b72ac188287986863ef359ddcb7f0f.tar.bz2
fietsboek-ad05060f35b72ac188287986863ef359ddcb7f0f.zip
add update scripts for climbs
-rw-r--r--fietsboek/alembic/versions/20260930_b73ed8b45f67.py42
-rw-r--r--fietsboek/updater/scripts/upd_20260930_7fa8kflikvnlvuqe.py59
2 files changed, 101 insertions, 0 deletions
diff --git a/fietsboek/alembic/versions/20260930_b73ed8b45f67.py b/fietsboek/alembic/versions/20260930_b73ed8b45f67.py
new file mode 100644
index 0000000..c852e97
--- /dev/null
+++ b/fietsboek/alembic/versions/20260930_b73ed8b45f67.py
@@ -0,0 +1,42 @@
+"""add climbs table
+
+Revision ID: b73ed8b45f67
+Revises: f9ca03541351
+Create Date: 2026-09-30 19:53:17.788093
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = 'b73ed8b45f67'
+down_revision = 'f9ca03541351'
+branch_labels = None
+depends_on = None
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.create_table('climbs',
+ sa.Column('id', sa.Integer(), nullable=False),
+ sa.Column('track_id', sa.Integer(), nullable=False),
+ sa.Column('automatic_name', sa.Text(), nullable=True),
+ sa.Column('given_name', sa.Text(), nullable=True),
+ sa.Column('image', sa.LargeBinary(), nullable=False),
+ sa.Column('profile', sa.LargeBinary(), nullable=False),
+ sa.Column('avg_grade', sa.Float(), nullable=False),
+ sa.Column('length', sa.Float(), nullable=False),
+ sa.Column('lowest_elevation', sa.Float(), nullable=False),
+ sa.Column('highest_elevation', sa.Float(), nullable=False),
+ sa.Column('category', sa.Integer(), nullable=True),
+ sa.Column('start_index', sa.Integer(), nullable=False),
+ sa.Column('end_index', sa.Integer(), nullable=False),
+ sa.ForeignKeyConstraint(['track_id'], ['tracks.id'], name=op.f('fk_climbs_track_id_tracks')),
+ sa.PrimaryKeyConstraint('id', name=op.f('pk_climbs'))
+ )
+ # ### end Alembic commands ###
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_table('climbs')
+ # ### end Alembic commands ###
diff --git a/fietsboek/updater/scripts/upd_20260930_7fa8kflikvnlvuqe.py b/fietsboek/updater/scripts/upd_20260930_7fa8kflikvnlvuqe.py
new file mode 100644
index 0000000..f96764b
--- /dev/null
+++ b/fietsboek/updater/scripts/upd_20260930_7fa8kflikvnlvuqe.py
@@ -0,0 +1,59 @@
+"""Revision upgrade script 7fa8kflikvnlvuqe
+
+Add climbs table
+
+Date created: 2026-09-30 19:54:52.669074
+"""
+import time
+
+from fietsboek.models import Track
+from fietsboek.updater.script import UpdateScript
+from fietsboek.views.tileproxy import TileRequester
+from fietsboek import actions
+from fietsboek import config as mod_config
+from fietsboek import osm
+
+from sqlalchemy import create_engine, select
+from sqlalchemy.orm import sessionmaker
+
+import redis
+import requests
+
+
+update_id = '7fa8kflikvnlvuqe'
+previous = [
+ 'v0.12.1',
+]
+alembic_revision = 'b73ed8b45f67'
+
+
+class Up(UpdateScript):
+ def pre_alembic(self, config):
+ pass
+
+ def post_alembic(self, config):
+ fietsconfig = mod_config.parse(config)
+ engine = create_engine(fietsconfig.sqlalchemy_url)
+ Session = sessionmaker(engine)
+
+ redis_con = redis.from_url(fietsconfig.redis_url)
+
+ layer = fietsconfig.public_tile_layers()[0]
+ tile_requester = TileRequester(redis_con)
+
+ with Session() as session:
+ for track in session.execute(select(Track)).scalars():
+ self.tell(f"Extracting climbs for track {track.id}")
+ actions.extract_climbs(session, track, tile_requester, layer)
+ # Don't hammer the OSM API too much
+ time.sleep(1)
+ session.commit()
+ self.tell("Done extracting climbs")
+
+
+class Down(UpdateScript):
+ def pre_alembic(self, config):
+ pass
+
+ def post_alembic(self, config):
+ pass