Giter VIP home page Giter VIP logo

djdembeck / bragibooks Goto Github PK

View Code? Open in Web Editor NEW
122.0 4.0 17.0 1.49 MB

An audiobook library cleanup and management tool built with Python and Django. Leveraging m4b-merge for audiobook standardization and editing. Ideal for enhancing audiobook library management.

License: GNU General Public License v3.0

Python 62.47% HTML 23.31% Dockerfile 1.13% Shell 1.34% JavaScript 11.75%
m4b django audiobooks metadata-management metadata-parser audible python docker audnexus library-management

bragibooks's Introduction

Project logo

Bragibooks

Status GitHub Issues GitHub Pull Requests License Docker Docker Pulls Docker Image Size (latest by date) Docker Image Version (latest by date) CodeFactor Grade

All Contributors


An audiobook library cleanup & management app, written as a frontend for web use of m4b-merge.

πŸ“ Table of Contents

🧐 About

Bragi - (god of poetry in Norse mythology): Bragibooks provides a minimal and straightforward webserver that you can run remotely or locally on your server. Since Bragibooks runs in a docker, you no longer need to install dependencies on whichever OS you are on. You can

Some basics of what Bragi does:

  • Merge multiple files
  • Convert mp3(s)
  • Cleanup existing data on an m4b file
  • More features on m4b-merge's help page

Screens

Folder/file selection ASIN input
file-selection asin-auto-search
Folder/file selection Post-proccess overview
asin-custom-search post-process

🏁 Getting Started

You can either install this project directly or run it prepackaged in Docker.

Prerequisites

Docker

  • All prerequisites are included in the image.

Direct (Gunicorn)

  • You'll need to install m4b-tool and it's dependants from the project's readme
  • Run pip install -r requirements.txt from this project's directory.

Installing

Docker

To run Bragibooks as a container, you need to pass some paramaters in the run command:

Parameter Function
-v /path/to/input:/input Input folder
-v /path/to/output:/output Output folder
-v /appdata/bragibooks/config:/config Persistent config storage
-p 8000:8000/tcp Port for your browser to use
-e LOG_LEVEL=WARNING Choose any logging level
-e DEBUG=False Turn django debug on or off (default False)
-e UID=99 User ID to run the container as (default 99)
-e GID=100 Group ID to run the container as (default 100)
-e CELERY_WORKERS=1 The number or celery workers for processing books (default 1)
-e CSRF_TRUSTED_ORIGINS=https://bragibooks.mydomain.com Domains to trust if bragibooks is hosted behind a reverse proxy.

Which all together should look like:

docker run --rm -d --name bragibooks -v /path/to/input:/input -v /path/to/output:/output -v /appdata/bragibooks/config:/config -p 8000:8000/tcp -e LOG_LEVEL=WARNING ghcr.io/djdembeck/bragibooks:main

Docker Compose

version: '3'

services:
  bragi:
    image: ghcr.io/djdembeck/bragibooks:main
    container_name: bragibooks
    environment:
      - CSRF_TRUSTED_ORIGINS=https://bragibooks.mydomain.com
      - LOG_LEVEL=INFO
      - DEBUG=False
      - UID=1000
      - GID=1000
    volumes:
      - path/to/config:/config
      - path/to/input:/input
      - path/to/output/output:/output
      - path/to/done:/done
    ports:
      - 8000:8000
    restart: unless-stopped

Direct Build (Gunicorn)

  • Copy static assets to project folder:
    python manage.py collectstatic
    
  • Create the database:
    python manage.py migrate
    
  • Run the celery worker for processing books:
    celery -A bragibooks_proj worker \
    --loglevel=info \ 
    --concurrency 1 \
    -E
    
  • Run the web server:
    gunicorn bragibooks_proj.wsgi \
    --bind 0.0.0.0:8000 \
    --timeout 1200 \
    --worker-tmp-dir /dev/shm \
    --workers=2 \
    --threads=4 \
    --worker-class=gthread \
    --reload \
    --enable-stdio-inheritance
    

