Jessica Tallon d88fcb03e2 Change codebase to query or create correct User model
The code base had many references to User.username and other
specific to LocalUser attributes as that was the way it use to exist.
This updates those to query on the generic User model but filtering
by attributes on the LocalUser.
2015-07-31 15:15:24 +02:00

114 lines
3.8 KiB
Python

# GNU MediaGoblin -- federated, autonomous media hosting
# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# 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 os
import six
from mediagoblin.db.models import LocalUser
from mediagoblin.gmg_commands import util as commands_util
from mediagoblin.submit.lib import (
submit_media, get_upload_file_limits,
FileUploadLimit, UserUploadLimit, UserPastUploadLimit)
from mediagoblin import mg_globals
def parser_setup(subparser):
subparser.add_argument(
'username',
help="Name of user this media entry belongs to")
subparser.add_argument(
'filename',
help="Local file on filesystem")
subparser.add_argument(
"-d", "--description",
help="Description for this media entry")
subparser.add_argument(
"-t", "--title",
help="Title for this media entry")
subparser.add_argument(
"-l", "--license",
help=(
"License this media entry will be released under. "
"Should be a URL."))
subparser.add_argument(
"-T", "--tags",
help=(
"Comma separated list of tags for this media entry."))
subparser.add_argument(
"-s", "--slug",
help=(
"Slug for this media entry. "
"Will be autogenerated if unspecified."))
subparser.add_argument(
'--celery',
action='store_true',
help="Don't process eagerly, pass off to celery")
def addmedia(args):
# Run eagerly unless explicetly set not to
if not args.celery:
os.environ['CELERY_ALWAYS_EAGER'] = 'true'
app = commands_util.setup_app(args)
# get the user
user = app.db.User.query.filter(
LocalUser.username==args.username.lower()
).first()
if user is None:
print("Sorry, no user by username '%s'" % args.username)
return
# check for the file, if it exists...
filename = os.path.split(args.filename)[-1]
abs_filename = os.path.abspath(args.filename)
if not os.path.exists(abs_filename):
print("Can't find a file with filename '%s'" % args.filename)
return
upload_limit, max_file_size = get_upload_file_limits(user)
def maybe_unicodeify(some_string):
# this is kinda terrible
if some_string is None:
return None
if six.PY2:
return six.text_type(some_string, 'utf-8')
return some_string
try:
submit_media(
mg_app=app,
user=user,
submitted_file=open(abs_filename, 'rb'), filename=filename,
title=maybe_unicodeify(args.title),
description=maybe_unicodeify(args.description),
license=maybe_unicodeify(args.license),
tags_string=maybe_unicodeify(args.tags) or u"",
upload_limit=upload_limit, max_file_size=max_file_size)
except FileUploadLimit:
print("This file is larger than the upload limits for this site.")
except UserUploadLimit:
print("This file will put this user past their upload limits.")
except UserPastUploadLimit:
print("This user is already past their upload limits.")