Commit Graph

64 Commits

Author SHA1 Message Date
Merlijn Wajer
e7767694af Rip out all code that directly uses gstreamer
We can now rip CDs without gstreamer.

This is not the most clean attempt, but I have tried to remove most of the
code that depends on gstreamer. I hope there is not a lot of code left that
depends on code that I have removed - I can at least rip a CD fully.
2017-02-09 23:05:34 +01:00
Samantha Baldwin
d1ed80d62a argparse & logging (#92)
* introduce logcommand.Lager, Whipper(); use argparse for whipper image commands, stub logging

* update Lager docstring to mention config.Config()

* make incorrect subcommand and --version work on toplevel command

* migrate accurip show, expand Lager, do not attempt to return from Lager.__init__.

* migrate offset find, add Lager.error

* correct offset find drive symlink handling

* migrate drive

* change Lager.__init__(prog) to arg from kwarg

* but actually

* remove Whipper.usage

* add and use Lager.device_option() context manager

* help I married an axe murderer

* use unified options namespace for entire command tree

* migrate whipper cd without comprehensive config loading

* switch to logging module

- use logging instead of flog for non-extern modules
- use WHIPPER_DEBUG and WHIPPER_LOGFILE env variables

* convert self.log calls to logger.debug

* convert self.error calls to logger.error

* remove log.Loggable, use logger not logging

* Logging conversion continues

- Convert log.* calls to logger.*
- Remove morituri.common.log imports

* remove morituri.common.log from tests

* remove extern/flog, bare minimum Debug conversion

* update README for logging changes

* update soxi to use logging

* refactor Lager for more declarative subcommands

* Refactor Lager.device_option:

- inline into __init__
- throw IOError instead of Exception for missing drives
- remove CommandError checking in rip/main

* rename rip to whipper in rip.main

* convert rip.debug commands

* Rename logcommand.Lager to command.BaseCommand

- remove command.CommandError occurrences
- remove python-command external module

* remove submodules from README, update rclog formatter

* update minor ambiguity in readme for command invocation

* update version number to match setup.py

* remove gitmodules

* update version number in tests as well (boo)

* convert logger.error to logger.critical

* Change morituri.rip to morituri.command

- mv common.command to command.basecommand
- move TEMPLATES used only by rip.cd out of rip.common
- update entry point for command to command.main

* update basecommand documentation

* go pyflaking: import fixing

* replace self.stdout with sys.stdout

* remove BaseCommand.config, alphabetise imports

* convert self.stdXXX leftovers

* convert last getRootCommand to config.Config

* convert last getExceptionMessage's to str

* change musicbrainz useragent to whipper
2016-12-20 23:11:30 +01:00
Thomas Vander Stichele
43963a0050 log all tasks 2012-12-06 16:58:44 +00:00
Thomas Vander Stichele
cec7f71502 * morituri/common/task.py:
Failed and done can stay unimplemented.
	  If we read stdout or stderr, reschedule immediately to process
	  all output before considering the possibility the program stopped.
2012-12-04 00:13:25 +00:00
Thomas Vander Stichele
b8fd3f2931 * morituri/common/task.py:
* morituri/program/cdrdao.py:
	  Factor out a PopenTask base class.
2012-12-03 22:58:22 +00:00
Thomas Vander Stichele
0fab4515c6 pep8 fixes 2012-11-11 23:00:37 +00:00
Thomas Vander Stichele
97101ec972 add new file 2012-07-12 09:38:59 +00:00
Thomas Vander Stichele
798a209195 * morituri/extern/task (added):
* morituri/extern/task/taskgtk.py (added):
	* morituri/extern/task/gstreamer.py (added):
	* morituri/extern/task/task.py (added):
	* morituri/common/taskgtk.py (deleted):
	* morituri/common/gstreamer.py (deleted):
	* morituri/common/task.py (deleted):
	  Move task-related modules into an extern directory so other
	  projects can use them.
	* morituri/common/checksum.py:
	* morituri/common/encode.py:
	* morituri/image/image.py:
	* morituri/program/cdparanoia.py:
	* morituri/program/cdrdao.py:
	* morituri/rip/cd.py:
	* morituri/rip/debug.py:
	* morituri/rip/image.py:
	* morituri/rip/main.py:
	* morituri/rip/offset.py:
	* morituri/test/test_common_checksum.py:
	* morituri/test/test_common_encode.py:
	* morituri/test/test_image_image.py:
	  Adapt.  Tests work.
2011-08-05 18:50:51 +00:00
Thomas Vander Stichele
5f8e0a5cc4 * morituri/common/task.py:
Log which task we are notifying progress on.
	* morituri/common/program.py:
	  Solve a problem where a release does not have an .id,
	  which means it's only half in musicbrainz (artist
	  and title, but no URL to the disc)
2011-07-09 10:06:56 +00:00
Thomas Vander Stichele
4c81edf912 * morituri/common/task.py:
Show us when we stop twice.
	* morituri/common/gstreamer.py:
	  Stop on Exceptions.
