def get_external_base_image(self, image, stack=None):
        if stack is None:
            stack = list()
        mydef = self.ymldefs[image]
        if image in stack:
            stack.append(image)
            raise errors.CircularDependencyError('Circular dependency found:\n' + '->'.join(stack))
        stack.append(image)
        if 'FROM' in mydef and 'FROM_DOCKERFILE' in mydef:
            raise errors.MultipleBaseError(
                    'ERROR: Image "%s" has both a "FROM" and a "FROM_DOCKERFILE" field.' % image +
                    '       It should have at most ONE of these fields.')
        if 'FROM' in mydef:
            externalbase = mydef['FROM']
        elif 'FROM_DOCKERFILE' in mydef:
            path = mydef['FROM_DOCKERFILE']
            if path not in self._external_dockerfiles:
                self._external_dockerfiles[path] = ExternalDockerfile(path)
            externalbase = self._external_dockerfiles[path]
        else:
            externalbase = None
        requires = mydef.get('requires', [])
        if not isinstance(requires, list):
            raise errors.InvalidRequiresList('Requirements for image "%s" are not a list' % image)
        for base in requires:
            try:
                otherexternal = self.get_external_base_image(base, stack)
            except ValueError:
                continue
            if externalbase is None:
                externalbase = otherexternal
            elif otherexternal is None:
                continue
            elif externalbase != otherexternal:
                raise errors.ConflictingBaseError(
                        'Multiple external dependencies: definition "%s" depends on:\n' % image +
                        '  %s (FROM: %s), and\n' % (image, externalbase) +
                        '  %s (FROM: %s).' % (base, otherexternal))
        assert stack.pop() == image
        return externalbase