Skip to content

Commit

Permalink
Make PyIntEnum freeze enums in Alembic revisions
Browse files Browse the repository at this point in the history
  • Loading branch information
OmeGak committed Apr 23, 2020
1 parent 050cc8e commit f31423d
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
2 changes: 2 additions & 0 deletions CHANGES.rst
Expand Up @@ -84,6 +84,8 @@ Internal Changes
- Add ``registrations`` kwarg to the ``event.designer.print_badge_template``
signal (:issue:`4297`, thanks :user:`giusedb`)
- Add ``registration_form_edited`` signal (:issue:`4421`, thanks :user:`omegak`)
- Make PyIntEnum freeze enums in Alembic revisions (:issue:`4425`, thanks
:user:`omegak`)


----
Expand Down
17 changes: 13 additions & 4 deletions indico/core/db/sqlalchemy/custom/int_enum.py
Expand Up @@ -66,13 +66,22 @@ def coerce_set_value(self, value):

def alembic_render_type(self, autogen_context):
autogen_context.imports.add('from indico.core.db.sqlalchemy import PyIntEnum')
autogen_context.imports.add('from {} import {}'.format(self.enum.__module__, self.enum.__name__))
name = '_{}'.format(self.enum.__name__)
members = '\n'.join(['\t{} = {}'.format(k, v.value) for k, v in self.enum.__members__.iteritems()])
enum = ("""
# ### code auto-generated by PyIntEnum - please adjust
from enum import Enum
class {name}(int, Enum):
{members}
# ### end of PyIntEnum code - please adjust
""".format(name=name, members=members))
autogen_context.imports.add(enum)
if self.exclude_values:
return '{}({}, exclude_values={{{}}})'.format(type(self).__name__, self.enum.__name__, ', '.join(
'{}.{}'.format(self.enum.__name__, x.name) for x in sorted(self.exclude_values)
return '{}({}, exclude_values={{{}}})'.format(type(self).__name__, name, ', '.join(
'{}.{}'.format(name, x.name) for x in sorted(self.exclude_values)
))
else:
return '{}({})'.format(type(self).__name__, self.enum.__name__)
return '{}({})'.format(type(self).__name__, name)

def marshmallow_get_field_kwargs(self):
return {'enum': self.enum}
Expand Down

0 comments on commit f31423d

Please sign in to comment.