Skip to content

Commit

Permalink
Fix create issue script (#2876)
Browse files Browse the repository at this point in the history
Algunas mejoras para el script que genera issues.

Lo probé en mi fork y me generó por ejemplo este issue:
sofide#2
  • Loading branch information
sofide authored Nov 21, 2024
1 parent 05975a4 commit 30a3564
Showing 1 changed file with 137 additions and 41 deletions.
178 changes: 137 additions & 41 deletions scripts/create_issue.py
Original file line number Diff line number Diff line change
@@ -1,63 +1,159 @@
# Use together with `pageviews.py`
# python scripts/pageviews.py | head -n 150 | grep -v whats | cut -d ' ' -f 2 | sed 's/\.html/\.po/g' | xargs -I '{}' python scripts/create_issue.py '{}'
"""
Run this script with one variable:
- PO filename to create an issue for that file
- or '--all' to create the issues for all untranslated files that doesn't have an open issue already
- or '--one' to create the next one issue
"""

import os
import sys
from glob import glob
from pathlib import Path

from github import Github
from potodo.potodo import PoFileStats

if len(sys.argv) != 2:
print('Specify PO filename')
sys.exit(1)
PYTHON_VERSION = "3.13"
PENDING_ENTRIES_FOR_GOOD_FIRST_ISSUE = 5
GOOD_FIRST_ISSUE_LABEL = "good first issue"
ISSUE_LABELS = [PYTHON_VERSION]
ISSUE_TITLE = 'Translate `{pofilename}`'
ISSUE_BODY = '''This file is {translated_percent}% translated and needs to reach 100%.
pofilename = sys.argv[1]
pofile = PoFileStats(Path(pofilename))
The rendered version of this file will be available at https://docs.python.org/es/{python_version}/{urlfile} once translated.
Meanwhile, the English version is shown.
g = Github(os.environ.get('GITHUB_TOKEN'))
Current stats for `{pofilename}`:
repo = g.get_repo('python/python-docs-es')
- Total entries: {pofile_entries}
- Entries that need work: {pending_entries} - ({pending_percent}%)
- Fuzzy: {pofile_fuzzy}
- Untranslated: {pofile_untranslated}
issues = repo.get_issues(state='all')
for issue in issues:
if pofilename in issue.title:
Please, comment here if you want this file to be assigned to you and a member will assign it to you as soon as possible, so you can start working on it.
print(f'Skipping {pofilename}. There is a similar issue already created at {issue.html_url}')
sys.exit(1)
Remember to follow the steps in our [Contributing Guide](https://python-docs-es.readthedocs.io/page/CONTRIBUTING.html).'''

msg = f'There is a similar issue already created at {issue.html_url}.\nDo you want to create it anyways? [y/N] '
answer = input(msg)
if answer != 'y':
sys.exit(1)

if pofile.fuzzy == 0 and any([
pofile.translated_nb == pofile.po_file_size,
pofile.untranslated_nb == 0,
]):
print(f'Skipping {pofilename}. The file is 100% translated already.')
sys.exit(1)
class IssueAlreadyExistingError(Exception):
"""Issue already existing in GitHub"""

# https://pygithub.readthedocs.io/en/latest/github_objects/Repository.html#github.Repository.Repository.create_issue
title = f'Translate `{pofilename}`'
urlfile = pofilename.replace('.po', '.html')
issue = repo.create_issue(
title=title,
body=f'''This needs to reach 100% translated.

The rendered version of this file will be available at https://docs.python.org/es/3.8/{urlfile} once translated.
Meanwhile, the English version is shown.
class PoFileAlreadyTranslated(Exception):
"""Given PO file is already 100% translated"""

Current stats for `{pofilename}`:

- Fuzzy: {pofile.fuzzy_nb}
- Percent translated: {pofile.percent_translated}%
- Entries: {pofile.translated_nb} / {pofile.po_file_size}
- Untranslated: {pofile.untranslated_nb}
class GitHubIssueGenerator:
def __init__(self):
g = Github(os.environ.get('GITHUB_TOKEN'))
self.repo = g.get_repo('python/python-docs-es')
self._issues = None

Please, comment here if you want this file to be assigned to you and a member will assign it to you as soon as possible, so you can start working on it.
@property
def issues(self):
if self._issues is None:
self._issues = self.repo.get_issues(state='open')

return self._issues

def check_issue_not_already_existing(self, pofilename):
for issue in self.issues:
if pofilename in issue.title:

print(f'Skipping {pofilename}. There is a similar issue already created at {issue.html_url}')
raise IssueAlreadyExistingError


@staticmethod
def check_translation_is_pending(pofile):
no_fuzzy_translations = pofile.fuzzy == 0
translated_match_all_entries = pofile.translated == pofile.entries
no_untranslated_entries_left = pofile.untranslated == 0

if no_fuzzy_translations and (translated_match_all_entries or no_untranslated_entries_left):
print(f'Skipping {pofile.filename}. The file is 100% translated already.')
raise PoFileAlreadyTranslated



def issue_generator(self, pofilename):
pofile = PoFileStats(Path(pofilename))

self.check_issue_not_already_existing(pofilename)
self.check_translation_is_pending(pofile)

pending_entries = pofile.fuzzy + pofile.untranslated

if pending_entries <= PENDING_ENTRIES_FOR_GOOD_FIRST_ISSUE:
labels = ISSUE_LABELS + [GOOD_FIRST_ISSUE_LABEL]
else:
labels = ISSUE_LABELS

urlfile = pofilename.replace('.po', '.html')
title = ISSUE_TITLE.format(pofilename=pofilename)
body = ISSUE_BODY.format(
translated_percent=pofile.percent_translated,
python_version=PYTHON_VERSION,
urlfile=urlfile,
pofilename=pofilename,
pofile_fuzzy=pofile.fuzzy,
pending_percent=100 - pofile.percent_translated,
pofile_entries=pofile.entries,
pofile_untranslated=pofile.untranslated,
pending_entries=pending_entries,
)
# https://pygithub.readthedocs.io/en/latest/github_objects/Repository.html#github.Repository.Repository.create_issue
issue = self.repo.create_issue(title=title, body=body, labels=labels)

return issue

def create_issues(self, only_one=False):
po_files = glob("**/*.po")
existing_issue_counter = 0
already_translated_counter = 0
created_issues_counter = 0

print(f"TOTAL PO FILES: {len(po_files)}")

for pofilename in po_files:
try:
issue = self.issue_generator(pofilename)
created_issues_counter += 1
print(f'Issue "{issue.title}" created at {issue.html_url}')
if only_one:
break
except IssueAlreadyExistingError:
existing_issue_counter += 1
except PoFileAlreadyTranslated:
already_translated_counter += 1

print("Stats:")
print(f"- Existing issues: {existing_issue_counter}")
print(f"- Already translated files: {already_translated_counter}")
print(f"- Created issues: {created_issues_counter}")


def main():
error_msg = "Specify PO filename or '--all' to create all the issues, or '--one' to create the next one issue"
if len(sys.argv) != 2:
raise Exception(error_msg)

arg = sys.argv[1]

gh = GitHubIssueGenerator()

if arg == "--all":
gh.create_issues()

elif arg == "--one":
gh.create_issues(only_one=True)

else:
try:
gh.issue_generator(arg)
except FileNotFoundError:
raise Exception(error_msg)

Remember to follow the steps in our [Contributing Guide](https://python-docs-es.readthedocs.io/page/CONTRIBUTING.html).''',
)
print(f'Issue "{title}" created at {issue.html_url}')
if __name__ == "__main__":
main()

0 comments on commit 30a3564

Please sign in to comment.