Skip to content

Commit

Permalink
Initial user query functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
mschwager committed Sep 27, 2016
1 parent d1050a5 commit 73e3c72
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 3 deletions.
44 changes: 43 additions & 1 deletion lib/gitem/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,49 @@ def repository(ghapi, *args, **kwargs):


def user(ghapi, *args, **kwargs):
pass
username = kwargs['name']
verbose = kwargs['verbose']

user_info = analytics.get_user_information(
ghapi,
username
)
user_organizations = analytics.get_user_organizations(
ghapi,
username
)
user_repositories = analytics.get_user_repositories(
ghapi,
username
)

for human_readable_name, api_info in user_info.items():
leftpad_print(
"{}: {}".format(human_readable_name, api_info),
leftpad_length=0
)

leftpad_print("Organizations:", leftpad_length=0)

organization_count = len(user_organizations) if verbose else CONCISE_COUNT

for organization in user_organizations[:organization_count]:
for human_readable_name, api_info in organization.items():
leftpad_print(
"{}: {}".format(human_readable_name, api_info),
leftpad_length=2
)

leftpad_print("Repositories:", leftpad_length=0)

repository_count = len(user_repositories) if verbose else CONCISE_COUNT

for repository in user_repositories[:repository_count]:
for human_readable_name, api_info in repository.items():
leftpad_print(
"{}: {}".format(human_readable_name, api_info),
leftpad_length=2
)


def parse_args():
Expand Down
75 changes: 75 additions & 0 deletions lib/gitem/analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,3 +129,78 @@ def get_repository_contributors(ghapi, owner, repository):
]

return human_readable_name_to_api_info


def get_user_information(ghapi, username):
user_info, _ = ghapi.get_user(
username
)

# Order it so we get the same keys first every time
api_name_to_human_readable_name = collections.OrderedDict([
('login', 'Username'),
('html_url', 'Github URL'),
('name', 'Name'),
('company', 'Company'),
('blog', 'Blog'),
('location', 'Location'),
('email', 'Email Address'),
('created_at', 'Created'),
('updated_at', 'Updated'),
])

human_readable_name_to_api_info = {
human_readable_name: user_info[api_name]
for api_name, human_readable_name in api_name_to_human_readable_name.items()
}

return human_readable_name_to_api_info


def get_user_organizations(ghapi, username):
paged_user_organizations = ghapi.get_users_public_organizations(
username
)

# Order it so we get the same keys first every time
api_name_to_human_readable_name = collections.OrderedDict([
('login', 'Organization'),
])

human_readable_name_to_api_info = [
{
human_readable_name: user_organization[api_name]
for api_name, human_readable_name in api_name_to_human_readable_name.items()
}
for user_organizations, _ in paged_user_organizations
for user_organization in user_organizations
]

return human_readable_name_to_api_info


def get_user_repositories(ghapi, username):
paged_user_repositories = ghapi.get_users_public_repositories(
username,
type='all',
sort='pushed',
direction='desc',
)

# Order it so we get the same keys first every time
api_name_to_human_readable_name = collections.OrderedDict([
('name', 'Repository Name'),
('description', 'Description'),
('html_url', 'Github URL'),
])

human_readable_name_to_api_info = [
{
human_readable_name: user_repository[api_name]
for api_name, human_readable_name in api_name_to_human_readable_name.items()
}
for user_repositories, _ in paged_user_repositories
for user_repository in user_repositories
]

return human_readable_name_to_api_info
18 changes: 16 additions & 2 deletions lib/gitem/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,20 @@ def paginated_json_call(self, method, endpoint, params=None):
next_link = response.links.get("next", {})
url = next_link.get("url")

def get_user(self, username):
"""
Return user information associated with a given username
https://developer.github.com/v3/users/#get-a-single-user
"""
method = "GET"
endpoint = "/users/{}".format(username)
params = {}

result = self.json_call(method, endpoint, params)

return result

@oauth2_required
def get_users_organizations(self):
"""
Expand All @@ -132,7 +146,7 @@ def get_users_public_organizations(self, username):
endpoint = "/users/{}/orgs".format(username)
params = {}

result = self.json_call(method, endpoint, params)
result = self.paginated_json_call(method, endpoint, params)

return result

Expand All @@ -157,7 +171,7 @@ def get_users_public_repositories(self, username, type=None, sort=None, directio
if direction:
params["direction"] = direction

result = self.json_call(method, endpoint, params)
result = self.paginated_json_call(method, endpoint, params)

return result

Expand Down

0 comments on commit 73e3c72

Please sign in to comment.