diff --git a/bonobo/__init__.py b/bonobo/__init__.py index 704c9ef..2a9515f 100644 --- a/bonobo/__init__.py +++ b/bonobo/__init__.py @@ -9,9 +9,12 @@ import sys assert (sys.version_info >= (3, 5)), 'Python 3.5+ is required to use Bonobo.' -from bonobo._api import * -from bonobo._api import __all__ -from bonobo._api import __doc__ +from bonobo._api import ( + run, inspect, Graph, create_strategy, open_fs, CsvReader, CsvWriter, FileReader, FileWriter, Filter, FixedWindow, + Format, JsonReader, JsonWriter, LdjsonReader, LdjsonWriter, Limit, OrderFields, PickleReader, PickleWriter, + PrettyPrinter, RateLimited, Rename, SetFields, Tee, UnpackItems, count, identity, noop, create_reader, + create_writer, get_examples_path, open_examples_fs, get_argument_parser, parse_args, __all__, __doc__ +) from bonobo._version import __version__ __all__ = ['__version__'] + __all__ diff --git a/bonobo/_api.py b/bonobo/_api.py index 5d38224..5f08ae3 100644 --- a/bonobo/_api.py +++ b/bonobo/_api.py @@ -8,11 +8,12 @@ to another is maximal. """ from bonobo.execution.strategies import create_strategy -from bonobo.nodes import __all__ as _all_nodes from bonobo.nodes import * +from bonobo.nodes import __all__ as _all_nodes from bonobo.structs import Graph from bonobo.util.api import ApiHelper from bonobo.util.environ import parse_args, get_argument_parser +from bonobo.registry import create_reader, create_writer __all__ = [] @@ -155,6 +156,12 @@ api.register_group( check=_all_nodes, ) +# registry +api.register_group( + create_reader, + create_writer, +) + def _is_interactive_console(): import sys diff --git a/bonobo/registry.py b/bonobo/registry.py index be8d47b..fba0c53 100644 --- a/bonobo/registry.py +++ b/bonobo/registry.py @@ -2,7 +2,7 @@ import mimetypes import os -from bonobo import JsonReader, CsvReader, PickleReader, FileReader, FileWriter, PickleWriter, CsvWriter, JsonWriter +from bonobo.nodes import JsonReader, CsvReader, PickleReader, FileReader, FileWriter, PickleWriter, CsvWriter, JsonWriter FILETYPE_CSV = 'text/csv' FILETYPE_JSON = 'application/json' @@ -88,3 +88,31 @@ class Registry: default_registry = Registry() + +def create_reader(name, *args, format=None, registry=default_registry, **kwargs): + """ + Create a reader instance, guessing its factory using filename (and eventually format). + + :param name: + :param args: + :param format: + :param registry: + :param kwargs: + + :return: mixed + """ + return registry.get_reader_factory_for(name, format=format)(name, *args, **kwargs) + +def create_writer(name, *args, format=None, registry=default_registry, **kwargs): + """ + Create a writer instance, guessing its factory using filename (and eventually format). + + :param name: + :param args: + :param format: + :param registry: + :param kwargs: + + :return: mixed + """ + return registry.get_writer_factory_for(name, format=format)(name, *args, **kwargs)