aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/db
diff options
context:
space:
mode:
Diffstat (limited to 'mediagoblin/db')
-rw-r--r--mediagoblin/db/base.py6
-rw-r--r--mediagoblin/db/migration_tools.py39
-rw-r--r--mediagoblin/db/migrations.py43
-rw-r--r--mediagoblin/db/migrations/env.py1
-rw-r--r--mediagoblin/db/migrations/versions/afd3d1da5e29_subtitle_plugin_initial_migration.py2
-rw-r--r--mediagoblin/db/mixin.py30
-rw-r--r--mediagoblin/db/models.py83
-rw-r--r--mediagoblin/db/open.py8
-rw-r--r--mediagoblin/db/util.py2
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))