Open georghuber opened 2 years ago
It looks like tvdb_api was importing some internal functions from requests-cache. So not a problem with tvnamer.
That appears to have been fixed here, so try updating to the latest version:
pip install -U tvdb_api
Many thanks; I'll contact the maintainer from FreeBSD ports, because their latest tvdb_api version was from a year ago.
Hi,
I still could not get it to work. I am at py39 now but I receive this message (FreeBSD 13.1):
####################
# Starting tvnamer
Invalid filename: Cannot parse '/mnt/large/rename/tvnamer.json'
# Found 1 episode
####################
# Processing file: star.trek.strange.new.world.s01e10.mkv
# Detected series: star trek strange new world (season: 1, episode: 10)
Traceback (most recent call last):
File "/usr/local/bin/tvnamer", line 33, in <module>
sys.exit(load_entry_point('tvnamer==3.0.4', 'console_scripts', 'tvnamer')())
File "/usr/local/lib/python3.9/site-packages/tvnamer/main.py", line 474, in main
tvnamer(paths = sorted(args))
File "/usr/local/lib/python3.9/site-packages/tvnamer/main.py", line 370, in tvnamer
processFile(tvdb_instance, episode)
File "/usr/local/lib/python3.9/site-packages/tvnamer/main.py", line 175, in processFile
episode.populateFromTvdb(tvdb_instance, force_name=Config['force_name'], series_id=Config['series_id'])
File "/usr/local/lib/python3.9/site-packages/tvnamer/utils.py", line 641, in populateFromTvdb
show = tvdb_instance[force_name or self.seriesname]
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 1152, in __getitem__
sid = self._nameToSid(key)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 1136, in _nameToSid
selected_series = self._getSeries(name)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 935, in _getSeries
all_series = self.search(series)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 914, in search
series_resp = self._getetsrc(self.config['url_getSeries'] % (series))
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 874, in _getetsrc
src = self._loadUrl(url, language=language)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 811, in _loadUrl
self.authorize()
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 859, in authorize
r = self.session.post(
File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 635, in post
return self.request("POST", url, data=data, json=json, **kwargs)
File "/usr/local/lib/python3.9/site-packages/requests_cache/session.py", line 115, in request
return super().request(method, url, *args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.9/site-packages/requests_cache/session.py", line 127, in send
cache_key = self.cache.create_key(request, **kwargs)
TypeError: create_key() got an unexpected keyword argument 'timeout'
Is this a tvnamer error, or a tvdb_api error?
Many thanks for your help!
Georg
That might be a problem with requests-cache, or at least an older version of it. Can you tell me what version you have?
python -c "import requests_cache; print(requests_cache.__version__)"
And are you able to update to a newer version?
Hi,
thanks for your help. I forgot to mention, that meanwhile I have upgraded python to 3.9 and both tvdb_api and tvnamer are py39-.
Requests cache is (according to your command): 0.9.2
Thanks again,
Georg
as for the possibility to update to a newer version:
the port I have installed is supposedly "required" by tvdb_api to run (see freshports: https://www.freshports.org/www/py-requests-cache93/). I believe the port maintainer specifically forked this version, after I had troubles with requests_cache (see inital post above).
However, there seems to be a "newer" port available (version number 0.9.5; https://www.freshports.org/www/py-requests-cache/). As I am a total python noob however, I do not know, whether the "new" 0.9.5 port would change/or fix anything. Since the port maintainer created the 0.9.3 fork specifically for tvdb_api, I do not know, whether installing the 0.9.5 port would change anything (as tvdb_api would possibly continue to use the request_cache 0.9.3).
Many thanks for the help, again!
G
Hi,
the latest info in the FreeBSD ports community I received is:
Looks like they do not support python 3.9 so you should go back to python38.
Add in your make.conf: DEFAULT_VERSIONS= python=3.8 and rebuild all ports.
Do you think that this is worth a shot?
Many thanks!
Georg
tvnamer's classifiers (used for metadata on PyPI) only list python versions up to 3.8, but that doesn't necessarily mean it doesn't work with python 3.9+. Often that just means it hasn't been tested on later versions.
I looked into this error a bit more:
File "/usr/local/lib/python3.9/site-packages/requests_cache/session.py", line 127, in send
cache_key = self.cache.create_key(request, **kwargs)
TypeError: create_key() got an unexpected keyword argument 'timeout'
I had assumed this was a problem with requests-cache's create_key()
function, but couldn't reproduce it. Then I found that tvdb_api is patching that out with a custom key function here:
https://github.com/dbr/tvdb_api/blob/ce0382181a9e08a5113bfee0fed2c78f8b1e613f/tvdb_api.py#L702
One way or another, a timeout
keyword arg got passed to that function, probably to set the connection timeout in the requests library. requests-cache's create_key()
handles variable keyword args (**kwargs
), which would include timeout
. The purpose of that is to provide the option to use any extra keyword arguments passed to requests.request()
. However, the custom create_key()
used by tvdb_api only takes a single positional argument, resulting in TypeError: create_key() got an unexpected keyword argument 'timeout'
. That's probably more info than you need, but just leaving it here for reference.
Edit: I added a minimal PR that will fix this: https://github.com/dbr/tvdb_api/pull/102
Meanwhile, I can't actually figure out where that timeout
argument is coming from. I don't see it used anywhere in either tvnamer or tvdb_api, so it's possible that updating to the latest version of one or both of them may fix the issue.
Meanwhile, I can't actually figure out where that
timeout
argument is coming from. I don't see it used anywhere in either tvnamer or tvdb_api, so it's possible that updating to the latest version of one or both of them may fix the issue.
Many thanks for looking into it.
I have the latest versions of both installed, otherwise I would not dare to ask in a forum ;-)
BSD% tvnamer --version
tvnamer version: 3.0.4
tvdb_api version: 3.1.0
tvnamer's classifiers (used for metadata on PyPI) only list python versions up to 3.8, but that doesn't necessarily mean it doesn't work with python 3.9+. Often that just means it hasn't been tested on later versions.
I looked into this error a bit more:
File "/usr/local/lib/python3.9/site-packages/requests_cache/session.py", line 127, in send cache_key = self.cache.create_key(request, **kwargs) TypeError: create_key() got an unexpected keyword argument 'timeout'
I had assumed this was a problem with requests-cache's
create_key()
function, but couldn't reproduce it. Then I found that tvdb_api is patching that out with a custom key function here: https://github.com/dbr/tvdb_api/blob/ce0382181a9e08a5113bfee0fed2c78f8b1e613f/tvdb_api.py#L702One way or another, a
timeout
keyword arg got passed to that function, probably to set the connection timeout in the requests library. requests-cache'screate_key()
handles variable keyword args (**kwargs
), which would includetimeout
. The purpose of that is to provide the option to use any extra keyword arguments passed torequests.request()
. However, the customcreate_key()
used by tvdb_api only takes a single positional argument, resulting inTypeError: create_key() got an unexpected keyword argument 'timeout'
. That's probably more info than you need, but just leaving it here for reference.Edit: I added a minimal PR that will fix this: dbr/tvdb_api#102
Many thanks. I ran tvnamer with the -v option, maybe it is of additional help:
BSD% tvnamer -v /mnt/large/rename/star.trek.strange.new.world.s01e10.mkv
####################
# Starting tvnamer
# Found 1 episode
2022-10-02 19:39:05,416 - tvnamer.main - DEBUG - Using tvnamer default API key
2022-10-02 19:39:05,418 - tvdb_api - DEBUG - Caching using requests_cache to /tmp/tvdb_api--u1001-py3
2022-10-02 19:39:05,418 - requests_cache.backends - DEBUG - Initializing backend: sqlite /tmp/tvdb_api--u1001-py3
2022-10-02 19:39:05,418 - requests_cache.backends.base - DEBUG - Initializing SQLitePickleDict with serializer: <requests_cache.serializers.pipeline.SerializerPipeline object at 0x802a1ebe0>
2022-10-02 19:39:05,418 - requests_cache.backends.sqlite - DEBUG - Opening connection to /tmp/tvdb_api--u1001-py3.sqlite:responses
2022-10-02 19:39:05,419 - requests_cache.backends.base - DEBUG - Initializing SQLiteDict with serializer: <requests_cache.serializers.pipeline.SerializerPipeline object at 0x802a1ebe0>
2022-10-02 19:39:05,419 - requests_cache.backends.sqlite - DEBUG - Opening connection to /tmp/tvdb_api--u1001-py3.sqlite:redirects
2022-10-02 19:39:05,419 - requests_cache.backends.base - INFO - Removing expired responses.
2022-10-02 19:39:05,419 - requests_cache.backends.base - DEBUG - Deleting 0 invalid/expired responses
2022-10-02 19:39:05,425 - requests_cache.backends.base - DEBUG - Deleting 0 expired responses
####################
# Processing file: star.trek.strange.new.world.s01e10.mkv
# Detected series: star trek strange new world (season: 1, episode: 10)
2022-10-02 19:39:05,431 - tvdb_api - DEBUG - Getting show star trek strange new world
2022-10-02 19:39:05,431 - tvdb_api - DEBUG - Searching for show star%20trek%20strange%20new%20world
2022-10-02 19:39:05,432 - tvdb_api - DEBUG - auth
Traceback (most recent call last):
File "/usr/local/bin/tvnamer", line 33, in <module>
sys.exit(load_entry_point('tvnamer==3.0.4', 'console_scripts', 'tvnamer')())
File "/usr/local/lib/python3.9/site-packages/tvnamer/main.py", line 474, in main
tvnamer(paths = sorted(args))
File "/usr/local/lib/python3.9/site-packages/tvnamer/main.py", line 370, in tvnamer
processFile(tvdb_instance, episode)
File "/usr/local/lib/python3.9/site-packages/tvnamer/main.py", line 175, in processFile
episode.populateFromTvdb(tvdb_instance, force_name=Config['force_name'], series_id=Config['series_id'])
File "/usr/local/lib/python3.9/site-packages/tvnamer/utils.py", line 641, in populateFromTvdb
show = tvdb_instance[force_name or self.seriesname]
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 1152, in __getitem__
sid = self._nameToSid(key)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 1136, in _nameToSid
selected_series = self._getSeries(name)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 935, in _getSeries
all_series = self.search(series)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 914, in search
series_resp = self._getetsrc(self.config['url_getSeries'] % (series))
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 874, in _getetsrc
src = self._loadUrl(url, language=language)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 811, in _loadUrl
self.authorize()
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 859, in authorize
r = self.session.post(
File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 635, in post
return self.request("POST", url, data=data, json=json, **kwargs)
File "/usr/local/lib/python3.9/site-packages/requests_cache/session.py", line 115, in request
return super().request(method, url, *args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.9/site-packages/requests_cache/session.py", line 127, in send
cache_key = self.cache.create_key(request, **kwargs)
TypeError: create_key() got an unexpected keyword argument 'timeout'
Thank you, I really appreciate the effort (and the tool btw ;-)
Georg
I think we are getting ahead, but not quite there yet. The maintainer of the tvdb_api port included your fix but now I am getting this error:
tvnamer star.trek.strange.new.world.s01e10.mkv
####################
# Starting tvnamer
# Found 1 episode
####################
# Processing file: star.trek.strange.new.world.s01e10.mkv
# Detected series: star trek strange new world (season: 1, episode: 10)
Traceback (most recent call last):
File "/usr/local/bin/tvnamer", line 33, in <module>
sys.exit(load_entry_point('tvnamer==3.0.4', 'console_scripts', 'tvnamer')())
File "/usr/local/lib/python3.9/site-packages/tvnamer/main.py", line 474, in main
tvnamer(paths = sorted(args))
File "/usr/local/lib/python3.9/site-packages/tvnamer/main.py", line 370, in tvnamer
processFile(tvdb_instance, episode)
File "/usr/local/lib/python3.9/site-packages/tvnamer/main.py", line 175, in processFile
episode.populateFromTvdb(tvdb_instance, force_name=Config['force_name'], series_id=Config['series_id'])
File "/usr/local/lib/python3.9/site-packages/tvnamer/utils.py", line 641, in populateFromTvdb
show = tvdb_instance[force_name or self.seriesname]
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 1152, in __getitem__
sid = self._nameToSid(key)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 1136, in _nameToSid
selected_series = self._getSeries(name)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 935, in _getSeries
all_series = self.search(series)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 914, in search
series_resp = self._getetsrc(self.config['url_getSeries'] % (series))
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 874, in _getetsrc
src = self._loadUrl(url, language=language)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 811, in _loadUrl
self.authorize()
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 859, in authorize
r = self.session.post(
File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 635, in post
return self.request("POST", url, data=data, json=json, **kwargs)
File "/usr/local/lib/python3.9/site-packages/requests_cache/session.py", line 115, in request
return super().request(method, url, *args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.9/site-packages/requests_cache/session.py", line 127, in send
cache_key = self.cache.create_key(request, **kwargs)
File "/usr/local/lib/python3.9/site-packages/tvdb_api.py", line 547, in create_key
if self._ignored_parameters:
AttributeError: 'SQLiteCache' object has no attribute '_ignored_parameters'
I am so sorry causing so much trouble, but I just can't give up now that we are about there :-)
Georg
I've created PR dbr/tvdb_api#105 that fixes the issues with new requests-cache.
I've created PR dbr/tvdb_api#105 that fixes the issues with new requests-cache.
Just installed on Debian 12 (bookworm) and applied the above fixes. Works perfectly with python 3.11, THANK YOU!!!
In Debian 12 i installed the pipx with apt and tvnamer with pipx, according to bellow code
sudo apt install pipx
pipx install tvnamer --include-deps
pipx ensurepath
Thanks!
Hi, I recently installed the latest python3.8 update (3.8.13) via pkg (FreeBSD).
Now I receive the following error with tvnamer:
tvnamer .
Unfortunately I am a Python illiterate. Is this a problem with tvnamer?
Many thanks
Georg