forked from indymedia/epicyon
flake8 format
parent
e2e2db91d4
commit
840e726753
44
media.py
44
media.py
|
@ -10,8 +10,6 @@ from blurhash import blurhash_encode as blurencode
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
import numpy
|
import numpy
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
import json
|
|
||||||
import datetime
|
import datetime
|
||||||
from hashlib import sha1
|
from hashlib import sha1
|
||||||
from auth import createPassword
|
from auth import createPassword
|
||||||
|
@ -19,6 +17,7 @@ from shutil import copyfile
|
||||||
from shutil import rmtree
|
from shutil import rmtree
|
||||||
from shutil import move
|
from shutil import move
|
||||||
|
|
||||||
|
|
||||||
def replaceYouTube(postJsonObject: {}) -> None:
|
def replaceYouTube(postJsonObject: {}) -> None:
|
||||||
"""Replace YouTube with invidio.us
|
"""Replace YouTube with invidio.us
|
||||||
This denies Google some, but not all, tracking data
|
This denies Google some, but not all, tracking data
|
||||||
|
@ -30,7 +29,9 @@ def replaceYouTube(postJsonObject: {}) -> None:
|
||||||
if 'www.youtube.com' not in postJsonObject['object']['content']:
|
if 'www.youtube.com' not in postJsonObject['object']['content']:
|
||||||
return
|
return
|
||||||
postJsonObject['object']['content'] = \
|
postJsonObject['object']['content'] = \
|
||||||
postJsonObject['object']['content'].replace('www.youtube.com','invidio.us')
|
postJsonObject['object']['content'].replace('www.youtube.com',
|
||||||
|
'invidio.us')
|
||||||
|
|
||||||
|
|
||||||
def removeMetaData(imageFilename: str, outputFilename: str) -> None:
|
def removeMetaData(imageFilename: str, outputFilename: str) -> None:
|
||||||
"""Attempts to do this with pure python didn't work well,
|
"""Attempts to do this with pure python didn't work well,
|
||||||
|
@ -44,47 +45,55 @@ def removeMetaData(imageFilename: str,outputFilename: str) -> None:
|
||||||
print('Removing metadata from ' + outputFilename + ' using mogrify')
|
print('Removing metadata from ' + outputFilename + ' using mogrify')
|
||||||
os.system('/usr/bin/mogrify -strip '+outputFilename)
|
os.system('/usr/bin/mogrify -strip '+outputFilename)
|
||||||
|
|
||||||
|
|
||||||
def getImageHash(imageFilename: str) -> str:
|
def getImageHash(imageFilename: str) -> str:
|
||||||
return blurencode(numpy.array(Image.open(imageFilename).convert("RGB")))
|
return blurencode(numpy.array(Image.open(imageFilename).convert("RGB")))
|
||||||
|
|
||||||
|
|
||||||
def isMedia(imageFilename: str) -> bool:
|
def isMedia(imageFilename: str) -> bool:
|
||||||
permittedMedia=['png','jpg','gif','webp','mp4','ogv','mp3','ogg']
|
permittedMedia = ('png', 'jpg', 'gif', 'webp',
|
||||||
|
'mp4', 'ogv', 'mp3', 'ogg')
|
||||||
for m in permittedMedia:
|
for m in permittedMedia:
|
||||||
if imageFilename.endswith('.' + m):
|
if imageFilename.endswith('.' + m):
|
||||||
return True
|
return True
|
||||||
print('WARN: ' + imageFilename + ' is not a permitted media type')
|
print('WARN: ' + imageFilename + ' is not a permitted media type')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def createMediaDirs(baseDir: str, mediaPath: str) -> None:
|
def createMediaDirs(baseDir: str, mediaPath: str) -> None:
|
||||||
if not os.path.isdir(baseDir + '/media'):
|
if not os.path.isdir(baseDir + '/media'):
|
||||||
os.mkdir(baseDir + '/media')
|
os.mkdir(baseDir + '/media')
|
||||||
if not os.path.isdir(baseDir + '/' + mediaPath):
|
if not os.path.isdir(baseDir + '/' + mediaPath):
|
||||||
os.mkdir(baseDir + '/' + mediaPath)
|
os.mkdir(baseDir + '/' + mediaPath)
|
||||||
|
|
||||||
|
|
||||||
def getMediaPath() -> str:
|
def getMediaPath() -> str:
|
||||||
currTime = datetime.datetime.utcnow()
|
currTime = datetime.datetime.utcnow()
|
||||||
weeksSinceEpoch = int((currTime - datetime.datetime(1970, 1, 1)).days / 7)
|
weeksSinceEpoch = int((currTime - datetime.datetime(1970, 1, 1)).days / 7)
|
||||||
return 'media/' + str(weeksSinceEpoch)
|
return 'media/' + str(weeksSinceEpoch)
|
||||||
|
|
||||||
|
|
||||||
def getAttachmentMediaType(filename: str) -> str:
|
def getAttachmentMediaType(filename: str) -> str:
|
||||||
"""Returns the type of media for the given file
|
"""Returns the type of media for the given file
|
||||||
image, video or audio
|
image, video or audio
|
||||||
"""
|
"""
|
||||||
mediaType = None
|
mediaType = None
|
||||||
imageTypes=['png','jpg','jpeg','gif','webp']
|
imageTypes = ('png', 'jpg', 'jpeg',
|
||||||
|
'gif', 'webp')
|
||||||
for mType in imageTypes:
|
for mType in imageTypes:
|
||||||
if filename.endswith('.' + mType):
|
if filename.endswith('.' + mType):
|
||||||
return 'image'
|
return 'image'
|
||||||
videoTypes=['mp4','webm','ogv']
|
videoTypes = ('mp4', 'webm', 'ogv')
|
||||||
for mType in videoTypes:
|
for mType in videoTypes:
|
||||||
if filename.endswith('.' + mType):
|
if filename.endswith('.' + mType):
|
||||||
return 'video'
|
return 'video'
|
||||||
audioTypes=['mp3','ogg']
|
audioTypes = ('mp3', 'ogg')
|
||||||
for mType in audioTypes:
|
for mType in audioTypes:
|
||||||
if filename.endswith('.' + mType):
|
if filename.endswith('.' + mType):
|
||||||
return 'audio'
|
return 'audio'
|
||||||
return mediaType
|
return mediaType
|
||||||
|
|
||||||
|
|
||||||
def updateEtag(mediaFilename: str) -> None:
|
def updateEtag(mediaFilename: str) -> None:
|
||||||
""" calculate the etag, which is a sha1 of the data
|
""" calculate the etag, which is a sha1 of the data
|
||||||
"""
|
"""
|
||||||
|
@ -101,7 +110,7 @@ def updateEtag(mediaFilename: str) -> None:
|
||||||
try:
|
try:
|
||||||
with open(mediaFilename, 'rb') as mediaFile:
|
with open(mediaFilename, 'rb') as mediaFile:
|
||||||
data = mediaFile.read()
|
data = mediaFile.read()
|
||||||
except:
|
except BaseException:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if not data:
|
if not data:
|
||||||
|
@ -112,22 +121,25 @@ def updateEtag(mediaFilename: str) -> None:
|
||||||
try:
|
try:
|
||||||
with open(mediaFilename + '.etag', 'w') as etagFile:
|
with open(mediaFilename + '.etag', 'w') as etagFile:
|
||||||
etagFile.write(etag)
|
etagFile.write(etag)
|
||||||
except:
|
except BaseException:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def attachMedia(baseDir: str,httpPrefix: str,domain: str,port: int, \
|
|
||||||
postJson: {},imageFilename: str, \
|
def attachMedia(baseDir: str, httpPrefix: str, domain: str, port: int,
|
||||||
mediaType: str,description: str, \
|
postJson: {}, imageFilename: str,
|
||||||
|
mediaType: str, description: str,
|
||||||
useBlurhash: bool) -> {}:
|
useBlurhash: bool) -> {}:
|
||||||
"""Attaches media to a json object post
|
"""Attaches media to a json object post
|
||||||
The description can be None
|
The description can be None
|
||||||
Blurhash is optional, since low power systems may take a long time to calculate it
|
Blurhash is optional, since low power systems may take a long
|
||||||
|
time to calculate it
|
||||||
"""
|
"""
|
||||||
if not isMedia(imageFilename):
|
if not isMedia(imageFilename):
|
||||||
return postJson
|
return postJson
|
||||||
|
|
||||||
fileExtension = None
|
fileExtension = None
|
||||||
acceptedTypes=['png','jpg','gif','webp','mp4','webm','ogv','mp3','ogg']
|
acceptedTypes = ('png', 'jpg', 'gif', 'webp',
|
||||||
|
'mp4', 'webm', 'ogv', 'mp3', 'ogg')
|
||||||
for mType in acceptedTypes:
|
for mType in acceptedTypes:
|
||||||
if imageFilename.endswith('.' + mType):
|
if imageFilename.endswith('.' + mType):
|
||||||
if mType == 'jpg':
|
if mType == 'jpg':
|
||||||
|
@ -177,6 +189,7 @@ def attachMedia(baseDir: str,httpPrefix: str,domain: str,port: int, \
|
||||||
|
|
||||||
return postJson
|
return postJson
|
||||||
|
|
||||||
|
|
||||||
def archiveMedia(baseDir: str, archiveDirectory: str, maxWeeks=4) -> None:
|
def archiveMedia(baseDir: str, archiveDirectory: str, maxWeeks=4) -> None:
|
||||||
"""Any media older than the given number of weeks gets archived
|
"""Any media older than the given number of weeks gets archived
|
||||||
"""
|
"""
|
||||||
|
@ -194,7 +207,8 @@ def archiveMedia(baseDir: str,archiveDirectory: str,maxWeeks=4) -> None:
|
||||||
for weekDir in dirs:
|
for weekDir in dirs:
|
||||||
if int(weekDir) < minWeek:
|
if int(weekDir) < minWeek:
|
||||||
if archiveDirectory:
|
if archiveDirectory:
|
||||||
move(os.path.join(baseDir+'/media', weekDir),archiveDirectory+'/media')
|
move(os.path.join(baseDir + '/media', weekDir),
|
||||||
|
archiveDirectory + '/media')
|
||||||
else:
|
else:
|
||||||
# archive to /dev/null
|
# archive to /dev/null
|
||||||
rmtree(os.path.join(baseDir + '/media', weekDir))
|
rmtree(os.path.join(baseDir + '/media', weekDir))
|
||||||
|
|
Loading…
Reference in New Issue