Fix bug where we weren't properly caching enum values and we were always looking up the media type when constructing manifests

This commit is contained in:
Joseph Schorr 2019-01-22 14:46:38 -05:00
parent ed75daf3d9
commit bbfb0211dc
5 changed files with 51 additions and 21 deletions

View file

@ -398,6 +398,16 @@ class QuayUserField(ForeignKeyField):
super(QuayUserField, self).__init__(*args, **kwargs)
@lru_cache(maxsize=16)
def _get_enum_field_values(enum_field):
values = []
for row in enum_field.rel_model.select():
key = getattr(row, enum_field.enum_key_field)
value = getattr(row, 'id')
values.append((key, value))
return Enum(enum_field.rel_model.__name__, values)
class EnumField(ForeignKeyField):
""" Create a cached python Enum from an EnumTable """
def __init__(self, model, enum_key_field='name', *args, **kwargs):
@ -409,15 +419,9 @@ class EnumField(ForeignKeyField):
super(EnumField, self).__init__(model, *args, **kwargs)
@property
@lru_cache(maxsize=1)
def enum(self):
""" Returns a python enun.Enum generated from the associated EnumTable """
values = []
for row in self.rel_model.select():
key = getattr(row, self.enum_key_field)
value = getattr(row, 'id')
values.append((key, value))
return Enum(self.rel_model.__name__, values)
return _get_enum_field_values(self)
def get_id(self, name):
""" Returns the ForeignKeyId from the name field