Coder Social home page Coder Social logo

jvt038 / metatube Goto Github PK

View Code? Open in Web Editor NEW
317.0 317.0 20.0 2.54 MB

Python web ui to download videos from YouTube and add metadata on top of it

License: GNU General Public License v3.0

Python 39.95% JavaScript 38.81% HTML 21.04% Dockerfile 0.20%
metadata python youtube youtube-downloader

metatube's Introduction

Hi there ๐Ÿ‘‹


metatube's People

Contributors

cristiangauma avatar dependabot[bot] avatar jvt038 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

metatube's Issues

Suggest to loosen the dependency on spotipy

Hi, your project MetaTube(commit id: e0c4931) requires "spotipy==2.19.0" in its dependency. After analyzing the source code, we found that the following versions of spotipy can also be suitable, i.e., spotipy 2.19.0rc1, since all functions that you directly (3 APIs: spotipy.oauth2.SpotifyOauthError.init, spotipy.client.Spotify.init, spotipy.oauth2.SpotifyClientCredentials.init) or indirectly (propagate to 3 spotipy's internal APIs and 4 outsider APIs) used from the package have not been changed in these versions, thus not affecting your usage.

Therefore, we believe that it is quite safe to loose your dependency on spotipy from "spotipy==2.19.0" to "spotipy>=2.19.0rc1,<=2.19.0". This will improve the applicability of MetaTube and reduce the possibility of any further dependency conflict with other projects.

May I pull a request to further loosen the dependency on spotipy?

By the way, could you please tell us whether such an automatic tool for dependency analysis may be potentially helpful for maintaining dependencies easier during your development?

Constant Boot Looping when running under Debian

After test-running MetaTube on my Win10 machine (using Docker of course) I tried setting up a VM/LXC where I can keep it permanently using the command provided in the README. Unfortunately the container seems to bootloop constantly. The log provides me with this error:

INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: database is locked

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "//config/metatube.py", line 10, in <module>
    app = create_app()
  File "/config/metatube/__init__.py", line 48, in create_app
    init_db(app)
  File "/config/metatube/init/__init__.py", line 11, in init
    default.init_db()
  File "/config/metatube/init/create.py", line 72, in init_db
    self.migrations()
  File "/config/metatube/init/create.py", line 80, in migrations
    stamp(directory)
  File "/usr/local/lib/python3.9/site-packages/flask_migrate/__init__.py", line 98, in wrapped
    f(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/flask_migrate/__init__.py", line 244, in stamp
    command.stamp(config, revision, sql=sql, tag=tag)
  File "/usr/local/lib/python3.9/site-packages/alembic/command.py", line 613, in stamp
    script.run_env()
  File "/usr/local/lib/python3.9/site-packages/alembic/script/base.py", line 563, in run_env
    util.load_python_file(self.dir, "env.py")
  File "/usr/local/lib/python3.9/site-packages/alembic/util/pyfiles.py", line 92, in load_python_file
    module = load_module_py(module_id, path)
  File "/usr/local/lib/python3.9/site-packages/alembic/util/pyfiles.py", line 108, in load_module_py
    spec.loader.exec_module(module)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/config/migrations/env.py", line 91, in <module>
    run_migrations_online()
  File "/config/migrations/env.py", line 85, in run_migrations_online
    context.run_migrations()
  File "<string>", line 8, in run_migrations
  File "/usr/local/lib/python3.9/site-packages/alembic/runtime/environment.py", line 851, in run_migrations
    self.get_context().run_migrations(**kw)
  File "/usr/local/lib/python3.9/site-packages/alembic/runtime/migration.py", line 603, in run_migrations
    self._ensure_version_table()
  File "/usr/local/lib/python3.9/site-packages/alembic/runtime/migration.py", line 539, in _ensure_version_table
    self._version.create(self.connection, checkfirst=True)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/sql/schema.py", line 950, in create
    bind._run_ddl_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2113, in _run_ddl_visitor
    visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/sql/visitors.py", line 524, in traverse_single
    return meth(obj, **kw)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/sql/ddl.py", line 893, in visit_table
    self.connection.execute(
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1289, in execute
    return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/sql/ddl.py", line 80, in _execute_on_connection
    return connection._execute_ddl(
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1381, in _execute_ddl
    ret = self._execute_context(
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1845, in _execute_context
    self._handle_dbapi_exception(
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2026, in _handle_dbapi_exception
    util.raise_(
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database is locked
[SQL:
CREATE TABLE alembic_version (
        version_num VARCHAR(32) NOT NULL,
        CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
)

]
(Background on this error at: https://sqlalche.me/e/14/e3q8)

Will mysql ever come to this web?

Don't have an issue with sqlite but preferer to use mysql and such as i can access it via web and such without needing to ssh incase of an error.

Separate the app into an API and Web UI

Is your feature request related to a problem? Please describe.
Being a monolithic project is kind of a pain. For one, it doesn't allow scalability esp. in deployments like docker.

Describe the solution you'd like
I want this project to be MetaTube-API and MetaTube-Web

Describe alternatives you've considered
None

Additional context
This may also ease up the troubleshooting for server or client specific problems. It also make me and other maintainers do #94, #84, #2, etc. Next, things like multi-user support may easily be implemented. Additionally, it allows scalability (esp for power users of Docker and other tools). And lastly, this also allows integration for selfhosted music players to have access to one's library.

Python problems when deploying the container fresh

When I set up Metatube completly fresh, I experienced this error and couldnt figure out why it comes up.
I used this docker run command:

docker run \
  -d \
  --name metatube \
  --restart always \
  -p 6376:5000 \
  -e PORT=5000 \
  -e HOST=0.0.0.0 \
  -v /(exchanged path)/metatube/downloads:/downloads:rw \
  -v /(exchanged path)/metatube/database:/database:rw \
  -v /(exchanged path)/metatube/migrations:/config/migrations \
  jvt038/metatube:latest

This is the error message I always got:

Traceback (most recent call last):

  File "//config/metatube.py", line 9, in <module>

    app = create_app()

  File "/config/metatube/__init__.py", line 46, in create_app

    init_db(app)

  File "/config/metatube/init/__init__.py", line 11, in init

    default.init_db()

  File "/config/metatube/init/create.py", line 72, in init_db

    self.migrations()

  File "/config/metatube/init/create.py", line 80, in migrations

    stamp(directory)

  File "/usr/local/lib/python3.9/site-packages/flask_migrate/__init__.py", line 111, in wrapped

    f(*args, **kwargs)

  File "/usr/local/lib/python3.9/site-packages/flask_migrate/__init__.py", line 259, in stamp

    command.stamp(config, revision, sql=sql, tag=tag)

  File "/usr/local/lib/python3.9/site-packages/alembic/command.py", line 671, in stamp

    script.run_env()

  File "/usr/local/lib/python3.9/site-packages/alembic/script/base.py", line 569, in run_env

    util.load_python_file(self.dir, "env.py")

  File "/usr/local/lib/python3.9/site-packages/alembic/util/pyfiles.py", line 98, in load_python_file

    raise ImportError("Can't find Python file %s" % path)

ImportError: Can't find Python file /config/migrations/env.py

I hope you can help me find my mistake, thanks

Qol bugs

  1. Even when I edited the metadata manually, it still asks me to pick one from the list that it searched from musicbrainz, etc even though there's literally no results.
  2. It's slow. is there no concurrency in this project?
  3. When I recreate the Docker container or just restart it, I get this error:
ERROR [flask_migrate] Error: Can't locate revision identified by '8046105cb767'
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.

I can resolve it by moving the app.db out of the folder and letting it recreate the database file then moving it back but now, I can't do it.

Import Error

My config:

docker run -d \                                                                                                                                               
  --name metatube \                                                                                                                                           
  --restart always \                                                                                                                                          
  -p 5000:5000 \                                                                                                                                              
  -e PORT=5000 \                                                                                                                                              
  -e HOST=0.0.0.0 \                                                                                                                                           
  -v metatube_config:/config \                                                                                                                                
  -v metatube_downloads:/downloads:rw \                                                                                                                       
  -v metatube_database:/database:rw \                                                                                                                         
  jvt038/metatube:latest

Error:

Traceback (most recent call last):
  File "//config/metatube.py", line 9, in <module>
    app = create_app()
  File "/config/metatube/__init__.py", line 46, in create_app
    init_db(app)
  File "/config/metatube/init/__init__.py", line 11, in init
    default.init_db()
  File "/config/metatube/init/create.py", line 72, in init_db
    self.migrations()
  File "/config/metatube/init/create.py", line 80, in migrations
    stamp(directory)
  File "/usr/local/lib/python3.9/site-packages/flask_migrate/__init__.py", line 111, in wrapped
    f(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/flask_migrate/__init__.py", line 259, in stamp
    command.stamp(config, revision, sql=sql, tag=tag)
  File "/usr/local/lib/python3.9/site-packages/alembic/command.py", line 671, in stamp
    script.run_env()
  File "/usr/local/lib/python3.9/site-packages/alembic/script/base.py", line 569, in run_env
    util.load_python_file(self.dir, "env.py")
  File "/usr/local/lib/python3.9/site-packages/alembic/util/pyfiles.py", line 98, in load_python_file
    raise ImportError("Can't find Python file %s" % path)
ImportError: Can't find Python file /config/migrations/env.py

upon creating file env.py

Traceback (most recent call last):
  File "//config/metatube.py", line 9, in <module>
    app = create_app()
  File "/config/metatube/__init__.py", line 46, in create_app
    init_db(app)
  File "/config/metatube/init/__init__.py", line 11, in init
    default.init_db()
  File "/config/metatube/init/create.py", line 72, in init_db
    self.migrations()
  File "/config/metatube/init/create.py", line 81, in migrations
    migrate(directory)
  File "/usr/local/lib/python3.9/site-packages/flask_migrate/__init__.py", line 111, in wrapped
    f(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/flask_migrate/__init__.py", line 170, in migrate
    command.revision(config, message, autogenerate=True, sql=sql,
  File "/usr/local/lib/python3.9/site-packages/alembic/command.py", line 236, in revision
    scripts = [script for script in revision_context.generate_scripts()]
  File "/usr/local/lib/python3.9/site-packages/alembic/command.py", line 236, in <listcomp>
    scripts = [script for script in revision_context.generate_scripts()]
  File "/usr/local/lib/python3.9/site-packages/alembic/autogenerate/api.py", line 605, in generate_scripts
    yield self._to_script(generated_revision)
  File "/usr/local/lib/python3.9/site-packages/alembic/autogenerate/api.py", line 510, in _to_script
    return self.script_directory.generate_revision(
  File "/usr/local/lib/python3.9/site-packages/alembic/script/base.py", line 667, in generate_revision
    self.revision_map.get_revisions(head),
  File "/usr/local/lib/python3.9/site-packages/alembic/script/revision.py", line 527, in get_revisions
    resolved_id, branch_label = self._resolve_revision_number(
  File "/usr/local/lib/python3.9/site-packages/alembic/script/revision.py", line 751, in _resolve_revision_number
    self._revision_map
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 1138, in __get__
    obj.__dict__[self.__name__] = result = self.fget(obj)
  File "/usr/local/lib/python3.9/site-packages/alembic/script/revision.py", line 191, in _revision_map
    for revision in self._generator():
  File "/usr/local/lib/python3.9/site-packages/alembic/script/base.py", line 131, in _load_revisions
    for file_ in Script._list_py_dir(self, vers):
  File "/usr/local/lib/python3.9/site-packages/alembic/script/base.py", line 981, in _list_py_dir
    return os.listdir(path)
FileNotFoundError: [Errno 2] No such file or directory: '/config/migrations/versions'

it goes on with not finding files.

Expected behaviour:

Files are getting created upon spinning up container

Album in FLAC

When downloading a song in FLAC, the album cover does NOT apply. But other metadata does, and other encoder formats does apply the cover (for exaple, in MP3, it works).

To Reproduce

  1. Download a song from youtube like usual
  2. Before adding metadata, make that the encoder is in FLAC
  3. Download the song
  4. The song that you get don't have the cover applied

Expected behavior
Songs obtained in FLAC don't have album covers applied.

Screenshots
A song in MP3:
mp3
The same song, the same Youtube video and the same metadata, but in FLAC:
flac

Server information

  • Installation method: Kubernetes on TrueNAS Core (Debian)
  • Python version: [most recent]
  • Operating System: TrueNAS Core (Debian)

Latest Version Container Crashing upon Startup

Describe the bug
Docker container with the latest version does not start.

To Reproduce
Steps to reproduce the behavior:

  1. Pull the latest image and run it.

Expected behavior
Container launches without error and stays running.

Logs

Creating directory /config/migrations ...  done
Creating directory /config/migrations/versions ...  done
Generating /config/migrations/script.py.mako ...  done
Generating /config/migrations/env.py ...  done
Generating /config/migrations/alembic.ini ...  done
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
Generating /config/migrations/README ...  done
Please edit configuration/connection/logging settings in '/config/migrations/alembic.ini' before proceeding.
ERROR [flask_migrate] Error: Can't locate revision identified by 'e935a3b14ca8'
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
ERROR [flask_migrate] Error: Can't locate revision identified by 'e935a3b14ca8'
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
ERROR [flask_migrate] Error: Can't locate revision identified by 'e935a3b14ca8'

Server information

  • Installation method: Docker
  • Python version: Version in container
  • Operating System: Ubuntu 22.04

Additional context
Started about 2 hours ago when the new container was published.

[12-01-2022 19:07] WARNING [sponsorblock.py:10]: No segments found for ...

Seeing this error today after the update this morning.

[12-01-2022 19:07] INFO [sponsorblock.py:6]: Fetching sponsorblock segments for https://www.youtube.com/watch?v=123456789
[12-01-2022 19:07] WARNING [sponsorblock.py:10]: No segments found for https://www.youtube.com/watch?v=123456789
Traceback (most recent call last):
  File "src/gevent/greenlet.py", line 906, in gevent._gevent_cgreenlet.Greenlet.run
  File "/config/metatube/youtube.py", line 206, in fetch_video
    downloadform = downloadtemplate.render(templates=templates, segments=segments, default=defaulttemplate)
  File "/usr/local/lib/python3.9/site-packages/jinja2/environment.py", line 1291, in render
    self.environment.handle_exception()
  File "/usr/local/lib/python3.9/site-packages/jinja2/environment.py", line 925, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/config/metatube/templates/downloadform.html", line 58, in top-level template code
    {% set resolution = default.resolution.split(';') %}
  File "/usr/local/lib/python3.9/site-packages/jinja2/environment.py", line 474, in getattr
    return getattr(obj, attribute)
jinja2.exceptions.UndefinedError: 'None' has no attribute 'resolution'
2022-01-12T19:07:43Z <Thread at 0x7f7b3e5e3040: fetch_video({'id': 'RdsGnTsHjhs', 'title': 'Artiest | TruncTitle, [<Templates 0>], 'musicbrainz', None)> failed with UndefinedError

Pip install fails thanks to gevent

Well, pip install fails.

pip logs:

> pip install -r requirements.txt
Collecting mutagen==1.45.1
  Using cached mutagen-1.45.1-py3-none-any.whl (218 kB)
Collecting requests==2.28.1
  Using cached requests-2.28.1-py3-none-any.whl (62 kB)
Collecting yt-dlp==2022.6.29
  Using cached yt_dlp-2022.6.29-py2.py3-none-any.whl (2.6 MB)
Collecting gevent==21.8.0
  Using cached gevent-21.8.0.tar.gz (6.2 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting gevent-websocket==0.10.1
  Using cached gevent_websocket-0.10.1-py3-none-any.whl (22 kB)
Collecting Flask==2.1.3
  Using cached Flask-2.1.3-py3-none-any.whl (95 kB)
Collecting Flask-SocketIO==5.2.0
  Using cached Flask_SocketIO-5.2.0-py3-none-any.whl (17 kB)
Collecting Flask-Migrate==3.1.0
  Using cached Flask_Migrate-3.1.0-py3-none-any.whl (20 kB)
Collecting Flask-JSGlue2==0.3.3
  Using cached Flask-JSGlue2-0.3.3.tar.gz (2.1 kB)
  Preparing metadata (setup.py) ... done
Collecting Flask-SQLAlchemy==2.5.1
  Using cached Flask_SQLAlchemy-2.5.1-py2.py3-none-any.whl (17 kB)
Collecting musicbrainzngs==0.7.1
  Using cached musicbrainzngs-0.7.1-py2.py3-none-any.whl (25 kB)
Collecting sponsorblock.py==0.2.2
  Using cached sponsorblock.py-0.2.2-py3-none-any.whl (17 kB)
Collecting python-dateutil==2.8.2
  Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Collecting python-dotenv==0.20.0
  Using cached python_dotenv-0.20.0-py3-none-any.whl (17 kB)
Collecting python-magic==0.4.27
  Using cached python_magic-0.4.27-py2.py3-none-any.whl (13 kB)
Collecting ffmpeg-python==0.2.0
  Using cached ffmpeg_python-0.2.0-py3-none-any.whl (25 kB)
Collecting youtube-search-python==1.6.6
  Using cached youtube_search_python-1.6.6-py3-none-any.whl (89 kB)
Collecting spotipy==2.20.0
  Using cached spotipy-2.20.0-py3-none-any.whl (27 kB)
Collecting urllib3==1.26.10
  Using cached urllib3-1.26.10-py2.py3-none-any.whl (139 kB)
Collecting deezer-python==5.3.3
  Using cached deezer_python-5.3.3-py3-none-any.whl (20 kB)
Collecting charset-normalizer<3,>=2
  Using cached charset_normalizer-2.1.1-py3-none-any.whl (39 kB)
Collecting certifi>=2017.4.17
  Using cached certifi-2022.12.7-py3-none-any.whl (155 kB)
Collecting idna<4,>=2.5
  Using cached idna-3.4-py3-none-any.whl (61 kB)
Collecting brotli
  Using cached Brotli-1.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.7 MB)
Collecting pycryptodomex
  Using cached pycryptodomex-3.17-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
Collecting websockets
  Using cached websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (106 kB)
Collecting zope.event
  Using cached zope.event-4.6-py2.py3-none-any.whl (6.8 kB)
Collecting greenlet<2.0,>=1.1.0
  Using cached greenlet-1.1.3.post0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (156 kB)
Collecting zope.interface
  Using cached zope.interface-5.5.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (258 kB)
Requirement already satisfied: setuptools in /home/carlo/env/webyt/lib/python3.10/site-packages (from gevent==21.8.0->-r requirements.txt (line 4)) (65.5.0)
Collecting click>=8.0
  Using cached click-8.1.3-py3-none-any.whl (96 kB)
Collecting Werkzeug>=2.0
  Using cached Werkzeug-2.2.2-py3-none-any.whl (232 kB)
Collecting Jinja2>=3.0
  Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)
Collecting itsdangerous>=2.0
  Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB)
Collecting python-socketio>=5.0.2
  Using cached python_socketio-5.7.2-py3-none-any.whl (56 kB)
Collecting alembic>=0.7
  Using cached alembic-1.9.2-py3-none-any.whl (210 kB)
Collecting SQLAlchemy>=0.8.0
  Using cached SQLAlchemy-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)
Collecting six>=1.5
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting future
  Using cached future-0.18.3.tar.gz (840 kB)
  Preparing metadata (setup.py) ... done
Collecting httpx>=0.14.2
  Using cached httpx-0.23.3-py3-none-any.whl (71 kB)
Collecting redis>=3.5.3
  Using cached redis-4.4.2-py3-none-any.whl (237 kB)
Collecting Mako
  Using cached Mako-1.2.4-py3-none-any.whl (78 kB)
Collecting rfc3986[idna2008]<2,>=1.3
  Using cached rfc3986-1.5.0-py2.py3-none-any.whl (31 kB)
Collecting sniffio
  Using cached sniffio-1.3.0-py3-none-any.whl (10 kB)
Collecting httpcore<0.17.0,>=0.15.0
  Using cached httpcore-0.16.3-py3-none-any.whl (69 kB)
Collecting MarkupSafe>=2.0
  Using cached MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)
Collecting bidict>=0.21.0
  Using cached bidict-0.22.1-py3-none-any.whl (35 kB)
Collecting python-engineio>=4.3.0
  Using cached python_engineio-4.3.4-py3-none-any.whl (52 kB)
Collecting async-timeout>=4.0.2
  Using cached async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting typing-extensions>=4.2.0
  Using cached typing_extensions-4.4.0-py3-none-any.whl (26 kB)
Collecting anyio<5.0,>=3.0
  Using cached anyio-3.6.2-py3-none-any.whl (80 kB)
Collecting h11<0.15,>=0.13
  Using cached h11-0.14.0-py3-none-any.whl (58 kB)
Building wheels for collected packages: gevent
  Building wheel for gevent (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  ร— Building wheel for gevent (pyproject.toml) did not run successfully.
  โ”‚ exit code: 1
  โ•ฐโ”€> [350 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-cpython-310
      creating build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/util.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/events.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_util.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_socket3.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/builtins.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_ident.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/pool.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/local.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/baseserver.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/pywsgi.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/monkey.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/resolver_ares.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/resolver_thread.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_tblib.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/__init__.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_semaphore.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_socket2.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/core.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/threadpool.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_abstract_linkable.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/contextvars.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/ares.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_tracer.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_compat.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_imap.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/server.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_ssl3.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/subprocess.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/threading.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_fileobjectposix.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/thread.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/selectors.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_ssl2.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_waiter.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_hub_primitives.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_monitor.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_greenlet_primitives.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/win32util.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_config.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/backdoor.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_interfaces.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/signal.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_socketcommon.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_util_py2.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/exceptions.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/ssl.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/queue.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/timeout.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/hub.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/time.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/os.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/event.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_sslgte279.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/lock.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/greenlet.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_hub_local.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_fileobjectcommon.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_patcher.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/socket.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/fileobject.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/select.py -> build/lib.linux-x86_64-cpython-310/gevent
      copying src/gevent/_threading.py -> build/lib.linux-x86_64-cpython-310/gevent
      creating build/lib.linux-x86_64-cpython-310/gevent/libuv
      copying src/gevent/libuv/loop.py -> build/lib.linux-x86_64-cpython-310/gevent/libuv
      copying src/gevent/libuv/_corecffi_build.py -> build/lib.linux-x86_64-cpython-310/gevent/libuv
      copying src/gevent/libuv/__init__.py -> build/lib.linux-x86_64-cpython-310/gevent/libuv
      copying src/gevent/libuv/watcher.py -> build/lib.linux-x86_64-cpython-310/gevent/libuv
      creating build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__backdoor.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test___ident.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threadpool_executor_patched.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/known_failures.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__getaddrinfo_import.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__socket_dns.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__GreenletExit.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_selectors.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__socket_send_memoryview.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__systemerror.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_ssl_warning2.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threading_patched_local.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__refcount.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_sigchld.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__os.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/lock_tests.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__nondefaultloop.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issues461_471.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_builtins_future.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__socket_close.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issue230.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__close_backend_fd.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__greenlet.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__hub.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__subprocess.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_ssl_warning.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__socket_timeout.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_logging.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__subprocess_poll.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__hub_join_timeout.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/_imports_imports_at_top_level.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__core_callback.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__sleep0.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__semaphore.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threading_no_monkey.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threading_vs_settrace.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__queue.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_hub_in_thread.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/_import_import_patch.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__contextvars.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/__main__.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__socket_ex.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test___config.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threading_monkey_in_thread.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__signal.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__environ.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__iwait.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__server.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__socket_ssl.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__api.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__hub_join.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__import_blocking_in_greenlet.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/__init__.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__import_wait.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__example_wsgiserver.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__greenio.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__api_timeout.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__ssl.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threading.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__doctests.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__example_webproxy.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/_blocks_at_top_level.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__makefile_ref.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issue1686.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__core_loop_run.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__memleak.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__ares_timeout.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/_import_wait.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__lock.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issue607.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__core.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__loop_callback.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threading_2.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__greenletset.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__real_greenlet.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__compat.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__exc_info.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__server_pywsgi.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issue112.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__pywsgi.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__fileobject.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__core_watcher.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_module_run.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__events.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__destroy_default_loop.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__example_udp_server.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_select.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__core_async.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__examples.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__timeout.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__example_wsgiserver_ssl.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_ssl_warning3.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__example_echoserver.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_sigchld_3.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threading_native_before_monkey.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__joinall.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issue639.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__core_fork.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__example_udp_client.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__util.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_sigchld_2.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__socket.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issue467.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/_imports_at_top_level.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test___monitor.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__pool.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__socket_dns6.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__order.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__socket_errors.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_futures_thread.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test___monkey_patching.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threading_before_monkey.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__execmodules.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__core_timer.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threadpool.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__select.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__destroy.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__selectors.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__threading_holding_lock_while_monkey.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__socketpair.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__all__.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__resolver_dnspython.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__thread.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__core_stat.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__ares_host_result.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__greenness.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__event.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_multiple_imports.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__subprocess_interrupted.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/getaddrinfo_module.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/_import_patch.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__monkey_queue.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issue330.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issue6.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__local.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issue_728.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__issue600.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__example_portforwarder.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test__refcount_core.py -> build/lib.linux-x86_64-cpython-310/gevent/tests
      creating build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/util.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/sysinfo.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/leakcheck.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/__init__.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/params.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/testcase.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/monkey_test.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/exception.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/six.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/travis.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/testrunner.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/patched_tests_setup.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/sockets.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/flaky.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/support.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/modules.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/errorhandler.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/switching.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/hub.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/timing.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/openfiles.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/resources.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      copying src/gevent/testing/skipping.py -> build/lib.linux-x86_64-cpython-310/gevent/testing
      creating build/lib.linux-x86_64-cpython-310/gevent/libev
      copying src/gevent/libev/_corecffi_build.py -> build/lib.linux-x86_64-cpython-310/gevent/libev
      copying src/gevent/libev/__init__.py -> build/lib.linux-x86_64-cpython-310/gevent/libev
      copying src/gevent/libev/corecffi.py -> build/lib.linux-x86_64-cpython-310/gevent/libev
      copying src/gevent/libev/watcher.py -> build/lib.linux-x86_64-cpython-310/gevent/libev
      creating build/lib.linux-x86_64-cpython-310/gevent/_ffi
      copying src/gevent/_ffi/loop.py -> build/lib.linux-x86_64-cpython-310/gevent/_ffi
      copying src/gevent/_ffi/callback.py -> build/lib.linux-x86_64-cpython-310/gevent/_ffi
      copying src/gevent/_ffi/__init__.py -> build/lib.linux-x86_64-cpython-310/gevent/_ffi
      copying src/gevent/_ffi/watcher.py -> build/lib.linux-x86_64-cpython-310/gevent/_ffi
      creating build/lib.linux-x86_64-cpython-310/gevent/resolver
      copying src/gevent/resolver/blocking.py -> build/lib.linux-x86_64-cpython-310/gevent/resolver
      copying src/gevent/resolver/dnspython.py -> build/lib.linux-x86_64-cpython-310/gevent/resolver
      copying src/gevent/resolver/__init__.py -> build/lib.linux-x86_64-cpython-310/gevent/resolver
      copying src/gevent/resolver/ares.py -> build/lib.linux-x86_64-cpython-310/gevent/resolver
      copying src/gevent/resolver/thread.py -> build/lib.linux-x86_64-cpython-310/gevent/resolver
      copying src/gevent/resolver/_hostsfile.py -> build/lib.linux-x86_64-cpython-310/gevent/resolver
      copying src/gevent/resolver/_addresses.py -> build/lib.linux-x86_64-cpython-310/gevent/resolver
      creating build/lib.linux-x86_64-cpython-310/gevent/tests/monkey_package
      copying src/gevent/tests/monkey_package/issue1526_no_monkey.py -> build/lib.linux-x86_64-cpython-310/gevent/tests/monkey_package
      copying src/gevent/tests/monkey_package/__main__.py -> build/lib.linux-x86_64-cpython-310/gevent/tests/monkey_package
      copying src/gevent/tests/monkey_package/threadpool_no_monkey.py -> build/lib.linux-x86_64-cpython-310/gevent/tests/monkey_package
      copying src/gevent/tests/monkey_package/__init__.py -> build/lib.linux-x86_64-cpython-310/gevent/tests/monkey_package
      copying src/gevent/tests/monkey_package/issue302monkey.py -> build/lib.linux-x86_64-cpython-310/gevent/tests/monkey_package
      copying src/gevent/tests/monkey_package/script.py -> build/lib.linux-x86_64-cpython-310/gevent/tests/monkey_package
      copying src/gevent/tests/monkey_package/issue1526_with_monkey.py -> build/lib.linux-x86_64-cpython-310/gevent/tests/monkey_package
      copying src/gevent/tests/monkey_package/threadpool_monkey_patches.py -> build/lib.linux-x86_64-cpython-310/gevent/tests/monkey_package
      copying src/gevent/tests/badcert.pem -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/wrongcert.pem -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/https_svn_python_org_root.pem -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/badkey.pem -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/nullcert.pem -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/2_7_keycert.pem -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/sha256.pem -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/keycert.pem -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/server.crt -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test_server.crt -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/hosts_file.txt -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/tests_that_dont_monkeypatch.txt -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/tests_that_dont_do_leakchecks.txt -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/tests_that_dont_use_resolver.txt -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/test_server.key -> build/lib.linux-x86_64-cpython-310/gevent/tests
      copying src/gevent/tests/server.key -> build/lib.linux-x86_64-cpython-310/gevent/tests
      creating build/lib.linux-x86_64-cpython-310/gevent/testing/coveragesite
      copying src/gevent/testing/coveragesite/sitecustomize.py -> build/lib.linux-x86_64-cpython-310/gevent/testing/coveragesite
      running build_ext
      generating cffi module 'build/temp.linux-x86_64-cpython-310/gevent.libuv._corecffi.c'
      creating build/temp.linux-x86_64-cpython-310
      Running '(cd  "/tmp/pip-install-u5u5nek1/gevent_ff668e1e3738401aa7e23cdee8bca799/deps/libev"  && sh ./configure -C > configure-output.txt )' in /tmp/pip-install-u5u5nek1/gevent_ff668e1e3738401aa7e23cdee8bca799
      configure: error: in `/tmp/pip-install-u5u5nek1/gevent_ff668e1e3738401aa7e23cdee8bca799/deps/libev':
      configure: error: no acceptable C compiler found in $PATH
      See `config.log' for more details
      Traceback (most recent call last):
        File "/home/carlo/env/webyt/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 351, in <module>
          main()
        File "/home/carlo/env/webyt/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 333, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/home/carlo/env/webyt/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 249, in build_wheel
          return _build_backend().build_wheel(wheel_directory, config_settings,
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 413, in build_wheel
          return self._build_with_temp_dir(['bdist_wheel'], '.whl',
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 398, in _build_with_temp_dir
          self.run_setup()
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 484, in run_setup
          super(_BuildMetaLegacyBackend,
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 335, in run_setup
          exec(code, locals())
        File "<string>", line 481, in <module>
        File "<string>", line 348, in run_setup
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/__init__.py", line 108, in setup
          return distutils.core.setup(**attrs)
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/_distutils/core.py", line 185, in setup
          return run_commands(dist)
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
          dist.run_commands()
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
          self.run_command(cmd)
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/dist.py", line 1213, in run_command
          super().run_command(command)
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/wheel/bdist_wheel.py", line 325, in run
          self.run_command("build")
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command
          self.distribution.run_command(command)
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/dist.py", line 1213, in run_command
          super().run_command(command)
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/_distutils/command/build.py", line 132, in run
          self.run_command(cmd_name)
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command
          self.distribution.run_command(command)
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/dist.py", line 1213, in run_command
          super().run_command(command)
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/cffi/setuptools_ext.py", line 143, in run
          ext.sources[0] = make_mod(self.build_temp, pre_run)
        File "/tmp/pip-build-env-vr5ema1s/overlay/lib/python3.10/site-packages/cffi/setuptools_ext.py", line 128, in make_mod
          pre_run(ext, ffi)
        File "/tmp/pip-install-u5u5nek1/gevent_ff668e1e3738401aa7e23cdee8bca799/_setuputils.py", line 364, in pre_run
          action()
        File "/tmp/pip-install-u5u5nek1/gevent_ff668e1e3738401aa7e23cdee8bca799/_setuplibev.py", line 55, in configure_libev
          system(libev_configure_command)
        File "/tmp/pip-install-u5u5nek1/gevent_ff668e1e3738401aa7e23cdee8bca799/_setuputils.py", line 195, in system
          if _system(cmd, cwd=cwd, env=env, **kwargs):
        File "/tmp/pip-install-u5u5nek1/gevent_ff668e1e3738401aa7e23cdee8bca799/_setuputils.py", line 191, in _system
          return check_call(cmd, cwd=cwd, env=env, **kwargs)
        File "/usr/lib/python3.10/subprocess.py", line 369, in check_call
          raise CalledProcessError(retcode, cmd)
      subprocess.CalledProcessError: Command '(cd  "/tmp/pip-install-u5u5nek1/gevent_ff668e1e3738401aa7e23cdee8bca799/deps/libev"  && sh ./configure -C > configure-output.txt )' returned non-zero exit status 1.
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for gevent
Failed to build gevent
ERROR: Could not build wheels for gevent, which is required to install pyproject.toml-based projects

Errors on Download

Describe the bug
When I download something, the download goes through but when I try to download it, I got various errors

To Reproduce
Steps to reproduce the behavior:

  1. Run MetaTube
  2. Download Music
  3. Proceed with the download
  4. Click download item

Expected behavior
Should download as normal

Screenshots
If applicable, add screenshots to help explain your problem.

Server information

  • Installation method: Windows 11, Fresh github clone of master
  • Python version: Python 3.11
  • Operating System: Windows 11

Additional context

Traceback (most recent call last):
  File "src\\gevent\\greenlet.py", line 908, in gevent._gevent_cgreenlet.Greenlet.run
  File "A:\metatube1\.venv\Lib\site-packages\socketio\server.py", line 586, in _handle_event_internal
    r = server._trigger_event(data[0], namespace, sid, *data[1:])
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "A:\metatube1\.venv\Lib\site-packages\socketio\server.py", line 611, in _trigger_event
    return handler(*args)
           ^^^^^^^^^^^^^^
  File "A:\metatube1\.venv\Lib\site-packages\flask_socketio\__init__.py", line 282, in _handler
    return self._handle_event(handler, message, namespace, sid,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "A:\metatube1\.venv\Lib\site-packages\flask_socketio\__init__.py", line 827, in _handle_event
    ret = handler(*args)
          ^^^^^^^^^^^^^^
  File "A:\metatube1\metatube\overview\routes.py", line 325, in downloaditem
    mimetype = magic.from_file(path)
               ^^^^^^^^^^^^^^^^^^^^^
  File "A:\metatube1\.venv\Lib\site-packages\magic\magic.py", line 89, in from_file
    return maybe_decode(magic_file(self.cookie, filename))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "A:\metatube1\.venv\Lib\site-packages\magic\magic.py", line 214, in maybe_decode
    return s.decode('utf-8')
           ^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe3 in position 44: invalid continuation byte
2024-04-15T14:49:01Z <Thread at 0x179a124b920: <bound method Server._handle_event_internal of <socketio.server.Server object at 0x000001799EDFE310>>(<socketio.server.Server object at 0x000001799EDFE3, '6XkNKTSvTGRHPSsvAAAL', 'WCPARVZdyxMXkqOpAAAK', ['downloaditem', 'A:\\Projects\\MetaTube\\download, '/', None)> failed with UnicodeDecodeError

pip freeze

alembic==1.13.1
anyio==4.3.0
beautifulsoup4==4.12.3
bidict==0.23.1
blinker==1.7.0
Brotli==1.1.0
certifi==2024.2.2
cffi==1.16.0
charset-normalizer==3.3.2
click==8.1.7
colorama==0.4.6
deezer-python==6.1.1
ffmpeg-python==0.2.0
Flask==3.0.1
Flask-Migrate==4.0.5
Flask-SocketIO==5.3.6
Flask-SQLAlchemy==3.1.1
flask-vite==0.3.8
future==1.0.0
gevent==23.9.1
gevent-websocket==0.10.1
greenlet==3.0.3
h11==0.14.0
httpcore==1.0.5
httpx==0.27.0
idna==3.7
iniconfig==2.0.0
itsdangerous==2.1.2
Jinja2==3.1.3
lyricsgenius==3.0.1
Mako==1.3.3
MarkupSafe==2.1.5
musicbrainzngs==0.7.1
mutagen==1.47.0
packaging==24.0
pluggy==1.4.0
pycparser==2.22
pycryptodomex==3.20.0
pytest==8.0.0
python-dateutil==2.8.2
python-dotenv==1.0.1
python-engineio==4.9.0
python-magic==0.4.27
python-magic-bin==0.4.14
python-socketio==5.11.2
redis==5.0.3
requests==2.31.0
simple-websocket==1.0.0
six==1.16.0
sniffio==1.3.1
soupsieve==2.5
sponsorblock.py==0.2.2
spotipy==2.23.0
SQLAlchemy==2.0.29
typing_extensions==4.11.0
urllib3==2.1.0
websockets==12.0
Werkzeug==3.0.2
wsproto==1.2.0
youtube-search-python==1.6.6
yt-dlp==2024.4.9
zope.event==5.0
zope.interface==6.2

ImportError: cannot import name 'Markup' from 'jinja2'

Container fails to start. Removed the database, container, and image to start from fresh and get the same results. Any ideas?

Traceback (most recent call last):                                                                                                                                                                                 File "//config/metatube.py", line 5, in <module>
    from metatube import create_app, socketio
  File "/config/metatube/__init__.py", line 4, in <module>
    from flask_jsglue import JSGlue
  File "/usr/local/lib/python3.9/site-packages/flask_jsglue.py", line 2, in <module>                                                                                                                                 from jinja2 import Markup                                                                                                                                                                                    ImportError: cannot import name 'Markup' from 'jinja2' (/usr/local/lib/python3.9/site-packages/jinja2/__init__.py)                                                                                               Traceback (most recent call last):                                                                                                                                                                                 File "//config/metatube.py", line 5, in <module>
    from metatube import create_app, socketio
  File "/config/metatube/__init__.py", line 4, in <module>
    from flask_jsglue import JSGlue
  File "/usr/local/lib/python3.9/site-packages/flask_jsglue.py", line 2, in <module>                                                                                                                                 from jinja2 import Markup                                                                                                                                                                                    ImportError: cannot import name 'Markup' from 'jinja2' (/usr/local/lib/python3.9/site-packages/jinja2/__init__.py)                                                                                               Traceback (most recent call last):                                                                                                                                                                                 File "//config/metatube.py", line 5, in <module>
    from metatube import create_app, socketio
  File "/config/metatube/__init__.py", line 4, in <module>
    from flask_jsglue import JSGlue                                                                                                                                                                                File "/usr/local/lib/python3.9/site-packages/flask_jsglue.py", line 2, in <module>                                                                                                                                 from jinja2 import Markup                                                                                                                                                                                    ImportError: cannot import name 'Markup' from 'jinja2' (/usr/local/lib/python3.9/site-packages/jinja2/__init__.py)
Traceback (most recent call last):                                                                                                                                                                                 File "//config/metatube.py", line 5, in <module>
    from metatube import create_app, socketio                                                                                                                                                                      File "/config/metatube/__init__.py", line 4, in <module>
    from flask_jsglue import JSGlue
  File "/usr/local/lib/python3.9/site-packages/flask_jsglue.py", line 2, in <module>                                                                                                                                 from jinja2 import Markup
ImportError: cannot import name 'Markup' from 'jinja2' (/usr/local/lib/python3.9/site-packages/jinja2/__init__.py)                                                                                               Traceback (most recent call last):                                                                                                                                                                                 File "//config/metatube.py", line 5, in <module>
    from metatube import create_app, socketio
  File "/config/metatube/__init__.py", line 4, in <module>                                                                                                                                                           from flask_jsglue import JSGlue
  File "/usr/local/lib/python3.9/site-packages/flask_jsglue.py", line 2, in <module>                                                                                                                                 from jinja2 import Markup                                                                                                                                                                                    ImportError: cannot import name 'Markup' from 'jinja2' (/usr/local/lib/python3.9/site-packages/jinja2/__init__.py)                                                                                               Traceback (most recent call last):
  File "//config/metatube.py", line 5, in <module>
    from metatube import create_app, socketio
  File "/config/metatube/__init__.py", line 4, in <module>                                                                                                                                                           from flask_jsglue import JSGlue
  File "/usr/local/lib/python3.9/site-packages/flask_jsglue.py", line 2, in <module>                                                                                                                                 from jinja2 import Markup                                                                                                                                                                                    ImportError: cannot import name 'Markup' from 'jinja2' (/usr/local/lib/python3.9/site-packages/jinja2/__init__.py)

Add option to not use database

Stupid question but I'm struggling with database issues and I don't need the features related to the database, would it be possible to just remove it ?

I want to download and add metadata, I don't really see why a database is useful here.

Sorry, I know this is an "anti-feature".

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.