aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/gmg_commands
diff options
context:
space:
mode:
authorBen Sturmfels <ben@sturm.com.au>2019-09-18 15:58:24 +1000
committerBen Sturmfels <ben@sturm.com.au>2019-09-18 15:58:24 +1000
commitc33168b3d88b89e7ff977acc68b416ae6dde5191 (patch)
tree442235ee3c15371b5e0f6b650bfbe97f3b46df21 /mediagoblin/gmg_commands
parentad14aed02bbaef84dd9dae16d1040247e7951829 (diff)
downloadmediagoblin-c33168b3d88b89e7ff977acc68b416ae6dde5191.tar.lz
mediagoblin-c33168b3d88b89e7ff977acc68b416ae6dde5191.tar.xz
mediagoblin-c33168b3d88b89e7ff977acc68b416ae6dde5191.zip
Add basic duplicate prevention for batchaddmedia.
Diffstat (limited to 'mediagoblin/gmg_commands')
-rw-r--r--mediagoblin/gmg_commands/batchaddmedia.py21
1 files changed, 18 insertions, 3 deletions
diff --git a/mediagoblin/gmg_commands/batchaddmedia.py b/mediagoblin/gmg_commands/batchaddmedia.py
index dc80f88b..88fa3e5a 100644
--- a/mediagoblin/gmg_commands/batchaddmedia.py
+++ b/mediagoblin/gmg_commands/batchaddmedia.py
@@ -25,7 +25,7 @@ import requests
import six
from six.moves.urllib.parse import urlparse
-from mediagoblin.db.models import LocalUser
+from mediagoblin.db.models import LocalUser, MediaEntry
from mediagoblin.gmg_commands import util as commands_util
from mediagoblin.submit.lib import (
submit_media, FileUploadLimit, UserUploadLimit, UserPastUploadLimit)
@@ -86,7 +86,6 @@ def batchaddmedia(args):
all_metadata = open(abs_metadata_filename, 'r')
media_metadata = csv.DictReader(all_metadata)
-
for index, file_metadata in enumerate(media_metadata):
if six.PY2:
file_metadata = {k.decode('utf-8'): v.decode('utf-8') for k, v in file_metadata.items()}
@@ -101,6 +100,7 @@ def batchaddmedia(args):
### Pull the important media information for mediagoblin from the
### metadata, if it is provided.
+ slug = file_metadata.get('slug')
title = file_metadata.get('title') or file_metadata.get('dc:title')
description = (file_metadata.get('description') or
file_metadata.get('dc:description'))
@@ -119,6 +119,16 @@ Metadata was not uploaded.""".format(
print(error)
continue
+ if slug and MediaEntry.query.filter_by(actor=user.id, slug=slug).count():
+ # Avoid re-importing media from a previous batch run. Note that this
+ # check isn't quite robust enough, since it requires that a slug is
+ # specified. Probably needs to be based on "location" since this is
+ # the only required field.
+ error = '{}: {}'.format(
+ slug, _('An entry with that slug already exists for this user.'))
+ print(error)
+ continue
+
url = urlparse(original_location)
filename = url.path.split()[-1]
@@ -155,7 +165,7 @@ FAIL: Local file {filename} could not be accessed.
{filename} will not be uploaded.""".format(filename=filename)))
continue
try:
- submit_media(
+ entry = submit_media(
mg_app=app,
user=user,
submitted_file=media_file,
@@ -166,6 +176,11 @@ FAIL: Local file {filename} could not be accessed.
license=license,
metadata=json_ld_metadata,
tags_string="")
+ if slug:
+ # Slug is automatically set by submit_media, so overwrite it
+ # with the desired slug.
+ entry.slug = slug
+ entry.save()
print(_("""Successfully submitted {filename}!
Be sure to look at the Media Processing Panel on your website to be sure it
uploaded successfully.""".format(filename=filename)))