🎈 Usage

The Bragibooks process is a linear, 3 step process:

  1. Select input - Use the file multi-select box to choose which books to process this session, and click next.
  2. Submit ASINs - Bragi will auto search for the audiobook data on Audible.com (US only). If the data found is incorrect you can do a custom search to find the correct title and then submit for processing.
  3. Wait for books to finish processing. This can take anywhere from 10 seconds to a few hours, depending on the number and type of files submitted. This will be done in the background.
  4. Books page - Page where you can see the data assigned to each book after it has finished processing. You can also check the status of the books still being processed.

⛏️ Built Using

✍️ Authors

@djdembeck - Idea & Initial work

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Koby Huckabee
Koby Huckabee

πŸ’» πŸ€” πŸ“–
Andreas
Andreas

πŸ”§

This project follows the all-contributors specification. Contributions of any kind welcome!

bragibooks's People

Contributors

acetugboat avatar allcontributors[bot] avatar dependabot[bot] avatar djdembeck avatar jsravn avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

bragibooks's Issues

Docker Url Prefix

Is there a way to add an --url-prefix for the docker? You could use FORCE_SCRIPT_NAME = '/bragibooks' on that, so people could use reverse proxies with bragibooks.

Thanks

500 when specifying a directory with a single file

I'm getting a 500 server error when I attempt to process a directory containing a single mp3 or m4b file:

