diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d01566..02dd2ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.3.1 + +- Fixed a critical bug that prevented database initialization + ## 0.3.0 - Initial commit @@ -11,7 +15,7 @@ - Admins can remove reported posts - Upvotes and downvotes -## 0.2.0 and earlier +## 0.2 and earlier *Releases before 0.3.0 are lost for good, and for a good reason.* diff --git a/alembic/versions/c7c2d5b8f71c_.py b/alembic/versions/c7c2d5b8f71c_.py deleted file mode 100644 index ce29710..0000000 --- a/alembic/versions/c7c2d5b8f71c_.py +++ /dev/null @@ -1,50 +0,0 @@ -"""empty message - -Revision ID: c7c2d5b8f71c -Revises: fc9d1a0dc94e -Create Date: 2025-06-12 09:21:17.960836 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'c7c2d5b8f71c' -down_revision: Union[str, None] = 'fc9d1a0dc94e' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('freak_comment', sa.Column('removed_at', sa.DateTime(), nullable=True)) - op.add_column('freak_comment', sa.Column('removed_by_id', sa.BigInteger(), nullable=True)) - op.add_column('freak_comment', sa.Column('removed_reason', sa.SmallInteger(), nullable=True)) - op.create_foreign_key('user_banner_id', 'freak_comment', 'freak_user', ['removed_by_id'], ['id']) - op.add_column('freak_post', sa.Column('removed_at', sa.DateTime(), nullable=True)) - op.add_column('freak_post', sa.Column('removed_by_id', sa.BigInteger(), nullable=True)) - op.add_column('freak_post', sa.Column('removed_reason', sa.SmallInteger(), nullable=True)) - op.create_foreign_key('user_banner_id', 'freak_post', 'freak_user', ['removed_by_id'], ['id']) - op.add_column('freak_user', sa.Column('banned_reason', sa.SmallInteger(), server_default=sa.text('0'), nullable=True)) - op.alter_column('freak_user', 'ban_reason', new_column_name='banned_message') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('freak_user', 'banned_message', new_column_name='ban_reason') - op.drop_column('freak_user', 'banned_reason') - op.drop_constraint('user_banner_id', 'freak_post', type_='foreignkey') - op.drop_column('freak_post', 'removed_reason') - op.drop_column('freak_post', 'removed_by_id') - op.drop_column('freak_post', 'removed_at') - op.drop_constraint('user_banner_id', 'freak_comment', type_='foreignkey') - op.drop_column('freak_comment', 'removed_reason') - op.drop_column('freak_comment', 'removed_by_id') - op.drop_column('freak_comment', 'removed_at') - # ### end Alembic commands ### diff --git a/alembic/versions/fc9d1a0dc94e_.py b/alembic/versions/fc9d1a0dc94e_.py deleted file mode 100644 index a1aee26..0000000 --- a/alembic/versions/fc9d1a0dc94e_.py +++ /dev/null @@ -1,132 +0,0 @@ -"""empty message - -Revision ID: fc9d1a0dc94e -Revises: -Create Date: 2025-06-11 18:23:07.871471 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision: str = 'fc9d1a0dc94e' -down_revision: Union[str, None] = None -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('freak_comment', 'author_id', - existing_type=sa.BIGINT(), - nullable=True) - op.drop_index('idx_16573_comment_parent_comment_id', table_name='freak_comment') - op.drop_index('idx_16573_comment_parent_post_id', table_name='freak_comment') - op.drop_index('idx_16573_comment_pub_date', table_name='freak_comment') - op.drop_index('idx_16573_comment_user_id', table_name='freak_comment') - op.create_index(op.f('ix_freak_comment_created_at'), 'freak_comment', ['created_at'], unique=False) - op.alter_column('freak_post', 'author_id', - existing_type=sa.BIGINT(), - nullable=True) - op.drop_index('idx_16568_post_community_id', table_name='freak_post') - op.drop_index('idx_16568_post_pub_date', table_name='freak_post') - op.drop_index('idx_16568_post_user_id', table_name='freak_post') - op.add_column('freak_postreport', sa.Column('created_ip', sa.String(length=64), nullable=False)) - op.alter_column('freak_postreport', 'target_type', - existing_type=sa.SMALLINT(), - nullable=False) - op.alter_column('freak_postreport', 'target_id', - existing_type=sa.BIGINT(), - nullable=False) - op.alter_column('freak_postreport', 'reason_code', - existing_type=sa.SMALLINT(), - nullable=False) - op.alter_column('freak_topic', 'created_at', - existing_type=postgresql.TIMESTAMP(), - nullable=False, - existing_server_default=sa.text('CURRENT_TIMESTAMP')) - op.drop_index('idx_16563_community_created_on', table_name='freak_topic') - op.drop_index('idx_16563_community_name', table_name='freak_topic') - op.create_index(op.f('ix_freak_topic_created_at'), 'freak_topic', ['created_at'], unique=False) - op.create_unique_constraint(None, 'freak_topic', ['name']) - op.alter_column('freak_user', 'joined_at', - existing_type=postgresql.TIMESTAMP(), - nullable=False, - existing_server_default=sa.text('CURRENT_TIMESTAMP')) - op.alter_column('freak_user', 'is_administrator', - existing_type=sa.BOOLEAN(), - nullable=False, - existing_server_default=sa.text('false')) - op.alter_column('freak_user', 'is_disabled_by_user', - existing_type=sa.BOOLEAN(), - nullable=False, - existing_server_default=sa.text('false')) - op.alter_column('freak_user', 'karma', - existing_type=sa.BIGINT(), - nullable=False, - existing_server_default=sa.text('0')) - op.drop_index('idx_16578_user_join_date', table_name='freak_user') - op.drop_index('idx_16578_user_username', table_name='freak_user') - op.create_unique_constraint(None, 'freak_user', ['username']) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(None, 'freak_user', type_='unique') - op.create_index('idx_16578_user_username', 'freak_user', ['username'], unique=True) - op.create_index('idx_16578_user_join_date', 'freak_user', ['joined_at'], unique=False) - op.alter_column('freak_user', 'karma', - existing_type=sa.BIGINT(), - nullable=True, - existing_server_default=sa.text('0')) - op.alter_column('freak_user', 'is_disabled_by_user', - existing_type=sa.BOOLEAN(), - nullable=True, - existing_server_default=sa.text('false')) - op.alter_column('freak_user', 'is_administrator', - existing_type=sa.BOOLEAN(), - nullable=True, - existing_server_default=sa.text('false')) - op.alter_column('freak_user', 'joined_at', - existing_type=postgresql.TIMESTAMP(), - nullable=True, - existing_server_default=sa.text('CURRENT_TIMESTAMP')) - op.drop_constraint(None, 'freak_topic', type_='unique') - op.drop_index(op.f('ix_freak_topic_created_at'), table_name='freak_topic') - op.create_index('idx_16563_community_name', 'freak_topic', ['name'], unique=True) - op.create_index('idx_16563_community_created_on', 'freak_topic', ['created_at'], unique=False) - op.alter_column('freak_topic', 'created_at', - existing_type=postgresql.TIMESTAMP(), - nullable=True, - existing_server_default=sa.text('CURRENT_TIMESTAMP')) - op.alter_column('freak_postreport', 'reason_code', - existing_type=sa.SMALLINT(), - nullable=True) - op.alter_column('freak_postreport', 'target_id', - existing_type=sa.BIGINT(), - nullable=True) - op.alter_column('freak_postreport', 'target_type', - existing_type=sa.SMALLINT(), - nullable=True) - op.drop_column('freak_postreport', 'created_ip') - op.create_index('idx_16568_post_user_id', 'freak_post', ['author_id'], unique=False) - op.create_index('idx_16568_post_pub_date', 'freak_post', ['created_at'], unique=False) - op.create_index('idx_16568_post_community_id', 'freak_post', ['topic_id'], unique=False) - op.alter_column('freak_post', 'author_id', - existing_type=sa.BIGINT(), - nullable=False) - op.drop_index(op.f('ix_freak_comment_created_at'), table_name='freak_comment') - op.create_index('idx_16573_comment_user_id', 'freak_comment', ['author_id'], unique=False) - op.create_index('idx_16573_comment_pub_date', 'freak_comment', ['created_at'], unique=False) - op.create_index('idx_16573_comment_parent_post_id', 'freak_comment', ['parent_post_id'], unique=False) - op.create_index('idx_16573_comment_parent_comment_id', 'freak_comment', ['parent_comment_id'], unique=False) - op.alter_column('freak_comment', 'author_id', - existing_type=sa.BIGINT(), - nullable=False) - # ### end Alembic commands ### diff --git a/freak/__init__.py b/freak/__init__.py index 4903958..12e0837 100644 --- a/freak/__init__.py +++ b/freak/__init__.py @@ -3,17 +3,18 @@ from sqlite3 import ProgrammingError import warnings from flask import ( - Flask, abort, flash, g, jsonify, redirect, render_template, + Flask, g, redirect, render_template, request, send_from_directory, url_for ) -import datetime, time, re, os, sys, string, json, html, dotenv +import os +import dotenv from flask_login import LoginManager from flask_wtf.csrf import CSRFProtect from sqlalchemy import select from werkzeug.routing import BaseConverter from sassutils.wsgi import SassMiddleware -__version__ = '0.3.0' +__version__ = '0.3.1' APP_BASE_DIR = os.path.dirname(os.path.dirname(__file__)) diff --git a/freak/cli.py b/freak/cli.py index 0426802..06b9727 100644 --- a/freak/cli.py +++ b/freak/cli.py @@ -2,16 +2,22 @@ import argparse import os +import subprocess from . import __version__ as version - +from .models import db def make_parser(): parser = argparse.ArgumentParser() parser.add_argument('--version', '-v', action='version', version=version) + parser.add_argument('--upgrade', '-U', action='store_true', help='create or upgrade schema') return parser def main(): args = make_parser().parse_args() + if args.upgrade: + db.metadata.create_all() + subprocess.Popen(['alembic', 'upgrade', 'head']).wait() + print('Schema upgraded!') print(f'Visit ')