binarymatt / pyres

a resque clone in python
http://github.com/binarydud/pyres
MIT License
955 stars 130 forks source link

ImportError for classes enqueued from the same file they are defined in #61

Open lost-theory opened 13 years ago

lost-theory commented 13 years ago

Got tripped up by this when first testing pyres:

https://gist.github.com/910835/a455b67f4b049535efea8ab2d5a8b1f5d8c2af40

If I try to execute this job I get an ImportError, because the worker can't import __main__.Adder:

Traceback (most recent call last):
  File ".../pyres/worker.py", line 201, in process
    return job.perform()
  File ".../pyres/job.py", line 56, in perform
    payload_class = self.safe_str_to_class(payload_class_str)
  File ".../pyres/__init__.py", line 49, in safe_str_to_class
    raise ImportError('')
ImportError

Some ideas:

  1. In the enqueue, detect __main__ in class names and raise an exception (and add this info to the docs)
  2. Resolve the correct name (using inspect? inspect.getmodulename(inspect.getfile(klass)) ?)
  3. Add an option to enqueue to specify the name of the class to import
lost-theory commented 13 years ago

Oh I see there's an enqueue_from_string... ignore option 3.

binarymatt commented 13 years ago

i'll see if I can write up a testcase for this, then work on a fix.