Skip to content

Commit

Permalink
Update to Python 3.12 (#301)
Browse files Browse the repository at this point in the history
* Update to Python 3.11

* Update python-311.yml

* Fix transifex cli position

* Fix config generation script

* Add 3.11 to workflows

* chore: update 3.11 links and badges

* chore: Add 3.12 to workflow
  • Loading branch information
BlueGlassBlock committed Aug 3, 2023
1 parent 4dac60f commit df8186d
Show file tree
Hide file tree
Showing 11 changed files with 150 additions and 126 deletions.
135 changes: 71 additions & 64 deletions .github/scripts/generate_tx_config.py
Original file line number Diff line number Diff line change
@@ -1,76 +1,83 @@
#!/usr/bin/env python3
"""Please note that this script requires a Transifex API token to run."""
import glob
import json
import os
import subprocess
from functools import partial
from pathlib import Path
import re
import sys
import urllib.request
import os

run = partial(subprocess.run, check=True)


def init_project():
run(["tx", "init"])

def list_resources(token, project):
auth_handler = urllib.request.HTTPBasicAuthHandler()
auth_handler.add_password(
realm="api", uri="https://api.transifex.com/", user="api", passwd=token

def add_files(project_name: str):
run(
[
"tx",
"add",
"remote",
"--file-filter",
"trans/<lang>/<resource_slug>.<ext>",
f"https://www.transifex.com/python-doc/{project_name}/dashboard/",
]
)
opener = urllib.request.build_opener(auth_handler)
urllib.request.install_opener(opener)
next_ = (
"https://api.transifex.com/organizations/python-doc/projects/"
+ project
+ "/resources/"


FILTER_PATTERN = re.compile(
r"^(?P<prefix>file_filter( *)=( *))(?P<resource>.+)$", re.MULTILINE
)


def name_replacer(match: re.Match[str]):
prefix, resource = match.group("prefix", "resource")
override_prefix = prefix.replace("file_filter", "trans.zh_CN")
pattern = (
resource.replace("trans/<lang>/", "")
.replace("glossary_", "glossary")
.replace("--", "/")
.replace("_", "?")
)
resources = []
while True:
resp = urllib.request.urlopen(next_)
result = json.loads(resp.read().decode("utf-8"))
resources.extend([i["slug"] for i in result])
link = re.findall('<([^<]*)>; rel="next"', resp.getheader("Link") or "")
if not link:
break
next_ = link[0]
return resources


def render_config(doc_dir, project, resources):
os.chdir(doc_dir)
tpl = """
[{project}.{resource}]
trans.zh_CN = {filename}
source_lang = en
type = PO"""
conf = """[main]
host = https://www.transifex.com"""
for resource in sorted(resources):
if resource == "glossary_":
filename = "glossary.po"
elif resource == "sphinx":
filename = "sphinx.po"
else:
pattern = resource.replace("--", "/").replace("_", "?")
matches = glob.glob(pattern + ".rst")
if len(matches) == 0:
print("missing", resource, file=sys.stderr)
continue
elif len(matches) == 1:
filename = matches[0].replace(".rst", ".po")
else:
print("multi match", resource, pattern, matches, file=sys.stderr)
conf += tpl.format(project=project, resource=resource, filename=filename)
return conf
matches = list(glob.glob(pattern.replace(".po", ".rst")))
if not matches:
print("missing", pattern)
return f"{prefix}{resource}\n{override_prefix}{pattern.replace('?', '_')}"
elif len(matches) == 1:
filename = matches[0].replace(".rst", ".po").replace("\\", "/")
else:
raise ValueError("multi match", resource, pattern, matches)
return f"{prefix}{resource}\n{override_prefix}{filename}"


def patch_config(path: str):
tx_config_path = Path(".tx", "config")

config_content = tx_config_path.read_text("utf-8")

cwd = os.getcwd()
os.chdir(path)
config_content = FILTER_PATTERN.sub(name_replacer, config_content)
os.chdir(cwd)

tx_config_path.write_text(config_content, "utf-8")


if __name__ == "__main__":
import argparse
from argparse import ArgumentParser

parser = ArgumentParser()

parser.add_argument("--token", default="")
parser.add_argument("--project-name", required=True)
parser.add_argument("--doc-path", required=True)

parser = argparse.ArgumentParser()
parser.add_argument("--token")
parser.add_argument("--project")
parser.add_argument("--doc-dir")
args = parser.parse_args()
params = parser.parse_args()

resources = list_resources(args.token, args.project)
conf = render_config(args.doc_dir, args.project, resources)
print(conf)
if params.token:
os.environ["TX_TOKEN"] = params.token

# vim: set et ts=4 sw=4 sts=4:
init_project()
add_files(params.project_name)
patch_config(params.doc_path)
2 changes: 1 addition & 1 deletion .github/scripts/prepare.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ git clone --depth=1 --branch="$VERSION" https://github.com/python/cpython cpytho
git clone --branch="$VERSION" https://github.com/"$GITHUB_REPOSITORY" docs

pip3 install --user setuptools
pip3 install --user transifex-client
curl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash
sudo apt-get update
sudo apt-get install -y python3-venv
38 changes: 0 additions & 38 deletions .github/scripts/transifex_pull.py

This file was deleted.

17 changes: 2 additions & 15 deletions .github/scripts/update.sh
Original file line number Diff line number Diff line change
@@ -1,18 +1,5 @@
#!/bin/bash

set -ex

script_dir="$(dirname "$(realpath "$0")")"

if [[ -n "$TRANSIFEX_APIKEY" ]]; then
cat > ~/.transifexrc << EOF
[https://www.transifex.com]
api_hostname = https://api.transifex.com
hostname = https://www.transifex.com
password = $TRANSIFEX_APIKEY
username = api
EOF
fi

tx=$(realpath ./tx)
cd docs || exit 1
"$script_dir"/transifex_pull.py
$tx pull --languages "$LOCALE" -t --use-git-timestamps
2 changes: 1 addition & 1 deletion .github/workflows/python-310.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: update
run: .github/scripts/update.sh
env:
TRANSIFEX_APIKEY: ${{ secrets.TRANSIFEX_APIKEY }}
TX_TOKEN: ${{ secrets.TRANSIFEX_APIKEY }}
- name: build
run: .github/scripts/build.sh
- name: commit
Expand Down
29 changes: 29 additions & 0 deletions .github/workflows/python-311.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: python-311

on:
push:
branches:
- master
schedule:
- cron: "11 * * * *"

jobs:
sync:
runs-on: ubuntu-latest
env:
LOCALE: zh_CN
VERSION: "3.11"
steps:
- uses: actions/checkout@v2
- name: prepare
run: .github/scripts/prepare.sh
- name: update
run: .github/scripts/update.sh
env:
TX_TOKEN: ${{ secrets.TRANSIFEX_APIKEY }}
- name: build
run: .github/scripts/build.sh
- name: commit
run: .github/scripts/commit.sh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29 changes: 29 additions & 0 deletions .github/workflows/python-312.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: python-312

on:
push:
branches:
- master
schedule:
- cron: "42 * * * *"

jobs:
sync:
runs-on: ubuntu-latest
env:
LOCALE: zh_CN
VERSION: "3.12"
steps:
- uses: actions/checkout@v2
- name: prepare
run: .github/scripts/prepare.sh
- name: update
run: .github/scripts/update.sh
env:
TX_TOKEN: ${{ secrets.TRANSIFEX_APIKEY }}
- name: build
run: .github/scripts/build.sh
- name: commit
run: .github/scripts/commit.sh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion .github/workflows/python-37.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: update
run: .github/scripts/update.sh
env:
TRANSIFEX_APIKEY: ${{ secrets.TRANSIFEX_APIKEY }}
TX_TOKEN: ${{ secrets.TRANSIFEX_APIKEY }}
- name: build
run: .github/scripts/build.sh
- name: commit
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/python-38.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: update
run: .github/scripts/update.sh
env:
TRANSIFEX_APIKEY: ${{ secrets.TRANSIFEX_APIKEY }}
TX_TOKEN: ${{ secrets.TRANSIFEX_APIKEY }}
- name: build
run: .github/scripts/build.sh
- name: commit
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/python-39.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: update
run: .github/scripts/update.sh
env:
TRANSIFEX_APIKEY: ${{ secrets.TRANSIFEX_APIKEY }}
TX_TOKEN: ${{ secrets.TRANSIFEX_APIKEY }}
- name: build
run: .github/scripts/build.sh
- name: commit
Expand Down
18 changes: 14 additions & 4 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,36 @@ Maintained versions:
* - Version
- Sync status
- Translation progress
* - `3.12 <https://github.com/python/python-docs-zh-cn/tree/3.12>`_
- .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-312/badge.svg
:target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-312
- .. image:: https://img.shields.io/badge/dynamic/json.svg?label=zh_CN&query=%24.zh_CN&url=http://gce.zhsj.me/python/312
:target: https://app.transifex.com/python-doc/python-newest/
* - `3.11 <https://github.com/python/python-docs-zh-cn/tree/3.11>`_
- .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-311/badge.svg
:target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-311
- .. image:: https://img.shields.io/badge/dynamic/json.svg?label=zh_CN&query=%24.zh_CN&url=http://gce.zhsj.me/python/311
:target: https://app.transifex.com/python-doc/python-311/
* - `3.10 <https://github.com/python/python-docs-zh-cn/tree/3.10>`_
- .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-310/badge.svg
:target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-310
- .. image:: https://img.shields.io/badge/dynamic/json.svg?label=zh_CN&query=%24.zh_CN&url=http://gce.zhsj.me/python/310
:target: https://www.transifex.com/python-doc/python-39/
:target: https://app.transifex.com/python-doc/python-310/
* - `3.9 <https://github.com/python/python-docs-zh-cn/tree/3.9>`_
- .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-39/badge.svg
:target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-39
- .. image:: https://img.shields.io/badge/dynamic/json.svg?label=zh_CN&query=%24.zh_CN&url=http://gce.zhsj.me/python/39
:target: https://www.transifex.com/python-doc/python-39/
:target: https://app.transifex.com/python-doc/python-39/
* - `3.8 <https://github.com/python/python-docs-zh-cn/tree/3.8>`_
- .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-38/badge.svg
:target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-38
- .. image:: https://img.shields.io/badge/dynamic/json.svg?label=zh_CN&query=%24.zh_CN&url=http://gce.zhsj.me/python/38
:target: https://www.transifex.com/python-doc/python-38/
:target: https://app.transifex.com/python-doc/python-38/
* - `3.7 <https://github.com/python/python-docs-zh-cn/tree/3.7>`_
- .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-37/badge.svg
:target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-37
- .. image:: https://img.shields.io/badge/dynamic/json.svg?label=zh_CN&query=%24.zh_CN&url=http://gce.zhsj.me/python/37
:target: https://www.transifex.com/python-doc/python-37/
:target: https://app.transifex.com/python-doc/python-37/

Documentation Contribution Agreement
------------------------------------
Expand Down

0 comments on commit df8186d

Please sign in to comment.