gvellut / jncep

Command-line tool to generate EPUB files for J-Novel Club pre-pub novels
GNU General Public License v3.0
43 stars 11 forks source link

Fetching newly released series returns NoneType error #22

Closed gyratory closed 2 years ago

gyratory commented 2 years ago

Greetings, I got the NoneType error for this series using version 36 and 37. The log for version 37 is as follows:

pipx install git+https://github.com/gvellut/jncep
  installed package jncep 37, installed using Python 3.10.5
  These apps are now globally available
    - jncep
done! ✨ 🌟 ✨

type jncep
jncep is hashed (/home/user/.local/bin/jncep)
ls ~/.local/bin/jncep
/home/user/.local/pipx/venvs/jncep/bin/jncep

source export.secret

jncep -d epub https://j-novel.club/series/dungeon-dive-aim-for-the-deepest-level
2022-07-01 17:32:50,316 jncep.utils  WARNING  Login with email '[highlight]xxx@xxx.xxx[/]'...
2022-07-01 17:32:50,912 jncep.utils  INFO     Logged in with email '[highlight]xxx@xxx.xxx[/]'
2022-07-01 17:32:50,912 jncep.utils  WARNING  ...
2022-07-01 17:32:50,913 jncep.utils  WARNING  Get content...
2022-07-01 17:32:50,913 jncep.jnclabs DEBUG    LABS /app/v1/series/dungeon-dive-aim-for-the-deepest-level skip=None
2022-07-01 17:32:51,033 jncep.jnclabs DEBUG    LABS /app/v1/series/62be480bd440cc5d411b50e8/volumes skip=0
2022-07-01 17:32:51,169 jncep.jnclabs DEBUG    LABS /app/v1/volumes/62be4a28ef962bc2552f76aa/parts skip=0
2022-07-01 17:32:51,372 jncep.utils  INFO     Logout...
2022-07-01 17:32:51,503 jncep.utils  ERROR    *** An unrecoverable error occured ***
2022-07-01 17:32:51,503 jncep.utils  ERROR    Parser must be a string or character stream, not NoneType
2022-07-01 17:32:51,506 jncep.cli    DEBUG    Traceback (most recent call last):
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/jncep/cli/base.py", line 17, in invoke
    return super().invoke(ctx)
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/jncep/trio_utils.py", line 31, in wrapper
    return trio.run(partial(f, *args, **kwargs))
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/trio/_core/_run.py", line 1932, in run
    raise runner.main_task_outcome.error
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/jncep/cli/epub.py", line 95, in generate_epub
    ) = core.relevant_volumes_and_parts_for_content(series_meta, part_filter)
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/jncep/core.py", line 721, in relevant_volumes_and_parts_for_content
    if part_filter(part):
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/jncep/cli/epub.py", line 85, in part_filter
    if core.is_part_available(session.now, part):
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/jncep/core.py", line 491, in is_part_available
    expiration_data = dateutil.parser.parse(part.raw_data.expiration)
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/dateutil/parser/_parser.py", line 1374, in parse
    return DEFAULTPARSER.parse(timestr, **kwargs)
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/dateutil/parser/_parser.py", line 646, in parse
    res, skipped_tokens = self._parse(timestr, **kwargs)
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/dateutil/parser/_parser.py", line 725, in _parse
    l = _timelex.split(timestr)         # Splits the timestr into tokens
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/dateutil/parser/_parser.py", line 207, in split
    return list(cls(s))
   File "/home/user/.local/pipx/venvs/jncep/lib/python3.10/site-packages/dateutil/parser/_parser.py", line 75, in __init__
    raise TypeError('Parser must be a string or character stream, not '
 TypeError: Parser must be a string or character stream, not NoneType
gvellut commented 2 years ago

Thank you for your feedback.

One of the fields returned from the API is not filled as it usually is for some parts in this series. I will make a correction soon.