diff --git a/.dockerignore b/.dockerignore index fb2bb68..c56db2a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,5 +2,4 @@ config/config.ini config/debug.log config/sqlite.db config/info.log -alembic.ini README.ini \ No newline at end of file diff --git a/.gitignore b/.gitignore index e292dc2..6dc7536 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ env/ venv/ -*.ini __pycache__/ .idea config/config.ini diff --git a/alembic.ini b/alembic.ini new file mode 100644 index 0000000..06ec989 --- /dev/null +++ b/alembic.ini @@ -0,0 +1,102 @@ +# A generic, single database configuration. + +[alembic] +# path to migration scripts +script_location = src/alembic + +# template used to generate migration files +file_template = %%(year)d_%%(month).2d_%%(day).2d-%%(hour).2d_%%(minute).2d_%%(second).2d-%%(rev)s_%%(slug)s + +# sys.path path, will be prepended to sys.path if present. +# defaults to the current working directory. +prepend_sys_path = . + +# timezone to use when rendering the date within the migration file +# as well as the filename. +# If specified, requires the python-dateutil library that can be +# installed by adding `alembic[tz]` to the pip requirements +# string value is passed to dateutil.tz.gettz() +# leave blank for localtime +# timezone = + +# max length of characters to apply to the +# "slug" field +# truncate_slug_length = 40 + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + +# set to 'true' to allow .pyc and .pyo files without +# a source .py file to be detected as revisions in the +# versions/ directory +# sourceless = false + +# version location specification; This defaults +# to alembic/versions. When using multiple version +# directories, initial revisions must be specified with --version-path. +# The path separator used here should be the separator specified by "version_path_separator" below. +# version_locations = %(here)s/bar:%(here)s/bat:alembic/versions:src/alembic/versions + +# version path separator; As mentioned above, this is the character used to split +# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep. +# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas. +# Valid values for version_path_separator are: +# +# version_path_separator = : +# version_path_separator = ; +# version_path_separator = space +# version_path_separator = os # Use os.pathsep. Default configuration used for new projects. + +# the output encoding used when revision files +# are written from script.py.mako +# output_encoding = utf-8 + +sqlalchemy.url = sqlite:///config/sqlite.db + + +[post_write_hooks] +# post_write_hooks defines scripts or Python functions that are run +# on newly generated revision scripts. See the documentation for further +# detail and examples + +# format using "black" - use the console_scripts runner, against the "black" entrypoint +# hooks = black +# black.type = console_scripts +# black.entrypoint = black +# black.options = -l 79 REVISION_SCRIPT_FILENAME + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/src/alembic/versions/2022_05_21-10_25_41-15c028536ef5_won_column_removed.py b/src/alembic/versions/2022_05_21-10_25_41-15c028536ef5_won_column_removed.py new file mode 100644 index 0000000..7abd9af --- /dev/null +++ b/src/alembic/versions/2022_05_21-10_25_41-15c028536ef5_won_column_removed.py @@ -0,0 +1,31 @@ +"""won column removed + +Revision ID: 15c028536ef5 +Revises: 1da33402b659 +Create Date: 2022-05-21 10:25:41.647723 + +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = '15c028536ef5' +down_revision = '1da33402b659' +branch_labels = None +depends_on = None + + +def upgrade(): + op.drop_column('giveaway', 'won') + + +def downgrade(): + # add columns as nullable as existing records don't have that column value set + op.add_column('giveaway', sa.Column('won', sa.Boolean(), nullable=True)) + # set value on new columns for all records + with op.get_context().autocommit_block(): + op.execute("UPDATE giveaway SET won=false WHERE won is null;") + # SQLite doesn't support ALTERs so alembic uses a batch mode + # Set columns to non-nullable now that all records have a value + with op.batch_alter_table('giveaway') as batch_op: + batch_op.alter_column('won', nullable=False) diff --git a/src/bot/database.py b/src/bot/database.py index 849fcad..ec6beea 100644 --- a/src/bot/database.py +++ b/src/bot/database.py @@ -124,7 +124,6 @@ class GiveawayHelper: copies=giveaway.copies, contributor_level=giveaway.contributor_level, entered=entered, - won=False, game_entries=giveaway.game_entries) session.add(g) session.commit() @@ -147,7 +146,6 @@ class GiveawayHelper: copies=giveaway.copies, contributor_level=giveaway.contributor_level, entered=entered, - won=False, game_entries=giveaway.game_entries) session.merge(g) session.commit() \ No newline at end of file diff --git a/src/bot/models.py b/src/bot/models.py index f9174f8..c16b9f2 100644 --- a/src/bot/models.py +++ b/src/bot/models.py @@ -42,7 +42,6 @@ class TableGiveaway(Base): copies = Column(Integer(), nullable=False) contributor_level = Column(Integer(), nullable=False) entered = Column(Boolean(), nullable=False) - won = Column(Boolean(), nullable=False) game_entries = Column(Integer(), nullable=False) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())