2011-05-24 15:16:39 +00:00
Thomas Vander Stichele
b540b10c33 * morituri/common/task.py:
More exception handling and debug.
2011-05-24 13:21:51 +00:00
Thomas Vander Stichele
8bc5eff73c * morituri/common/task.py:
add task argument to TaskRunner.schedule so we can get exceptions.
	  Add .schedule method to Task to pass self.
	* morituri/common/checksum.py:
	* morituri/common/encode.py:
	* morituri/common/gstreamer.py:
	* morituri/program/cdparanoia.py:
	* morituri/program/cdrdao.py:
	  Adapt.
2011-05-24 12:51:40 +00:00
Thomas Vander Stichele
4454abcc85 comment 2011-05-24 10:42:45 +00:00
Thomas Vander Stichele
114fb827cc * morituri/common/task.py:
Document and change name of a method.
2011-05-24 10:39:02 +00:00
Thomas Vander Stichele
c5593a4070 add exception to debug 2011-05-23 18:26:56 +00:00
Thomas Vander Stichele
0da5dd0aa1 * morituri/common/checksum.py:
Actually raise the exception.
	* morituri/common/task.py:
	  Document interface more clearly.
	* morituri/test/test_common_checksum.py:
	  Use tcommon for test.common
2011-05-21 11:22:04 +00:00
Thomas Vander Stichele
9fe80e238e * morituri/common/task.py:
Add more debug.
2011-05-19 00:27:20 +00:00
Thomas Vander Stichele
d0c87c3861 add doc 2011-03-15 22:41:08 +00:00
Thomas Vander Stichele
babf47ec1d * morituri/common/task.py:
Add exception traceback for easier debugging.
2010-06-18 21:52:20 +00:00
Thomas Vander Stichele
7515cf9e73 * morituri/common/checksum.py:
Style fixes.
	* morituri/common/common.py:
	  Add functions to convert a gst.TagList to a dict and compare them.
	* morituri/common/task.py:
	  Add setAndRaiseException which gives us an appropriate
	  exceptionMessage as if we raised where we called this new function.
2010-04-13 21:53:43 +00:00
Thomas Vander Stichele
f978907fcf * morituri/common/task.py:
* morituri/image/cue.py:
	  Add logCategory.
	* morituri/image/image.py:
	  If subtasks had an exception, retrigger the exception and stop.
2010-04-05 23:31:34 +00:00
Thomas Vander Stichele
8ea1dc025d * morituri/image/image.py:
Fix AudioLengthTask for the case where we don't have the decoder,
	  by instead of doing get_state, waiting for an ASYNC_DONE or ERROR
	  message.  Properly raise a gst.GError in that case.
	* morituri/common/task.py:
	  Add some debug.
	* morituri/test/test_image_image.py:
	  After this fix, we now catch the TYPE_NOT_FOUND because of an
	  empty stream instead of the later gst.QueryError.
	* morituri/test/test_common_encode.py:
	  Let us know what it is if not a gst.QueryError.
2010-04-05 23:20:40 +00:00
Thomas Vander Stichele
6ae35a7a08 * morituri/common/task.py:
Wrap exceptions during tasks in a TaskException, storing the
	  message, for improved error reporting later on.
2010-04-04 23:10:44 +00:00
Thomas Vander Stichele
757c3aba15 * morituri/common/task.py:
Add exceptionMessage on Task to store the result of
	  log.getExceptionMessage when the stack is still valid.
2009-10-16 21:39:19 +00:00
Thomas Vander Stichele
d30eb59a66 * morituri/program/cdrdao.py:
Wrap read in an exception handler.
	* morituri/common/task.py:
	  Debug exceptions more.
2009-09-11 15:41:51 +00:00
Thomas Vander Stichele
ac9d8f194d * morituri/common/task.py:
Make SyncRunner wrap start() so we correctly handle any
	  exception being thrown.
2009-09-11 12:08:02 +00:00
Thomas Vander Stichele
b9bc3ba154 * morituri/common/task.py:
Document better.
	  Create an ITaskListener interface where we can document.
	  Log some more.
2009-07-02 20:34:50 +00:00
Thomas Vander Stichele
05dfeaa3a2 * morituri/common/task.py:
Add debug.
	* morituri/rip/drive.py:
	  Show all drives, not just the ones that happen to have an Audio CD
	  inserted.
2009-05-26 21:30:49 +00:00
Thomas Vander Stichele
ed7d5cedad * morituri/common/task.py:
Add documentation.
	  Use a _task counter instead of duplicating tasks to
	  __tasks; this allows us to add tasks after starting.
	  Catch Exceptions during next() so that we don't get
	  stuck in a main loop that doesn't exit.
	  Raise it later when we're done.
