Skip to content

Commit

Permalink
Merge pull request #176 from creativecommons/improve-logging-and-code…
Browse files Browse the repository at this point in the history
…-organization

improve logging and code organization
  • Loading branch information
TimidRobot authored Jul 25, 2023
2 parents 6671d63 + e7c21b7 commit a959cae
Show file tree
Hide file tree
Showing 16 changed files with 244 additions and 352 deletions.
47 changes: 47 additions & 0 deletions ccos/data/asana.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Standard library
import logging
import os
import sys

# Third-party
import asana

# To see workspace GID, log into Asana and then view:
# https://app.asana.com/api/1.0/workspaces
ASANA_WORKSPACE_GID = "133733285600979"
# To see project GIDs, log into Asana and then view:
# https://app.asana.com/api/1.0/projects
#
# To see "Community Team Tracking" project section GIDs, log into Asana and
# then view:
# https://app.asana.com/api/1.0/projects/1172465506923657/sections
ASANA_SECTION_GID = "1172465506923661"
LOG = logging.root


def setup_asana_client():
LOG.info("Setting up Asana client...")
try:
asana_token = os.environ["ADMIN_ASANA_TOKEN"]
except KeyError:
LOG.critical("missin ADMIN_ASANA_TOKEN environment variable")
sys.exit(1)
asana_client = asana.Client.access_token(asana_token)
asana_client.headers = {"asana-enable": "new_goal_memberships"}
try:
# Perform simple API operation to test authentication
asana_client.workspaces.get_workspace(ASANA_WORKSPACE_GID)
except asana.error.NoAuthorizationError as e:
LOG.critical(f"{e.status} {e.message} (is ADMIN_ASANA_TOKEN valid?)")
sys.exit(1)
LOG.success("done.")
return asana_client


def get_asana_team_members(asana_client):
LOG.info("Get Team Members...")
team_members = asana_client.tasks.find_by_section(
ASANA_SECTION_GID, opt_fields=["name", "custom_fields"]
)
LOG.success("done.")
return team_members
52 changes: 6 additions & 46 deletions ccos/data/get_community_team_data.py
Original file line number Diff line number Diff line change
@@ -1,43 +1,11 @@
# Standard library
import inspect
import logging
import os
import sys

# Third-party
import asana
LOG = logging.root

# First-party/Local
import ccos.log

ASANA_WORKSPACE_GID = "133733285600979"
ASANA_PROJECT_GID = "1172465506923661"

log_name = os.path.basename(os.path.splitext(inspect.stack()[-1].filename)[0])
LOG = logging.getLogger(log_name)
ccos.log.reset_handler()


def setup_asana_client():
LOG.info("Setting up Asana client...")
try:
asana_token = os.environ["ADMIN_ASANA_TOKEN"]
except KeyError:
LOG.critical("missin ADMIN_ASANA_TOKEN environment variable")
sys.exit(1)
asana_client = asana.Client.access_token(asana_token)
asana_client.headers = {"asana-enable": "new_goal_memberships"}
try:
# Perform simple API operation to test authentication
asana_client.workspaces.get_workspace(ASANA_WORKSPACE_GID)
except asana.error.NoAuthorizationError as e:
LOG.critical(f"{e.status} {e.message} (is ADMIN_ASANA_TOKEN valid?)")
sys.exit(1)
LOG.info("done.")
return asana_client


def generate_databag(asana_client):
def generate_databag(team_members):
"""
This method pulls the team members from Asana and
loads them into the databag after a little
Expand Down Expand Up @@ -71,17 +39,9 @@ def generate_databag(asana_client):
]
}
"""

LOG.info("Pulling from Asana and generating databag...")
databag = {"projects": [], "community_builders": []}

members = asana_client.tasks.find_by_section(
ASANA_PROJECT_GID, opt_fields=["name", "custom_fields"]
)
LOG.info("Team members pulled.")

LOG.info("Processing team members...")
for member in members:
for member in team_members:
if member["name"] == "":
continue # Sometimes blank names come up
role = get_custom_field(member, "Role")
Expand Down Expand Up @@ -115,7 +75,7 @@ def generate_databag(asana_client):
)
break

LOG.info("Done.")
LOG.success("done.")
return databag


Expand Down Expand Up @@ -195,8 +155,8 @@ def get_custom_field(task, field_name):
return field["text_value"]


def get_community_team_data(asana_client, repo_names):
databag = generate_databag(asana_client)
def get_community_team_data(team_members, repo_names):
databag = generate_databag(team_members)
databag = prune_databag(databag)
databag = verify_databag(databag, repo_names)
databag = sort_databag(databag)
Expand Down
39 changes: 5 additions & 34 deletions ccos/data/get_repo_data.py
Original file line number Diff line number Diff line change
@@ -1,38 +1,13 @@
#!/usr/bin/env python3
# vim: set fileencoding=utf-8:

# Standard library
import inspect
import logging
import os.path

# Third-party
import emoji
import yaml
from github import Github
from github.GithubException import GithubException, UnknownObjectException

