그래서, 이것은 뾰족하다. 나는 루이지 (luigi)와 시실리 (sciluigi)와 함께 일하고 있습니다.거짓말 isinstance
isinstance
검사는 sciluigi 패키지에, 나는 오히려 그 다음이 작은 문제 :
간단히 말하자면 위해 전체 sciluigi을 분기 할 클루 것, 나는 패키지의 클래스 중 하나를 (서브 클래스했다 luigi.LocalTarget) - 추가 기능을 추가합니다. ... isinstance
라인 만 'TargetInfo'개체를 확인하도록 설정되어 있기 때문에 실행이 단순히 실패합니다
sciluigi.dependencies.DependencyHelpers._parse_outputitem()
을 ... 그 기능이 잘 작동하지만, sciluigi 패키지의 개체 확인이있다 .
난 그냥 그렇게는 TargetInfo
개체로보고하고 전달 isinstance
에 '거짓말'내 자식 클래스에게하면된다 싶습니다 무엇 :
용서는 사전에 질문 D : D
def _parse_outputitem(self, val, targets):
'''
Recursively loop through lists of TargetInfos, or
callables returning TargetInfos, or lists of ...
(repeat recursively) ... and return all targets.
'''
if callable(val):
val = val()
if isinstance(val, TargetInfo):
targets.append(val.target)
elif isinstance(val, list):
for valitem in val:
targets = self._parse_outputitem(valitem, targets)
elif isinstance(val, dict):
for _, valitem in iteritems(val):
targets = self._parse_outputitem(valitem, targets)
else:
raise Exception('Input item is neither callable, TargetInfo, nor list: %s' % val)
return targets
오류 메시지 :
가2017-04-06 22:26:09,753 - PipeineTest1 - DEBUG - RunSubprocess:Traceback (most recent call last):
2017-04-06 22:26:09,754 - PipeineTest1 - DEBUG - RunSubprocess: File "/Library/Python/2.7/site-packages/luigi/worker.py", line 305, in check_complete
2017-04-06 22:26:09,754 - PipeineTest1 - DEBUG - RunSubprocess: is_complete = task.complete()
2017-04-06 22:26:09,754 - PipeineTest1 - DEBUG - RunSubprocess: File "/Library/Python/2.7/site-packages/luigi/task.py", line 482, in complete
2017-04-06 22:26:09,754 - PipeineTest1 - DEBUG - RunSubprocess: outputs = flatten(self.output())
2017-04-06 22:26:09,754 - PipeineTest1 - DEBUG - RunSubprocess: File "/Library/Python/2.7/site-packages/sciluigi/dependencies.py", line 99, in output
2017-04-06 22:26:09,754 - PipeineTest1 - DEBUG - RunSubprocess: return self._output_targets()
2017-04-06 22:26:09,755 - PipeineTest1 - DEBUG - RunSubprocess: File "/Library/Python/2.7/site-packages/sciluigi/dependencies.py", line 111, in _output_targets
2017-04-06 22:26:09,755 - PipeineTest1 - DEBUG - RunSubprocess: output_targets = self._parse_outputitem(attrval, output_targets)
2017-04-06 22:26:09,755 - PipeineTest1 - DEBUG - RunSubprocess: File "/Library/Python/2.7/site-packages/sciluigi/dependencies.py", line 132, in _parse_outputitem
2017-04-06 22:26:09,755 - PipeineTest1 - DEBUG - RunSubprocess: raise Exception('Input item is neither callable, TargetInfo, nor list: %s' % val)
2017-04-06 22:26:09,755 - PipeineTest1 - DEBUG - RunSubprocess:Exception: Input item is neither callable, TargetInfo, nor list: <Bioproximity.common.luigi_extensions.local_target.ToppasLocalTarget object at 0x110e48190>
... 불행히도 Sciluigi 출력으로 제공하는 추적 오차의 100 % 이잖아. 당신이 당신의 객체가 isinstance
검사를 통과 할 정도로 TargetInfo
를 서브 클래 싱 할 필요가 같은
는 sciluigi.dependencies.TargetInfo (개체)
class TargetInfo(object):
'''
Class to be used for sending specification of which target, from which
task, to use, when stitching workflow tasks' outputs and inputs together.
'''
task = None
path = None
target = None
def __init__(self, task, path, format=None, is_tmp=False):
self.task = task
self.path = path
self.target = luigi.LocalTarget(path, format, is_tmp)
def open(self, *args, **kwargs):
'''
Forward open method, from luigi's target class
'''
return self.target.open(*args, **kwargs)
# ==============================================================================
그 단계를 생략 한 자체 구현으로 '_parse_outputitem'을 monkeypatch 할 수 없습니까? – karlson
실제로 문제가있는 코드는 표시하지 않았습니다. [MCVE] (http://stackoverflow.com/help/mcve)를 만들고 실제 오류에 대한 세부 정보, 추적 코드 등을 제공하도록 노력하십시오. –
@Karlson - 저는 monkeypatch 할 수 있지만, 우리는 sciluigi의 사용자 정의 구현을 가지고 있습니다. 나는 피하려고 노력하고있어. – RightmireM