1
0
mirror of https://github.com/sashacmc/photo-importer.git synced 2025-02-22 18:42:16 +02:00

Merge pull request #10 from sashacmc/server-mount-errors-processing

Handle server pmount errors
This commit is contained in:
Alexander 2022-12-09 00:08:23 +01:00 committed by GitHub
commit a990e00b06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 69 additions and 17 deletions

8
debian/changelog vendored
View File

@ -1,3 +1,11 @@
photo-importer (1.2.1) stable; urgency=medium
* Handle server pmount errors
* Allow log to /dev/stdout
* Add aac files support
-- Alexander Bushnev <Alexander@Bushnev.pro> Thu, 08 Dec 2022 21:49:03 +0100
photo-importer (1.2.0) stable; urgency=medium
* Add PyPi install support

View File

@ -16,7 +16,7 @@ out_subdir_audio = Audio
# File extensions
file_ext_image = jpeg,jpg,cr2
file_ext_video = mp4,mpg,mpeg,mov,avi,mts,3gp,m4v
file_ext_audio = mp3,3gpp,m4a,wav
file_ext_audio = mp3,3gpp,m4a,wav,aac
file_ext_garbage = thm,ctg
file_ext_ignore = ini,zip,db

View File

@ -16,7 +16,7 @@ out_subdir_audio = Audio
# File extensions
file_ext_image = jpeg,jpg,cr2
file_ext_video = mp4,mpg,mpeg,mov,avi,mts,3gp,m4v
file_ext_audio = mp3,3gpp,m4a,wav
file_ext_audio = mp3,3gpp,m4a,wav,aac
file_ext_garbage = thm,ctg
file_ext_ignore = ini,zip,db

View File

@ -18,7 +18,7 @@ class Config(object):
'time_src_audio': 'exif,name,attr',
'file_ext_image': 'jpeg,jpg',
'file_ext_video': 'mp4,mpg,mpeg,mov,avi,mts,m2ts,3gp,m4v',
'file_ext_audio': 'mp3,3gpp,m4a,wav',
'file_ext_audio': 'mp3,3gpp,m4a,wav,aac',
'file_ext_garbage': 'thm,ctg',
'file_ext_ignore': 'ini,zip,db',
'remove_garbage': 1,
@ -31,7 +31,7 @@ class Config(object):
},
'server': {
'port': 8080,
'web_path': '../web',
'web_path': 'web',
'out_path': '/mnt/multimedia/NEW/',
'in_path': '',
'log_file': 'photo-importer-server.log',

View File

@ -22,7 +22,8 @@ def initLogger(filename=None, level=logging.INFO):
os.makedirs(os.path.split(filename)[0])
except OSError:
pass
fh = logging.FileHandler(filename, 'a')
mode = 'a' if os.path.isfile(filename) else 'w'
fh = logging.FileHandler(filename, mode)
else:
fh = logging.StreamHandler()

View File

@ -8,6 +8,7 @@ import psutil
import urllib
import logging
import argparse
import subprocess
import http.server
from http import HTTPStatus
@ -41,9 +42,15 @@ class PhotoImporterHandler(http.server.BaseHTTPRequestHandler):
self.end_headers()
self.wfile.write(bytearray(result, 'utf-8'))
def __error_response(self, code, err):
def __error_response_get(self, code, err):
self.send_error(code, explain=str(err))
def __error_response_post(self, code, explain):
self.send_response(code)
self.send_header('Content-type', 'text/plain')
self.end_headers()
self.wfile.write(bytearray(explain, 'utf-8'))
def __get_mounted_list(self):
return {
os.path.basename(dp.device): (dp.device, dp.mountpoint)
@ -186,15 +193,41 @@ class PhotoImporterHandler(http.server.BaseHTTPRequestHandler):
self.server.import_done(device['mount_path'])
return device['dev_path']
def __run_cmd(self, cmd):
error = ''
try:
logging.info('run cmd: %s' % cmd)
with subprocess.Popen(
cmd,
shell=True,
universal_newlines=True,
stderr=subprocess.PIPE,
) as p:
while True:
line = p.stderr.readline()
if not line:
break
error += line
if error != '':
logging.error('cmd run error: %s' % error.strip())
except Exception:
logging.exception('cmd run exception')
if error != '':
raise HTTPError(HTTPStatus.INTERNAL_SERVER_ERROR, error)
return True
def __mount_mount(self, dev):
dev_path = self.__check_dev_for_mount(dev)
logging.debug('pmount %s', dev_path)
return os.system('pmount --umask=000 %s' % dev_path)
return self.__run_cmd('pmount --umask=000 %s' % dev_path)
def __mount_umount(self, dev):
dev_path = self.__check_dev_for_mount(dev)
logging.debug('pumount %s', dev_path)
return os.system('pumount %s' % dev_path)
return self.__run_cmd('pumount %s' % dev_path)
def __mount_request(self, params):
try:
@ -340,9 +373,11 @@ class PhotoImporterHandler(http.server.BaseHTTPRequestHandler):
logging.warning('Wrong path: ' + path)
raise HTTPError(HTTPStatus.NOT_FOUND, path)
except HTTPError as ex:
self.__error_response(ex.code, ex.reason)
self.__error_response_get(ex.code, ex.reason)
except Exception as ex:
self.__error_response(HTTPStatus.INTERNAL_SERVER_ERROR, str(ex))
self.__error_response_get(
HTTPStatus.INTERNAL_SERVER_ERROR, str(ex)
)
logging.exception(ex)
def do_POST(self):
@ -358,9 +393,11 @@ class PhotoImporterHandler(http.server.BaseHTTPRequestHandler):
self.__import_request(params)
return
except HTTPError as ex:
self.__error_response(ex.code, ex.reason)
self.__error_response_post(ex.code, ex.reason)
except Exception as ex:
self.__error_response(HTTPStatus.INTERNAL_SERVER_ERROR, str(ex))
self.__error_response_post(
HTTPStatus.INTERNAL_SERVER_ERROR, str(ex)
)
logging.exception(ex)

View File

@ -14,7 +14,7 @@ def get_long_description():
setup(
name='photo-importer',
version='1.2.0',
version='1.2.1',
description='Photo importer tool',
author='Alexander Bushnev',
author_email='Alexander@Bushnev.pro',

View File

@ -141,7 +141,10 @@
type: "POST",
success: function() {
update()
}
},
error: function (request, status, error) {
alert(request.responseText)
}
});
} else
if (cmd == "start") {
@ -154,7 +157,10 @@
type: "POST",
success: function() {
update()
}
},
error: function (request, status, error) {
alert(request.responseText)
}
});
}
}