# First-party/Local
import ccos.log
from ccos.data.push_data_via_git import GITHUB_ORGANIZATION, GITHUB_TOKEN

CC_METADATA_FILE_NAME = ".cc-metadata.yml"

log_name = os.path.basename(os.path.splitext(inspect.stack()[-1].filename)[0])
LOG = logging.getLogger(log_name)
ccos.log.reset_handler()


def set_up_github_client():
LOG.info("Setting up GitHub client...")
github_client = Github(GITHUB_TOKEN)
return github_client


def get_cc_organization(github_client):
LOG.info("Getting CC's GitHub organization...")
cc = github_client.get_organization(GITHUB_ORGANIZATION)
return cc
LOG = logging.root


def get_repositories(organization):
Expand Down Expand Up @@ -113,19 +88,15 @@ def get_repo_data_dict(repo_data_list):
return {"repos": repo_data_list}


def get_repo_data():
github_client = set_up_github_client()
cc = get_cc_organization(github_client)
repos = get_repositories(cc)
def get_repo_data(gh_org_cc):
repos = get_repositories(gh_org_cc)
repo_data_list = get_repo_data_list(repos)
data = get_repo_data_dict(repo_data_list)
return data


def get_repo_names():
github_client = set_up_github_client()
cc = get_cc_organization(github_client)
repos = get_repositories(cc)
def get_repo_names(gh_org_cc):
repos = get_repositories(gh_org_cc)
names = []
for repo in repos:
names.append(repo.name)
Expand Down
32 changes: 10 additions & 22 deletions ccos/data/push_data_via_git.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
#!/usr/bin/env python3
# vim: set fileencoding=utf-8:

# Standard library
import inspect
import json
import logging
import os
Expand All @@ -12,33 +8,25 @@
import git

# First-party/Local
import ccos.log
from ccos.gh_utils import GITHUB_ORGANIZATION, get_credentials

GIT_USER_NAME = "CC creativecommons.github.io Bot"
GIT_USER_EMAIL = "[email protected]"

GITHUB_USERNAME = "cc-creativecommons-github-io-bot"
GITHUB_ORGANIZATION = "creativecommons"
GITHUB_REPO_NAME = "creativecommons.github.io-source"

GITHUB_TOKEN = os.environ["ADMIN_GITHUB_TOKEN"]
GITHUB_REPO_URL_WITH_CREDENTIALS = (
f"https://{GITHUB_USERNAME}:{GITHUB_TOKEN}"
f"@github.com/{GITHUB_ORGANIZATION}/{GITHUB_REPO_NAME}.git"
)

GIT_USER_EMAIL = "[email protected]"
GIT_USER_NAME = "CC creativecommons.github.io Bot"
JSON_FILE_DIR = "databags"

log_name = os.path.basename(os.path.splitext(inspect.stack()[-1].filename)[0])
LOG = logging.getLogger(log_name)
ccos.log.reset_handler()
LOG = logging.root


def set_up_repo(git_working_dir):
github_username, github_token = get_credentials()
github_repo_url_with_credentials = (
f"https://{github_username}:{github_token}"
f"@github.com/{GITHUB_ORGANIZATION}/{GITHUB_REPO_NAME}.git"
)
if not os.path.isdir(git_working_dir):
LOG.info("Cloning repo...")
repo = git.Repo.clone_from(
url=GITHUB_REPO_URL_WITH_CREDENTIALS, to_path=git_working_dir
url=github_repo_url_with_credentials, to_path=git_working_dir
)
else:
LOG.info("Setting up repo...")
Expand Down
17 changes: 5 additions & 12 deletions ccos/gh_utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# Standard library
import inspect
import logging
import os
import re
Expand All @@ -9,15 +8,9 @@
from github import Github
from github.GithubException import BadCredentialsException

# First-party/Local
import ccos.log

GITHUB_ORGANIZATION = "creativecommons"
GITHUB_USERNAME_DEFAULT = "cc-creativecommons-github-io-bot"

log_name = os.path.basename(os.path.splitext(inspect.stack()[-1].filename)[0])
LOG = logging.getLogger(log_name)
ccos.log.reset_handler()
LOG = logging.root


def get_credentials():
Expand All @@ -37,22 +30,22 @@ def set_up_github_client():
_, github_token = get_credentials()
LOG.info("Setting up GitHub client...")
github_client = Github(github_token)
LOG.log(ccos.log.SUCCESS, "done.")
LOG.success("done.")
return github_client


def get_cc_organization(github_client):
LOG.info("Getting CC's GitHub organization...")
try:
cc = github_client.get_organization(GITHUB_ORGANIZATION)
gh_org_cc = github_client.get_organization(GITHUB_ORGANIZATION)
except BadCredentialsException as e:
LOG.critical(
f"{e.status} {e.data['message']} (see"
f" {e.data['documentation_url']})"
)
sys.exit(1)
LOG.log(ccos.log.SUCCESS, "done.")
return cc
LOG.success("done.")
return gh_org_cc


def get_team_slug_name(project_name, role):
Expand Down
Loading

0 comments on commit a959cae

Please sign in to comment.