Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ENH: Improve issues to pages script #72

Merged
merged 3 commits into from
Nov 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/issue-to-page.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ jobs:

- name: Run script to generate separate pages from issues
run: |
python issues_to_pages.py
url="https://api.github.com/repos/brainhackorg/global2021/issues?per_page=100"
path="content/project"
python scripts/issues_to_pages.py $url $path

- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
Expand Down
105 changes: 85 additions & 20 deletions issues_to_pages.py → scripts/issues_to_pages.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Convert relevant issue data to Markdown files so that they can be used to
populate the website project section.

Usage:
> python issues_to_pages.py "https://api.github.com/repos/brainhackorg/global2021/issues?per_page=100" "content/project"

"""

import argparse
import json
import os
import requests
Expand Down Expand Up @@ -32,6 +42,34 @@ def request_issues(url):
return response


def check_issue_data_request(response):
"""Check the issue request response success.

Parameters
----------
response : Response
Response data.

Returns
-------
success : bool
`True` if response was.
"""

if response.status_code != 200:
print(
"Cannot continue: no issues found or request for issues unsuccessful.\nResponse:\n".format(
response
)
)
success = False

else:
success = True

return success


def get_issue_data(response):
"""Get the issue data contained in the response.

Expand Down Expand Up @@ -226,28 +264,17 @@ def gather_website_project_data(issues):
return projects


def main():

# Request issues
url = "https://api.github.com/repos/brainhackorg/global2021/issues?per_page=100"
response = request_issues(url)

if response.status_code != 200:
print(
"Cannot continue: no issues found or request for issues unsuccessful.\nResponse:\n".format(
response
)
)
sys.exit()

# Get issue data
issues = get_issue_data(response)
def save_project_data(website_project_data, path):
"""Save the website project data as separate Markdown files.

# Get the appropriate data for the website from the issues
website_project_data = gather_website_project_data(issues)
Parameters
----------
website_project_data : dict
Project data.
path : str
Path were project data will be saved.
"""

# Save the website project data as separate Markdown files
path = "content/project"
for project in website_project_data.items():

file_rootname = (
Expand All @@ -260,5 +287,43 @@ def main():
json.dump(project[1], json_file, indent=2)


def _build_arg_parser():

parser = argparse.ArgumentParser(
formatter_class=argparse.RawTextHelpFormatter,
description=__doc__)

parser.add_argument("url", help="URL where to fetch issues.")
parser.add_argument(
"path",
help="Path where to write relevant issue data to Markdown files."
)

return parser


def main():

parser = _build_arg_parser()
args = parser.parse_args()

# Request issues
response = request_issues(args.url)

# Check whether the response was successful
success = check_issue_data_request(response)
if not success:
sys.exit()

# Get issue data
issues = get_issue_data(response)

# Get the appropriate data for the website from the issues
website_project_data = gather_website_project_data(issues)

# Save the project data
save_project_data(website_project_data, args.path)


if __name__ == "__main__":
main()