# Source code for fred

    from fred.clients.categories import CategoriesClient
    from fred.clients.releases import ReleasesClient
    from fred.clients.tags import TagsClient
    from fred.clients.sources import SourcesClient
    from fred.clients.eseries import ESeriesClient
    import fred.config as c
    import weakref

    ## Establish Federal Reserve Economic Data (Fred) wrapper for Python
    class Fred(object):
        """
        Fred client. Provides a straightforward mapping from Python to FRED REST endpoints.
        The instance has attributes ``cateogry``, ``release``, ``series``, ``tag``
        and ``source`` that provide access to instances of
        :class:`fred.clients.categories.CategoriesClient`,
        :class:`fred.clients.releases.ReleasesClient`,
        :class:`fred.clients.eseries.ESeriesClient`,
        :class:`fred.clients.tags.TagsClient` and
        :class:`fred.clients.sources.SourcesClient` respectively. This is the
        preferred (and only supported) way to get access to those classes and their
        methods.

        :arg str api_key: 32 character alpha-numeric lowercase string. Required.
        :arg str realtime_start: The start of the real-time period. Format "YYYY-MM-DD"
        :arg str realtime_end: The end of the real-time period. Format "YYYY-MM-DD"
        """
        def __init__(self,api_key=c.api_key,response_type=c.response_type):
            ## Set root URL
            self.url_root = 'https://api.stlouisfed.org/fred'
            ## Set default API key
            self.api_key = api_key if api_key else None
            ## Set default file type
            self.response_type = response_type if response_type else None
            ## Initiate clients
            self.category = CategoriesClient(weakref.proxy(self),self.api_key,self.url_root,self.response_type)
            self.release = ReleasesClient(weakref.proxy(self),self.api_key,self.url_root,self.response_type)
            self.series = ESeriesClient(weakref.proxy(self),self.api_key,self.url_root,self.response_type)
            self.tag = TagsClient(weakref.proxy(self),self.api_key,self.url_root,self.response_type)
            self.source = SourcesClient(weakref.proxy(self),self.api_key,self.url_root,self.response_type)