from github2.request import GithubRequest
from github2.issues import Issues
from github2.repositories import Repositories
from github2.users import Users
from github2.commits import Commits


class Github(object):

    def __init__(self, username=None, api_token=None, debug=False,
        requests_per_second=None, access_token=None, cache=None):
        """
        An interface to GitHub's API:
            http://develop.github.com/
        
        Params:
            `username` is your own GitHub username.
    
            `api_token` can be found here (while logged in as that user):
                https://github.com/account

            `access_token` can be used when no ``username`` and/or ``api_token``
                is used.  The ``access_token`` is the OAuth access token that is
                received after successful OAuth authentication.
    
            `requests_per_second` is a float indicating the API rate limit
                you're operating under (1 per second per GitHub at the moment),
                or None to disable delays.

                The default is to disable delays (for backwards compatibility).

            `cache` is a directory for caching GitHub responses.
        """
        
        self.debug = debug
        self.request = GithubRequest(username=username, api_token=api_token,
                                     debug=self.debug,
                                     requests_per_second=requests_per_second,
                                     access_token=access_token, cache=cache)
        self.issues = Issues(self.request)
        self.users = Users(self.request)
        self.repos = Repositories(self.request)
        self.commits = Commits(self.request)

    def project_for_user_repo(self, user, repo):
        return "/".join([user, repo])
    
    def get_all_blobs(self, project, tree_sha):
        blobs = self.request.get("blob/all", project, tree_sha)
        return blobs.get("blobs")

    def get_blob_info(self, project, tree_sha, path):
        blob = self.request.get("blob/show", project, tree_sha, path)
        return blob.get("blob")

    def get_tree(self, project, tree_sha):
        tree = self.request.get("tree/show", project, tree_sha)
        return tree.get("tree", [])

    def get_network_meta(self, project):
        return self.request.raw_request("/".join([self.request.github_url,
                                                  project,
                                                  "network_meta"]), {})

    def get_network_data(self, project, nethash, start=None, end=None):
        return self.request.raw_request("/".join([self.request.github_url,
                                                  project,
                                                  "network_data_chunk"]),
                                                  {"nethash": nethash,
                                                   "start": start,
                                                   "end": end})

@@ -2571,32 +2571,167 @@
 one, end=None):%0A
+        data = %7B%22nethash%22: nethash%7D%0A        if start:%0A            data%5B%22start%22%5D = start%0A        if end:%0A            data%5B%22end%22%5D = end%0A%0A
         return s
@@ -2976,156 +2976,10 @@
     
-%7B%22nethash%22: nethash,%0A                                                   %22start%22: start,%0A                                                   %22end%22: end%7D
+data
 )%0A

Make start/end truly optional in get_network_data().