# Path: brewery/nodes/base.py
# def node_dictionary():
#     """Return a dictionary containing node name as key and node class as
#     value. This will be depreciated soon in favour of
#     :func:`node_catalogue()`"""
# 
#     classes = node_subclasses(Node)
#     dictionary = {}
# 
#     for c in classes:
#         try:
#             name = c.identifier()
#             dictionary[name] = c
#         except AttributeError:
#             # If node does not provide identifier, we consider it to be
#             # private or abstract class
#             pass
# 
#     return dictionary
# 
# class TargetNode(Node):
#     """Abstract class for all target nodes
# 
#     .. abstract_node
# 
#     """
#     def __init__(self):
#         super(TargetNode, self).__init__()
#         self.fields = None
# 
#     @property
#     def output_fields(self):
#         raise RuntimeError("Output fields asked from a target object.")
# 
#     def add_output(self, pipe):
#         raise RuntimeError("Should not add output pipe to a target node")
# 
# class NodeFinished(Exception):
#     """Exception raised when node has no active outputs - each output node signalised that it
#     requires no more data."""
#     pass
# 
# Path: brewery/utils.py
# def get_logger():
#     """Get brewery default logger"""
#     global logger
#     
#     if logger:
#         return logger
#     else:
#         return create_logger()


import threading
import sys
from brewery.nodes.base import node_dictionary, TargetNode, NodeFinished
from brewery.utils import get_logger
from brewery.nodes import *
from brewery.common import *
from .graph import *

        Fork responds to node names as functions. The function arguments are the same as node
        constructor (__init__ method) arguments. Each call will append new node to the fork and
        will connect the new node to the previous node in the fork.

        To configure current node you can use ``fork.node``, like::

            fork.csv_source("fork.csv")
            fork.node.read_header = True

        To set actual node name use ``set_name()``::

            fork.csv_source("fork.csv")
            fork.set_name("source")

            ...

            source_node = stream.node("source")

        To fork a fork, just call ``fork()``
        """

        return _StreamFork(self)

    def update(self, nodes = None, connections = None):
        """Adds nodes and connections specified in the dictionary. Dictionary might contain
        node names instead of real classes. You can use this method for creating stream
        from a dictionary that was created from a JSON file, for example.
        """


# Path: brewery/nodes/base.py
# def node_dictionary():
#     """Return a dictionary containing node name as key and node class as
#     value. This will be depreciated soon in favour of
#     :func:`node_catalogue()`"""
# 
#     classes = node_subclasses(Node)
#     dictionary = {}
# 
#     for c in classes:
#         try:
#             name = c.identifier()
#             dictionary[name] = c
#         except AttributeError:
#             # If node does not provide identifier, we consider it to be
#             # private or abstract class
#             pass
# 
#     return dictionary
# 
# class TargetNode(Node):
#     """Abstract class for all target nodes
# 
#     .. abstract_node
# 
#     """
#     def __init__(self):
#         super(TargetNode, self).__init__()
#         self.fields = None
# 
#     @property
#     def output_fields(self):
#         raise RuntimeError("Output fields asked from a target object.")
# 
#     def add_output(self, pipe):
#         raise RuntimeError("Should not add output pipe to a target node")
# 
# class NodeFinished(Exception):
#     """Exception raised when node has no active outputs - each output node signalised that it
#     requires no more data."""
#     pass
# 
# Path: brewery/utils.py
# def get_logger():
#     """Get brewery default logger"""
#     global logger
#     
#     if logger:
#         return logger
#     else:
#         return create_logger()


# Path: brewery/streams.py
import threading
import sys
from brewery.nodes.base import node_dictionary, TargetNode, NodeFinished
from brewery.utils import get_logger
from brewery.nodes import *
from brewery.common import *
from .graph import *


        Fork responds to node names as functions. The function arguments are the same as node
        constructor (__init__ method) arguments. Each call will append new node to the fork and
        will connect the new node to the previous node in the fork.

        To configure current node you can use ``fork.node``, like::

            fork.csv_source("fork.csv")
            fork.node.read_header = True

        To set actual node name use ``set_name()``::

            fork.csv_source("fork.csv")
            fork.set_name("source")

            ...

            source_node = stream.node("source")

        To fork a fork, just call ``fork()``
        """

        return _StreamFork(self)

    def update(self, nodes = None, connections = None):
        """Adds nodes and connections specified in the dictionary. Dictionary might contain
        node names instead of real classes. You can use this method for creating stream
        from a dictionary that was created from a JSON file, for example.
        """


        node_dict = node_dictionary()