2009-05-25 14:51:00 +00:00
Thomas Vander Stichele
0431cbe148 add a debug line 2009-05-16 07:31:57 +00:00
Thomas Vander Stichele
36729a4bef * morituri/common/task.py:
Log on runners too.
	* morituri/program/cdrdao.py:
	  Abort if output has ERROR by killing and setting an exception.
2009-05-07 15:05:14 +00:00
Thomas Vander Stichele
e5ad3bde58 * morituri/common/task.py:
* morituri/image/image.py:
	  Remove prints.  Describe tasks.
2009-05-07 11:11:22 +00:00
Thomas Vander Stichele
c06814e139 * morituri/common/task.py:
Add an exception ivar for tasks to set an exception on while
	  running.  Make SyncRunner raise it during done()
	* morituri/program/cdparanoia.py:
	  Set an exception if the ripped file doesn't match the expected size
	  (for example when disc is full)
2009-05-07 09:19:41 +00:00
Thomas Vander Stichele
d7f1f0a87a * morituri/common/task.py:
Distinguish more clearly between MultiSeparateTask and
	  MultiCombinedTask.
2009-05-03 20:25:28 +00:00
Thomas Vander Stichele
836a3beea1 * morituri/common/task.py:
Make SyncRunner clear previous description/progress task by
	  tracking longest output given up to now.
2009-05-03 18:07:22 +00:00
Thomas Vander Stichele
d1c3bb3def * morituri/program/cdparanoia.py:
Add a task to read and verify a track.
	* examples/readtrack.py:
	  Use it to clean up code.
	* morituri/common/task.py:
	  describe a MultiTask better.
2009-05-03 17:44:23 +00:00
Thomas Vander Stichele
fc907f1953 * morituri/common/task.py:
* morituri/common/taskgtk.py:
	  Split off GtkProgressRunner in separate module to not import gtk
	  everywhere.
	* examples/ARcalibrate.py:
	* examples/ARcue.py:
	* examples/gtkchecksum.py:
	* examples/trm.py:
	  Adapt.
2009-05-03 10:20:22 +00:00
Thomas Vander Stichele
1529c2a082 change progress notify to log 2009-05-03 09:54:21 +00:00
Thomas Vander Stichele
076644b879 * morituri/common/task.py:
* morituri/image/image.py:
	  Add some debugging.
2009-05-02 09:27:14 +00:00
Thomas Vander Stichele
4367038f6c * morituri/common/task.py:
Make task subclass log.Log
2009-05-01 08:13:51 +00:00
Thomas Vander Stichele
837005d565 * morituri/common/task.py:
Allow a SyncRunner to be constructed with verbose too.
	  Separate a 'running' verbose mode from that.
	  Fixes unwanted test output.
	* morituri/test/test_image_image.py:
	  Run without verbosity.
2009-04-25 10:02:51 +00:00
Thomas Vander Stichele
a9ec95e56d * morituri/common/task.py:
Add a 'described' method so listeners can get proper notification
	  of description changes, and update their description in between
	  progress changes.
	  Add a MultiCombinedTask that reports on progress over all tasks
	  combined.
	* examples/trm.py:
	  Add a playlist option to the example.  Still needs to store results
	  to pickles, preferably after each completed task.
	* morituri/common/checksum.py:
	  Add audioconvert to make sure we can trm ogg files.
2009-04-20 22:20:07 +00:00
Thomas Vander Stichele
18fcc1b813 * morituri/common/task.py:
* morituri/image/image.py:
	  Move MultiTask to the task module.
2009-04-20 21:34:51 +00:00
Thomas Vander Stichele
9905dbad75 * morituri/common/task.py:
Add a __main__ example using DummyTask.
2009-04-19 22:01:39 +00:00
Thomas Vander Stichele
cfeedbca3c * morituri/common/task.py:
Make sure we also show progress when it's 0%, at the start.
2009-04-19 21:48:23 +00:00
Thomas Vander Stichele
b7eb47325e * morituri/common/task.py:
Schedule the start from the main loop, otherwise the
	  task might complete before we're in the main loop,
	  and then the loop.quit() doesn't work.
2009-04-12 10:18:56 +00:00
Thomas Vander Stichele
d47402af60 * examples/gtkcrc.py:
* morituri/common/task.py:
	  Move the gtk-based progress bar to task.
2009-04-12 08:58:36 +00:00
Thomas Vander Stichele
f1d75142da * examples/gtkcrc.py:
* morituri/common/crc.py:
	* morituri/common/task.py:
	* morituri/image/image.py:
	  Add a 'schedule' call to the TaskRunner class, so that we can
	  abstract things like gobject.timeout_add and reactor.callLater
	  Pass the runner to the task in Task.start() so a task can call
	  schedule.
2009-04-12 08:51:13 +00:00
Thomas Vander Stichele
10647d18a1 * morituri/common/task.py:
Update the docs.
2009-04-12 08:34:44 +00:00
Thomas Vander Stichele
6804df4b73 * morituri/common/task.py:
clear with whitespace.
2009-04-11 21:57:25 +00:00