diff options
Diffstat (limited to 'mediagoblin/db')
-rw-r--r-- | mediagoblin/db/base.py | 6 | ||||
-rw-r--r-- | mediagoblin/db/migration_tools.py | 39 | ||||
-rw-r--r-- | mediagoblin/db/migrations.py | 43 | ||||
-rw-r--r-- | mediagoblin/db/migrations/env.py | 1 | ||||
-rw-r--r-- | mediagoblin/db/migrations/versions/afd3d1da5e29_subtitle_plugin_initial_migration.py | 2 | ||||
-rw-r--r-- | mediagoblin/db/mixin.py | 30 | ||||
-rw-r--r-- | mediagoblin/db/models.py | 83 | ||||
-rw-r--r-- | mediagoblin/db/open.py | 8 | ||||
-rw-r--r-- | mediagoblin/db/util.py | 2 |
9 files changed, 103 insertions, 111 deletions
diff --git a/mediagoblin/db/base.py b/mediagoblin/db/base.py index c59b0ebf..d2595ce2 100644 --- a/mediagoblin/db/base.py +++ b/mediagoblin/db/base.py @@ -25,7 +25,7 @@ if not DISABLE_GLOBALS: from sqlalchemy.orm import scoped_session, sessionmaker Session = scoped_session(sessionmaker()) -class FakeCursor(object): +class FakeCursor: def __init__ (self, cursor, mapper, filter=None): self.cursor = cursor @@ -50,7 +50,7 @@ class FakeCursor(object): r = self.cursor.slice(*args, **kwargs) return list(six.moves.filter(self.filter, six.moves.map(self.mapper, r))) -class GMGTableBase(object): +class GMGTableBase: # Deletion types HARD_DELETE = "hard-deletion" SOFT_DELETE = "soft-deletion" @@ -194,7 +194,7 @@ class GMGTableBase(object): Base = declarative_base(cls=GMGTableBase) -class DictReadAttrProxy(object): +class DictReadAttrProxy: """ Maps read accesses to obj['key'] to obj.key and hides all the rest of the obj diff --git a/mediagoblin/db/migration_tools.py b/mediagoblin/db/migration_tools.py index 852f35ee..149aab4d 100644 --- a/mediagoblin/db/migration_tools.py +++ b/mediagoblin/db/migration_tools.py @@ -14,7 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -from __future__ import unicode_literals import logging import os @@ -36,7 +35,7 @@ class TableAlreadyExists(Exception): pass -class MigrationManager(object): +class MigrationManager: """ Migration handling tool. @@ -148,7 +147,7 @@ class MigrationManager(object): # Maybe in the future just print out a "Yikes!" or something? if model.__table__.exists(self.session.bind): raise TableAlreadyExists( - u"Intended to create table '%s' but it already exists" % + "Intended to create table '%s' but it already exists" % model.__table__.name) self.migration_model.metadata.create_all( @@ -171,26 +170,26 @@ class MigrationManager(object): """ if self.database_current_migration is None: self.printer( - u'~> Woulda initialized: %s\n' % self.name_for_printing()) - return u'inited' + '~> Woulda initialized: %s\n' % self.name_for_printing()) + return 'inited' migrations_to_run = self.migrations_to_run() if migrations_to_run: self.printer( - u'~> Woulda updated %s:\n' % self.name_for_printing()) + '~> Woulda updated %s:\n' % self.name_for_printing()) for migration_number, migration_func in migrations_to_run(): self.printer( - u' + Would update %s, "%s"\n' % ( + ' + Would update {}, "{}"\n'.format( migration_number, migration_func.func_name)) - return u'migrated' + return 'migrated' def name_for_printing(self): - if self.name == u'__main__': - return u"main mediagoblin tables" + if self.name == '__main__': + return "main mediagoblin tables" else: - return u'plugin "%s"' % self.name + return 'plugin "%s"' % self.name def init_or_migrate(self): """ @@ -213,36 +212,36 @@ class MigrationManager(object): # - print / inform the user # - return 'inited' if migration_number is None: - self.printer(u"-> Initializing %s... " % self.name_for_printing()) + self.printer("-> Initializing %s... " % self.name_for_printing()) self.init_tables() # auto-set at latest migration number self.create_new_migration_record() - self.printer(u"done.\n") + self.printer("done.\n") self.set_current_migration() - return u'inited' + return 'inited' # Run migrations, if appropriate. migrations_to_run = self.migrations_to_run() if migrations_to_run: self.printer( - u'-> Updating %s:\n' % self.name_for_printing()) + '-> Updating %s:\n' % self.name_for_printing()) for migration_number, migration_func in migrations_to_run: self.printer( - u' + Running migration %s, "%s"... ' % ( + ' + Running migration {}, "{}"... '.format( migration_number, migration_func.__name__)) migration_func(self.session) self.set_current_migration(migration_number) self.printer('done.\n') - return u'migrated' + return 'migrated' # Otherwise return None. Well it would do this anyway, but # for clarity... ;) return None -class RegisterMigration(object): +class RegisterMigration: """ Tool for registering migrations @@ -348,9 +347,9 @@ def populate_table_foundations(session, foundations, name, Create the table foundations (default rows) as layed out in FOUNDATIONS in mediagoblin.db.models """ - printer(u'Laying foundations for %s:\n' % name) + printer('Laying foundations for %s:\n' % name) for Model, rows in foundations.items(): - printer(u' + Laying foundations for %s table\n' % + printer(' + Laying foundations for %s table\n' % (Model.__name__)) for parameters in rows: new_row = Model(**parameters) diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py index 55d64294..e6a80310 100644 --- a/mediagoblin/db/migrations.py +++ b/mediagoblin/db/migrations.py @@ -14,7 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -from __future__ import print_function import datetime import uuid @@ -267,11 +266,11 @@ def mediaentry_new_slug_era(db): for row in db.execute(media_table.select()): # no slug, try setting to an id if not row.slug: - append_garbage_till_unique(row, six.text_type(row.id)) + append_garbage_till_unique(row, str(row.id)) # has "=" or ":" in it... we're getting rid of those - elif u"=" in row.slug or u":" in row.slug: + elif "=" in row.slug or ":" in row.slug: append_garbage_till_unique( - row, row.slug.replace(u"=", u"-").replace(u":", u"-")) + row, row.slug.replace("=", "-").replace(":", "-")) db.commit() @@ -296,7 +295,7 @@ def unique_collections_slug(db): existing_slugs[row.creator].append(row.slug) for row_id in slugs_to_change: - new_slug = six.text_type(uuid.uuid4()) + new_slug = str(uuid.uuid4()) db.execute(collection_table.update(). where(collection_table.c.id == row_id). values(slug=new_slug)) @@ -428,9 +427,9 @@ class Client_v0(declarative_base()): def __repr__(self): if self.application_name: - return "<Client {0} - {1}>".format(self.application_name, self.id) + return "<Client {} - {}>".format(self.application_name, self.id) else: - return "<Client {0}>".format(self.id) + return "<Client {}>".format(self.id) class RequestToken_v0(declarative_base()): """ @@ -445,7 +444,7 @@ class RequestToken_v0(declarative_base()): used = Column(Boolean, default=False) authenticated = Column(Boolean, default=False) verifier = Column(Unicode, nullable=True) - callback = Column(Unicode, nullable=False, default=u"oob") + callback = Column(Unicode, nullable=False, default="oob") created = Column(DateTime, nullable=False, default=datetime.datetime.now) updated = Column(DateTime, nullable=False, default=datetime.datetime.now) @@ -589,12 +588,12 @@ class PrivilegeUserAssociation_v0(declarative_base()): primary_key=True) -PRIVILEGE_FOUNDATIONS_v0 = [{'privilege_name':u'admin'}, - {'privilege_name':u'moderator'}, - {'privilege_name':u'uploader'}, - {'privilege_name':u'reporter'}, - {'privilege_name':u'commenter'}, - {'privilege_name':u'active'}] +PRIVILEGE_FOUNDATIONS_v0 = [{'privilege_name':'admin'}, + {'privilege_name':'moderator'}, + {'privilege_name':'uploader'}, + {'privilege_name':'reporter'}, + {'privilege_name':'commenter'}, + {'privilege_name':'active'}] # vR1 stands for "version Rename 1". This only exists because we need # to deal with dropping some booleans and it's otherwise impossible @@ -656,11 +655,11 @@ def create_moderation_tables(db): db.execute( user_table.select().where( user_table.c.is_admin==False).where( - user_table.c.status==u"active")).fetchall(), + user_table.c.status=="active")).fetchall(), db.execute( user_table.select().where( user_table.c.is_admin==False).where( - user_table.c.status!=u"active")).fetchall()) + user_table.c.status!="active")).fetchall()) # Get the ids for each of the privileges so we can reference them ~~~~~~~~~ (admin_privilege_id, uploader_privilege_id, @@ -669,7 +668,7 @@ def create_moderation_tables(db): db.execute(privileges_table.select().where( privileges_table.c.privilege_name==privilege_name)).first()['id'] for privilege_name in - [u"admin",u"uploader",u"reporter",u"commenter",u"active"] + ["admin","uploader","reporter","commenter","active"] ] # Give each user the appopriate privileges depending whether they are an @@ -854,14 +853,14 @@ def revert_username_index(db): """ metadata = MetaData(bind=db.bind) user_table = inspect_table(metadata, "core__users") - indexes = dict( - [(index.name, index) for index in user_table.indexes]) + indexes = { + index.name: index for index in user_table.indexes} # index from unnecessary migration - users_uploader_index = indexes.get(u'ix_core__users_uploader') + users_uploader_index = indexes.get('ix_core__users_uploader') # index created from models.py after (unique=True, index=True) # was set in models.py - users_username_index = indexes.get(u'ix_core__users_username') + users_username_index = indexes.get('ix_core__users_username') if users_uploader_index is None and users_username_index is None: # We don't need to do anything. @@ -988,7 +987,7 @@ def activity_migration(db): # Get the ID of that generator gmg_generator = db.execute(generator_table.select( - generator_table.c.name==u"GNU Mediagoblin")).first() + generator_table.c.name=="GNU Mediagoblin")).first() # Now we want to modify the tables which MAY have an activity at some point diff --git a/mediagoblin/db/migrations/env.py b/mediagoblin/db/migrations/env.py index a6d05cd1..48b32ad6 100644 --- a/mediagoblin/db/migrations/env.py +++ b/mediagoblin/db/migrations/env.py @@ -1,4 +1,3 @@ -from __future__ import with_statement from alembic import context from sqlalchemy import engine_from_config, pool from logging.config import fileConfig diff --git a/mediagoblin/db/migrations/versions/afd3d1da5e29_subtitle_plugin_initial_migration.py b/mediagoblin/db/migrations/versions/afd3d1da5e29_subtitle_plugin_initial_migration.py index 565d4864..7177480a 100644 --- a/mediagoblin/db/migrations/versions/afd3d1da5e29_subtitle_plugin_initial_migration.py +++ b/mediagoblin/db/migrations/versions/afd3d1da5e29_subtitle_plugin_initial_migration.py @@ -24,7 +24,7 @@ def upgrade(): sa.Column('name', sa.Unicode(), nullable=False), sa.Column('filepath', PathTupleWithSlashes(), nullable=True), sa.Column('created', sa.DateTime(), nullable=False), - sa.ForeignKeyConstraint(['media_entry'], [u'core__media_entries.id'], ), + sa.ForeignKeyConstraint(['media_entry'], ['core__media_entries.id'], ), sa.PrimaryKeyConstraint('id') ) ### end Alembic commands ### diff --git a/mediagoblin/db/mixin.py b/mediagoblin/db/mixin.py index a6965bf4..1a47c46f 100644 --- a/mediagoblin/db/mixin.py +++ b/mediagoblin/db/mixin.py @@ -41,7 +41,7 @@ from mediagoblin.tools.text import cleaned_markdown_conversion from mediagoblin.tools.url import slugify from mediagoblin.tools.translate import pass_to_ugettext as _ -class CommentingMixin(object): +class CommentingMixin: """ Mixin that gives classes methods to get and add the comments on/to it @@ -80,9 +80,9 @@ class CommentingMixin(object): link = self.get_comment_link() if link is not None: link.delete() - super(CommentingMixin, self).soft_delete(*args, **kwargs) + super().soft_delete(*args, **kwargs) -class GeneratePublicIDMixin(object): +class GeneratePublicIDMixin: """ Mixin that ensures that a the public_id field is populated. @@ -118,7 +118,7 @@ class GeneratePublicIDMixin(object): self.save() return self.public_id -class UserMixin(object): +class UserMixin: object_type = "person" @property @@ -132,7 +132,7 @@ class UserMixin(object): user=self.username, **kwargs) -class GenerateSlugMixin(object): +class GenerateSlugMixin: """ Mixin to add a generate_slug method to objects. @@ -179,7 +179,7 @@ class GenerateSlugMixin(object): return # We don't want any empty string slugs - if slug == u"": + if slug == "": return # Otherwise, let's see if this is unique. @@ -188,7 +188,7 @@ class GenerateSlugMixin(object): # Can we just append the object's id to the end? if self.id: - slug_with_id = u"%s-%s" % (slug, self.id) + slug_with_id = "{}-{}".format(slug, self.id) if not self.check_slug_used(slug_with_id): self.slug = slug_with_id return # success! @@ -284,7 +284,7 @@ class MediaEntryMixin(GenerateSlugMixin, GeneratePublicIDMixin): if self.slug: return self.slug else: - return u'id:%s' % self.id + return 'id:%s' % self.id def url_for_self(self, urlgen, **extra_args): """ @@ -306,26 +306,26 @@ class MediaEntryMixin(GenerateSlugMixin, GeneratePublicIDMixin): Will return either the real thumbnail or a default fallback icon.""" # TODO: implement generic fallback in case MEDIA_MANAGER does # not specify one? - if u'thumb' in self.media_files: + if 'thumb' in self.media_files: thumb_url = self._app.public_store.file_url( - self.media_files[u'thumb']) + self.media_files['thumb']) else: # No thumbnail in media available. Get the media's # MEDIA_MANAGER for the fallback icon and return static URL # Raises FileTypeNotSupported in case no such manager is enabled manager = self.media_manager - thumb_url = self._app.staticdirector(manager[u'default_thumb']) + thumb_url = self._app.staticdirector(manager['default_thumb']) return thumb_url @property def original_url(self): """ Returns the URL for the original image will return self.thumb_url if original url doesn't exist""" - if u"original" not in self.media_files: + if "original" not in self.media_files: return self.thumb_url return self._app.public_store.file_url( - self.media_files[u"original"] + self.media_files["original"] ) @property @@ -442,7 +442,7 @@ class TextCommentMixin(GeneratePublicIDMixin): return cleaned_markdown_conversion(self.content) def __unicode__(self): - return u'<{klass} #{id} {actor} "{comment}">'.format( + return '<{klass} #{id} {actor} "{comment}">'.format( klass=self.__class__.__name__, id=self.id, actor=self.get_actor, @@ -514,7 +514,7 @@ class CollectionMixin(GenerateSlugMixin, GeneratePublicIDMixin): item.save(commit=commit) return item -class CollectionItemMixin(object): +class CollectionItemMixin: @property def note_html(self): """ diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index 0974676a..11d7b275 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -18,7 +18,6 @@ TODO: indexes on foreignkeys, where useful. """ -from __future__ import print_function import logging import datetime @@ -114,9 +113,9 @@ class GenericModelReference(Base): # to prevent circular imports do import here registry = dict(Base._decl_class_registry).values() - self._TYPE_MAP = dict( - ((m.__tablename__, m) for m in registry if hasattr(m, "__tablename__")) - ) + self._TYPE_MAP = { + m.__tablename__: m for m in registry if hasattr(m, "__tablename__") + } setattr(type(self), "_TYPE_MAP", self._TYPE_MAP) return self.__class__._TYPE_MAP[model_type] @@ -271,7 +270,7 @@ class User(Base, UserMixin): for activity in Activity.query.filter_by(actor=self.id): activity.delete(**kwargs) - super(User, self).soft_delete(*args, **kwargs) + super().soft_delete(*args, **kwargs) def delete(self, *args, **kwargs): @@ -291,8 +290,8 @@ class User(Base, UserMixin): # Delete user, pass through commit=False/True in kwargs username = self.username - super(User, self).delete(*args, **kwargs) - _log.info('Deleted user "{0}" account'.format(username)) + super().delete(*args, **kwargs) + _log.info('Deleted user "{}" account'.format(username)) def has_privilege(self, privilege, allow_admin=True): """ @@ -311,7 +310,7 @@ class User(Base, UserMixin): priv = Privilege.query.filter_by(privilege_name=privilege).one() if priv in self.all_privileges: return True - elif allow_admin and self.has_privilege(u'admin', allow_admin=False): + elif allow_admin and self.has_privilege('admin', allow_admin=False): return True return False @@ -383,15 +382,15 @@ class LocalUser(User): # plugin data would be in a separate model def __repr__(self): - return '<{0} #{1} {2} {3} "{4}">'.format( + return '<{} #{} {} {} "{}">'.format( self.__class__.__name__, self.id, - 'verified' if self.has_privilege(u'active') else 'non-verified', - 'admin' if self.has_privilege(u'admin') else 'user', + 'verified' if self.has_privilege('active') else 'non-verified', + 'admin' if self.has_privilege('admin') else 'user', self.username) def get_public_id(self, host): - return "acct:{0}@{1}".format(self.username, host) + return "acct:{}@{}".format(self.username, host) def serialize(self, request): user = { @@ -423,7 +422,7 @@ class LocalUser(User): }, } - user.update(super(LocalUser, self).serialize(request)) + user.update(super().serialize(request)) return user class RemoteUser(User): @@ -438,7 +437,7 @@ class RemoteUser(User): } def __repr__(self): - return "<{0} #{1} {2}>".format( + return "<{} #{} {}>".format( self.__class__.__name__, self.id, self.webfinger @@ -466,9 +465,9 @@ class Client(Base): def __repr__(self): if self.application_name: - return "<Client {0} - {1}>".format(self.application_name, self.id) + return "<Client {} - {}>".format(self.application_name, self.id) else: - return "<Client {0}>".format(self.id) + return "<Client {}>".format(self.id) class RequestToken(Base): """ @@ -483,7 +482,7 @@ class RequestToken(Base): used = Column(Boolean, default=False) authenticated = Column(Boolean, default=False) verifier = Column(Unicode, nullable=True) - callback = Column(Unicode, nullable=False, default=u"oob") + callback = Column(Unicode, nullable=False, default="oob") created = Column(DateTime, nullable=False, default=datetime.datetime.utcnow) updated = Column(DateTime, nullable=False, default=datetime.datetime.utcnow) @@ -529,7 +528,7 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin): slug = Column(Unicode) description = Column(UnicodeText) # ?? media_type = Column(Unicode, nullable=False) - state = Column(Unicode, default=u'unprocessed', nullable=False) + state = Column(Unicode, default='unprocessed', nullable=False) # or use sqlalchemy.types.Enum? license = Column(Unicode) file_size = Column(Integer, default=0) @@ -636,7 +635,7 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin): """get the next 'newer' entry by this user""" media = MediaEntry.query.filter( (MediaEntry.actor == self.actor) - & (MediaEntry.state == u'processed') + & (MediaEntry.state == 'processed') & (MediaEntry.id > self.id)).order_by(MediaEntry.id).first() if media is not None: @@ -646,7 +645,7 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin): """get the next 'older' entry by this user""" media = MediaEntry.query.filter( (MediaEntry.actor == self.actor) - & (MediaEntry.state == u'processed') + & (MediaEntry.state == 'processed') & (MediaEntry.id < self.id)).order_by(desc(MediaEntry.id)).first() if media is not None: @@ -658,7 +657,7 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin): return the value of the key. """ media_file = MediaFile.query.filter_by(media_entry=self.id, - name=six.text_type(file_key)).first() + name=str(file_key)).first() if media_file: if metadata_key: @@ -671,11 +670,11 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin): Update the file_metadata of a MediaFile. """ media_file = MediaFile.query.filter_by(media_entry=self.id, - name=six.text_type(file_key)).first() + name=str(file_key)).first() file_metadata = media_file.file_metadata or {} - for key, value in six.iteritems(kwargs): + for key, value in kwargs.items(): file_metadata[key] = value media_file.file_metadata = file_metadata @@ -700,7 +699,7 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin): media_data.get_media_entry = self else: # Update old media data - for field, value in six.iteritems(kwargs): + for field, value in kwargs.items(): setattr(media_data, field, value) @memoized_property @@ -708,11 +707,7 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin): return import_component(self.media_type + '.models:BACKREF_NAME') def __repr__(self): - if six.PY2: - # obj.__repr__() should return a str on Python 2 - safe_title = self.title.encode('utf-8', 'replace') - else: - safe_title = self.title + safe_title = self.title return '<{classname} {id}: {title}>'.format( classname=self.__class__.__name__, @@ -724,7 +719,7 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin): for comment in self.get_comments(): comment.delete(*args, **kwargs) - super(MediaEntry, self).soft_delete(*args, **kwargs) + super().soft_delete(*args, **kwargs) def delete(self, del_orphan_tags=True, **kwargs): """Delete MediaEntry and all related files/attachments/comments @@ -744,7 +739,7 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin): # Returns list of files we failed to delete _log.error('No such files from the user "{1}" to delete: ' '{0}'.format(str(error), self.get_actor)) - _log.info('Deleted Media entry id "{0}"'.format(self.id)) + _log.info('Deleted Media entry id "{}"'.format(self.id)) # Related MediaTag's are automatically cleaned, but we might # want to clean out unused Tag's too. if del_orphan_tags: @@ -753,7 +748,7 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin): from mediagoblin.db.util import clean_orphan_tags clean_orphan_tags(commit=False) # pass through commit=False/True in kwargs - super(MediaEntry, self).delete(**kwargs) + super().delete(**kwargs) def serialize(self, request, show_comments=True): """ Unserialize MediaEntry to object """ @@ -864,7 +859,7 @@ class FileKeynames(Base): name = Column(Unicode, unique=True) def __repr__(self): - return "<FileKeyname %r: %r>" % (self.id, self.name) + return "<FileKeyname {!r}: {!r}>".format(self.id, self.name) @classmethod def find_or_new(cls, name): @@ -893,7 +888,7 @@ class MediaFile(Base): {}) def __repr__(self): - return "<MediaFile %s: %r>" % (self.name, self.file_path) + return "<MediaFile {}: {!r}>".format(self.name, self.file_path) name_helper = relationship(FileKeynames, lazy="joined", innerjoin=True) name = association_proxy('name_helper', 'name', @@ -941,7 +936,7 @@ class Tag(Base): slug = Column(Unicode, nullable=False, unique=True) def __repr__(self): - return "<Tag %r: %r>" % (self.id, self.slug) + return "<Tag {!r}: {!r}>".format(self.id, self.slug) @classmethod def find_or_new(cls, slug): @@ -1040,7 +1035,7 @@ class Comment(Base): # fetch it from self.comment() raise AttributeError try: - _log.debug('Old attr is being accessed: {0}'.format(attr)) + _log.debug('Old attr is being accessed: {}'.format(attr)) return getattr(self.comment(), attr) # noqa except Exception as e: _log.error(e) @@ -1347,7 +1342,7 @@ class Notification(Base): seen='unseen' if not self.seen else 'seen') def __unicode__(self): - return u'<{klass} #{id}: {user}: {subject} ({seen})>'.format( + return '<{klass} #{id}: {user}: {subject} ({seen})>'.format( id=self.id, klass=self.__class__.__name__, user=self.user, @@ -1603,7 +1598,7 @@ class Activity(Base, ActivityMixin): def save(self, set_updated=True, *args, **kwargs): if set_updated: self.updated = datetime.datetime.now() - super(Activity, self).save(*args, **kwargs) + super().save(*args, **kwargs) class Graveyard(Base): """ Where models come to die """ @@ -1663,12 +1658,12 @@ MODELS = [ FOUNDATIONS = {User:user_foundations} """ -privilege_foundations = [{'privilege_name':u'admin'}, - {'privilege_name':u'moderator'}, - {'privilege_name':u'uploader'}, - {'privilege_name':u'reporter'}, - {'privilege_name':u'commenter'}, - {'privilege_name':u'active'}] +privilege_foundations = [{'privilege_name':'admin'}, + {'privilege_name':'moderator'}, + {'privilege_name':'uploader'}, + {'privilege_name':'reporter'}, + {'privilege_name':'commenter'}, + {'privilege_name':'active'}] FOUNDATIONS = {Privilege:privilege_foundations} ###################################################### diff --git a/mediagoblin/db/open.py b/mediagoblin/db/open.py index 8f81c8d9..3252f175 100644 --- a/mediagoblin/db/open.py +++ b/mediagoblin/db/open.py @@ -34,14 +34,14 @@ def set_models_as_attributes(obj): TODO: This should eventually be deprecated. """ - for k, v in six.iteritems(Base._decl_class_registry): + for k, v in Base._decl_class_registry.items(): setattr(obj, k, v) if not DISABLE_GLOBALS: from mediagoblin.db.base import Session - class DatabaseMaster(object): + class DatabaseMaster: def __init__(self, engine): self.engine = engine @@ -71,7 +71,7 @@ if not DISABLE_GLOBALS: else: from sqlalchemy.orm import sessionmaker - class DatabaseManager(object): + class DatabaseManager: """ Manage database connections. @@ -136,7 +136,7 @@ def load_models(app_config): try: __import__(plugin + ".models") except ImportError as exc: - _log.debug("Could not load {0}.models: {1}".format( + _log.debug("Could not load {}.models: {}".format( plugin, exc)) diff --git a/mediagoblin/db/util.py b/mediagoblin/db/util.py index 57e6b942..d787d653 100644 --- a/mediagoblin/db/util.py +++ b/mediagoblin/db/util.py @@ -49,7 +49,7 @@ def media_entries_for_tag_slug(dummy_db, tag_slug): .join(MediaEntry.tags_helper) \ .join(MediaTag.tag_helper) \ .filter( - (MediaEntry.state == u'processed') + (MediaEntry.state == 'processed') & (Tag.slug == tag_slug)) |