pimutils / todoman

✅ A simple, standards-based, cli todo (aka: task) manager.
https://todoman.readthedocs.io
ISC License
486 stars 80 forks source link

crash when creating new todo and reading description from stdin #548

Closed craftyguy closed 6 months ago

craftyguy commented 7 months ago

todoman 4.4.0 on Alpine Linux edge w/ python 3.11.8 crashes when sending a description over stdin and using new -r / --read-description:

$ echo foo | todo new -r
Traceback (most recent call last):
  File "/usr/bin/todo", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/usr/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/todoman/cli.py", line 200, in command_wrap
    return command(*a, **kw)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/click/decorators.py", line 92, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/todoman/cli.py", line 41, in wrapper
    return f(*a, **kw)
           ^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/todoman/cli.py", line 390, in new
    ui.edit()
  File "/usr/lib/python3.11/site-packages/todoman/interactive.py", line 142, in edit
    self._loop.run()
  File "/usr/lib/python3.11/site-packages/urwid/event_loop/main_loop.py", line 323, in run
    self._run()
  File "/usr/lib/python3.11/site-packages/urwid/event_loop/main_loop.py", line 423, in _run
    self.event_loop.run()
  File "/usr/lib/python3.11/site-packages/urwid/event_loop/select_loop.py", line 152, in run
    self._loop()
  File "/usr/lib/python3.11/site-packages/urwid/event_loop/select_loop.py", line 192, in _loop
    self._watch_files[fd]()
  File "/usr/lib/python3.11/site-packages/urwid/raw_display.py", line 467, in wrapper
    return self.parse_input(event_loop, callback, self.get_available_raw_input())
                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/urwid/raw_display.py", line 501, in get_available_raw_input
    codes = self._get_gpm_codes() + self._get_keyboard_codes()
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/urwid/raw_display.py", line 575, in _get_keyboard_codes
    code = self._getch_nodelay()
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/urwid/raw_display.py", line 714, in _getch_nodelay
    return self._getch(0)
           ^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/urwid/raw_display.py", line 620, in _getch
    return ord(os.read(fd, 1))
           ^^^^^^^^^^^^^^^^^^^
TypeError: ord() expected a character, but string of length 0 found

Am I doing this incorrectly?

WhyNotHugo commented 6 months ago

Works for me:

> cat test.txt
hola mundo
> todo new test -r < test.txt
[ ] 678  in a day test @todo

Description: hola mundo
> todo --version
todoman, version 4.4.0
> python --version
Python 3.11.8
craftyguy commented 6 months ago

ahhh, it's because I omitted the "summary"... i.e. I was doing todo new -r and you did todo new <summary> -r