Skip to content

Update to Python 3.12 #301

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

Merged
merged 7 commits into from
Aug 3, 2023
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