Helper method provided because we actually can't put that in the constructor, it creates a bug in Nose tests
        https://github.com/nose-devs/nose/issues/725

        :param obj:
        :param obj_type:
        :param extensions_supported:
        :return:

def create(obj: PersistedObject, obj_type: Type[T], extensions_supported: Iterable[str]):
        """
        Helper method provided because we actually can't put that in the constructor, it creates a bug in Nose tests
        https://github.com/nose-devs/nose/issues/725

        :param obj:
        :param obj_type:
        :param extensions_supported:
        :return:
        """

        # base message
        msg = "{obj} cannot be parsed as a {typ} because no parser supporting that extension ({ext}) is able to " \
              "create this type of object." \
              "".format(obj=obj, typ=get_pretty_type_str(obj_type), ext=obj.get_pretty_file_ext())

        # add details
        if extensions_supported is not None and len(extensions_supported) > 0:
            msg += " If you wish to parse this fileobject to that precise type, you may wish to either " \
                   "(1) replace the file with any of the following extensions currently supported : {exts} " \
                   "(see get_capabilities_for_type({typ}, strict_type_matching=False) for details)." \
                   " Or (2) register a new parser." \
                   "".format(exts=extensions_supported, typ=get_pretty_type_str(obj_type))
        else:
            raise ValueError('extensions_supported should be provided to create a NoParserFoundForObjectExt. If no '
                             'extension is supported, use NoParserFoundForObjectType.create instead')

        e = NoParserFoundForObjectExt(msg)

        # save the extensions supported
        e.extensions_supported = extensions_supported

        return e