Internal Server Error: /import/match
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 101, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/app/web/importer/views.py", line 125, in post
    input_data = helpers.get_directory(
  File "/usr/local/lib/python3.9/site-packages/m4b_merge/helpers.py", line 81, in get_directory
    num_of_files = find_num_of_files(path_to_use, return_find_ext)
  File "/usr/local/lib/python3.9/site-packages/m4b_merge/helpers.py", line 27, in find_num_of_files
    list_of_files = os.listdir(Path(path_to_check))
NotADirectoryError: [Errno 20] Not a directory: '/input/<filename>.mp3'

[bug] docker nun running up

Hi,

I just saw your docker and tried to run it.
Unfortunately, it immediately drops this error.

Attaching to bragibooks
bragibooks    | Traceback (most recent call last):
bragibooks    |   File "/home/app/web/manage.py", line 23, in <module>
bragibooks    |     f = open(SECRET_PATH, "w")
bragibooks    | PermissionError: [Errno 13] Permission denied: '/config/secret_key.txt'
bragibooks exited with code 1

compose:

version: '3.7'
services:
  bragibooks:
    image: ghcr.io/djdembeck/bragibooks:main
    container_name: bragibooks
    volumes:
      - $DOCKERDIR/bragibooks/config:/config
      - $MEDIADIR/Audiobook_Correction/input:/input
      - $MEDIADIR/Audiobook_Correction/output:/output
    environment:
      - LOG_LEVEL: ERROR
    networks:
      - traefik

Can't get Bragibooks to start anymore

Hello, I've been running Bragibooks in a Docker Container for months now. I went to use it today for some audio books, and the container isn't working. I've tried updating the image. I removed the container and image and did a new docker-compose up, but I still see this same error. Any help you could offer would be appreciated because I love Bragibooks.

Here is my docker-compose.yml

version: '3.3'
services
    bragibooks:
        container_name: bragibooks
        environment:
          - UID=1000
          - GID=1000
          - LOG_LEVEL=WARNING
        volumes:
          - /docker/containers/bragibooks/config:/config
          - /docker/downloads/completed/Audiobooks:/input
          - /storage/audiobooks:/output
        ports:
          - 8001:8000
        restart: unless-stopped
        image: ghcr.io/djdembeck/bragibooks:main

Here is what I'm seeing in the container's logs.

Starting with UID: 1000, GID: 1000
useradd: user 'user' already exists
Traceback (most recent call last):
  File "/home/app/web/manage.py", line 45, in <module>
    main()
  File "/home/app/web/manage.py", line 41, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 386, in execute
    settings.INSTALLED_APPS
  File "/usr/local/lib/python3.9/site-packages/django/conf/__init__.py", line 87, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.9/site-packages/django/conf/__init__.py", line 74, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/lib/python3.9/site-packages/django/conf/__init__.py", line 183, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/home/app/web/bragibooks_proj/settings.py", line 62, in <module>
    CSRF_TRUSTED_ORIGINS = os.getenv("CSRF_TRUSTED_ORIGINS").split(',')
AttributeError: 'NoneType' object has no attribute 'split

Even docker exec immediately dumps me right back to the host.

root@frontend:/docker# docker exec -it bragibooks /bin/bash
root@0994a652e319:/home/app/web# 
root@frontend:/docker# docker exec -it bragibooks /bin/bash
Error response from daemon: Container 0994a652e319b21da7ec1dcf55f72b5ad3fc1564504ece619e27c5d8fed37e48 is restarting, wait until the container is running

Send an e-mail after finishing

As a user of Bragibooks I would like to get an e-mail when conversion has finished.

After submitting the ASINs the process might take quite some time, depending on the amounts of books to create and their respective durations. Due to various reasons it may happen, that the browser tab is not still open, when the process finishes. Therefore I would like to be able to provide credentials for a SMTP server which Bragibooks would use to send a copy of the "Confirm" page upon finalization of the pipeline.

The e-mail could be plain text, to keep formatting easier. Or, could just list the ASINs and which of those finished with or without errors,

Incorrect playback time if greater than 24 hours

This is a pretty small bug report since it doesn't impact book management. If a book has a playback time longer than 24 hours, the playback timeon the confirm screen will only display times past a full day. For an example, this book has a playback time of roughly 28:30 but bragibooks only shows 4:30.

Synology Docker - Server Error (500)

I've been getting a Server Error (500) when trying to process multi-file books. What I've found in the log is that it always errors with the @eaDir file (an invisible folder that Synology automatically generates to create metadata).
If I process a single file in the input folder (full length .mp3) it works without issues.
I'm starting to think the issue is the @eaDir file/folder, which is being processed as a NoneType in python.

Screenshot 2022-02-16 at 16 39 47

(made a new issue next to #67 because rights don't seem to be an issue for me. I get the Server Error after submitting ASIN.

Any chance of getting an arm64 docker image?

I’m running bragibooks on my M1 Mac mini, and right now it’s forced to emulate the amd64 build. Is there any way to get an arm64 build? I’m guessing it would drastically improve the speeds I’m seeing.

Server error on attempt to login

OS: Unraid
Build: Both main and Develop have the issue

Ive got the container built, and the application running, but when I try to log in to Audible I get this error:

Internal Server Error: /import/auth
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
TypeError: post() takes 1 positional argument but 2 were given

I don't believe I have OTP enabled on my account, but a bit more direction that the line of terminal access would be helpful for other users determining when and how to utilize the functionality if the need arises.

Server Error (500) after Submit ASINs

Hi, Running the docker image with input/output/config mapped to values of current directory.

Container fires up. Import Tab shows me my first book to convert, select, next, go with defaults on the initial config, Submit ASINs I have entered B00QXW6NY6 and B00PCV52EQ (com and co.uk respectively) co.uk gives me bad ASIN number, com ASIN sits and whirls for a while then gives me Server Error (500)

I've tried opening up permissions in case it was related, changing UID/GID deleting and recreating etc. I've tried with a couple of books from different authors incase it was a particular book/author issue.

log attached.
bragibooks.txt

Webhooks support

Any chance webhooks can be added?
Would be nice to use bragibooks to trigger a Plex library scan with autoscan.

Error:500 when selecting "/input/Book 01" folder for processing

Sometimes when submitting a directory for processing the webserver would kick back an error:500 and refuse to continue. [/input/Book 01] πŸ’€

This issue was resolved if I changed the directory name.
[/input/Book 001] πŸ˜„

However if I change any other directory to the same name it once again results in an error:500
[/input/Book abcd] ----> [/input/Book 01] πŸ’€

I thought it might have something to do with the directory already existing in [/input/done] but was able to have other directories of the same name move to ASIN selection. πŸ€”

Server Error (500) on macOS installation

I installed bragibooks on my M1 Mac mini in an attempt to avoid the slowness I’ve experienced with the Docker version. I followed the installation instructions, but I received the following error after submitting a list of ASINs:

Internal Server Error: /import/match
Traceback (most recent call last):
  File "/opt/homebrew/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/homebrew/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/homebrew/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "/opt/homebrew/lib/python3.9/site-packages/django/views/generic/base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File "/Users/sean/bragibooks/importer/views.py", line 102, in post
    helpers.validate_asin(asin)
TypeError: validate_asin() missing 1 required positional argument: 'asin'

Stupid Question: After installing through Docker, how do I actually run the program?

I just installed Docker for the first time and successfully installed Bragibooks, or so the terminal thing tells me (I'm on Linux Mint).

How do I run the program now? From the screenshots I gather it has a GUI but how do I get there? I tried using that line of code you listed under the info on the Docker again, but it tells me this:

sudo docker run --rm -d --name bragibooks -v /home/ReaderGuy42/Music/test -v /home/ReaderGuy42/Music/t2 -v /appdata/bragibooks/config:/config -p 8000:8000/tcp -e LOG_LEVEL=WARNING ghcr.io/djdembeck/bragibooks:main
docker: Error response from daemon: Conflict. The container name "/bragibooks" is already in use by container "2dd09b8eb8bc56a11e6838b057d33329584f36294b44af3ebb2e618f1261ad42". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

I have no idea what to do now, so any pointers are appreciated :) Thanks!

Timeout error | folder config?

Hi - great app @djdembeck

I have setup using Docker ghcr.io/djdembeck/bragibooks:main
Within the docker I have set up the input and output folders - as per instructions.

Assume input = location of audiobooks to be merged - on the import page
Assume output = location of final merged, tagged, m4b

What is the 'Directory for copy of original input files' on the settings page?

When I ran a merge -

  • I can select a folder with multiple mp3s (2)
  • I can add the ASIN and click submit

This is the following log file output: -
0 remaining / 2 total, preparing next task \ could not convert /input/Siege and Storm/Siege and Storm Part 1.mp3 to /mnt/downloads/media/books/output/Leigh Bardugo/Siege and Storm/Siege and Storm-tmpfiles/1-finished.m4b Input path vs junk dir: /input/Siege and Storm /mnt/downloads/rutorrent/readarr Couldn't find junk dir relative to input Using existing chapter data Internal Server Error: /import/match Traceback (most recent call last): File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view return self.dispatch(request, *args, **kwargs) File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 98, in dispatch return handler(request, *args, **kwargs) File "/home/app/web/importer/views.py", line 138, in post merge_object.run_m4b_merge() File "/home/app/web/utils/merge.py", line 37, in run_m4b_merge self.m4b.run_merge() File "/usr/local/lib/python3.9/site-packages/m4b_merge/m4b_helper.py", line 251, in run_merge self.merge_multiple_files() File "/usr/local/lib/python3.9/site-packages/m4b_merge/m4b_helper.py", line 304, in merge_multiple_files self.fix_chapters() File "/usr/local/lib/python3.9/site-packages/m4b_merge/m4b_helper.py", line 424, in fix_chapters with open(chapter_file) as f: FileNotFoundError: [Errno 2] No such file or directory: '/mnt/downloads/media/books/output/Leigh Bardugo/Siege and Storm/Siege and Storm.chapters.txt'

Not sure if it is something to do with folder configurations? Input path vs junk dir: Couldn't find junk dir relative to input

Could you help me troubleshoot my implementation?

Server Error (500) after submitting ASIN

Internal Server Error: /import/match

Traceback (most recent call last):

  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner

    response = get_response(request)

  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response

    response = wrapped_callback(request, *callback_args, **callback_kwargs)

  File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view

    return self.dispatch(request, *args, **kwargs)

  File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 98, in dispatch

    return handler(request, *args, **kwargs)

  File "/home/app/web/importer/views.py", line 104, in post

    helpers.validate_asin(asin)

  File "/usr/local/lib/python3.9/site-packages/m4b_merge/helpers.py", line 88, in validate_asin

    check = requests.get(f"{config.api_url}/{asin}")

AttributeError: module 'm4b_merge.config' has no attribute 'api_url'

Support for ASIN as an output scheme keyword

Hi,

My preferred directory scheme is:

Author

  • Book (Year) [ASIN]
    • Book - Subtitle (Year)

Please add support for ASIN an output scheme keyword. This would also be helpful considering that Audnexus.bundle can quickmatch if there is an ASIN present in the folder name.

403 Forbidden / CSRF verification fails when behind reverse proxy

Hi, I'm trying to run bragibooks behind a reverse proxy w/ https. However CSRF verification fails, because django isn't aware of the external hostname. Is there any way around this? Looks like you can set CSRF_TRUSTED_ORIGINS in settings.py for this, but I don't think the Docker image exposes it. Thanks!

image

Forbidden (Origin checking failed - https://mydomain.example.com does not match any trusted origins.): /import/

Some advanced path structures can fail

For example:
author/series_name series_position - title: subtitle (year)/author - series_name series_position - title: subtitle (year)

Will produce the folder without a series name:
- Brave New World (2008)

Server Error (500)

I'm sure that this is user error, but I had been using Bragibooks successfully until my last two imports. Now, when I type in the ASIN (#1250814936) and Submit it, it returns a Server 500 error. I saw this other closed ticket, but I'm already running the main branch.

This is the message in the log file. I tried turning the log level up to INFO, but I didn't get anything more verbose than I was get at WARNING.

Operations to perform:,
  Apply all migrations: auth, contenttypes, importer, sessions,
Running migrations:,
  No migrations to apply.,
[2021-12-03 14:40:03 +0000] [11] [INFO] Starting gunicorn 20.1.0,
[2021-12-03 14:40:03 +0000] [11] [INFO] Listening at: http://0.0.0.0:8000 (11),
[2021-12-03 14:40:03 +0000] [11] [INFO] Using worker: gthread,
[2021-12-03 14:40:03 +0000] [12] [INFO] Booting worker with pid: 12,
[2021-12-03 14:40:03 +0000] [13] [INFO] Booting worker with pid: 13,
Internal Server Error: /import/match,
Traceback (most recent call last):,
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner,
    response = get_response(request),
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response,
    response = wrapped_callback(request, *callback_args, **callback_kwargs),
  File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view,
    return self.dispatch(request, *args, **kwargs),
  File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 98, in dispatch,
    return handler(request, *args, **kwargs),
  File "/home/app/web/importer/views.py", line 105, in post,
    helpers.validate_asin(existing_settings.api_url, asin),
AttributeError: 'NoneType' object has no attribute 'api_url'

This is running in Docker with the following docker-compose.yml

version: '3.3'
services:
    bragibooks:
        container_name: bragibooks
        environment:
          - PUID=1000
          - PGID=1000
          - LOG_LEVEL=INFO
        volumes:
          - /docker/containers/bragibooks/config:/config
          - /docker/downloads/completed/Audiobooks:/input
          - /storage/audiobooks:/output
        ports:
          - 8001:8000
        restart: unless-stopped
        image: ghcr.io/djdembeck/bragibooks:main

Any advice it greatly appreciated!

Won't start on Synology docker Server Error (500)

Hi,

I try to use your docker but at first start i have this issue

Operations to perform:

  Apply all migrations: auth, contenttypes, importer, sessions

Running migrations:

  No migrations to apply.

[2022-01-08 15:26:41 +0000] [11] [INFO] Starting gunicorn 20.1.0

[2022-01-08 15:26:41 +0000] [11] [INFO] Listening at: http://0.0.0.0:8000 (11)

[2022-01-08 15:26:41 +0000] [11] [INFO] Using worker: gthread

[2022-01-08 15:26:41 +0000] [12] [INFO] Booting worker with pid: 12

[2022-01-08 15:26:41 +0000] [13] [INFO] Booting worker with pid: 13

Internal Server Error: /import/

Traceback (most recent call last):

  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner

    response = get_response(request)

  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response

    response = wrapped_callback(request, *callback_args, **callback_kwargs)

  File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view

    return self.dispatch(request, *args, **kwargs)

  File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 98, in dispatch

    return handler(request, *args, **kwargs)

  File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 159, in get

    context = self.get_context_data(**kwargs)

  File "/home/app/web/importer/views.py", line 34, in get_context_data

    for path in sorted(

  File "/usr/local/lib/python3.9/pathlib.py", line 1160, in iterdir

    for name in self._accessor.listdir(self):

PermissionError: [Errno 13] Permission denied: '/input'

What i've done wrong? i try to find but i cannot see.

Thanks for your help!

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Pending Branch Automerge

These updates await pending status checks before automerging. Click on a checkbox to abort the branch automerge, and create a PR instead.

  • chore: Upgrade docker/build-push-action digest to 729f7f4
  • chore: Upgrade docker/login-action digest to d910b14
  • chore: Upgrade docker/metadata-action digest to 2ee3d30

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

dockerfile
docker/Dockerfile
github-actions
.github/workflows/build-docker-image.yml
  • actions/checkout v3
.github/workflows/check-conventional-commits.yml
  • actions/checkout v3
  • webiny/action-conventional-commits v1.3.0
.github/workflows/docker-publish.yml
  • actions/checkout v3
  • docker/login-action 5f4866a30a54f16a52d2ecb4a3898e9e424939cf
  • docker/login-action 5f4866a30a54f16a52d2ecb4a3898e9e424939cf
  • docker/metadata-action 1294d94f8ee362ab42b6da04c35f4cd03a0e6af7
  • docker/build-push-action eb539f44b153603ccbfbd98e2ab9d4d0dcaf23a4
html
importer/templates/base.html
  • font-awesome 6.5.2
pip_requirements
requirements.txt
  • celery >=5.2
  • Django >=4.2
  • gunicorn >=20.1.0
  • kombu ==5.3.7
  • Levenshtein ==0.25.1
  • requests >=2.28
  • sqlalchemy >=2.0.0
  • whitenoise ==6.6.0

  • Check this box to trigger a request for Renovate to run again on this repository

Input Permissions Error

I'm having a lot of trouble getting this setup on my Synology. Granted I'm no expert but I read over some of the previous closed issues related to mine and couldn't figure out how to sort the problem out. I was looking in the Shared Folders permissions area to offer permissions but couldn't find a system user that seemed to be correct.

Not sure if I've missed something along the way but if anyone who's had experience with that setup is willing to give me some pointers I'd greatly appreciate it.

Handle folder with no supported inputs

Currently just throws this and halts other actions

input_data = helpers.get_directory(
File "/usr/local/lib/python3.8/site-packages/m4b_merge/helpers.py", line 59, in get_directory
path_to_use = return_find_ext[0]
TypeError: 'NoneType' object is not subscriptable

Handle single mp3 files

Not sure if I missed implementing this or had some issue with it and excluded from codebase. Either way, needs to be added

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.