chzzk-python 0.11.0__tar.gz → 0.12.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chzzk_python-0.12.0/.dockerignore +26 -0
- chzzk_python-0.12.0/.github/workflows/docker.yml +157 -0
- chzzk_python-0.12.0/Dockerfile +54 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/PKG-INFO +27 -1
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/README.md +26 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/README_KO.md +27 -1
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/_version.py +2 -2
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/.env.example +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/.github/workflows/build.yml +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/.github/workflows/ci.yml +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/.github/workflows/publish.yml +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/.gitignore +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/.python-version +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/LICENSE +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/chzzk.spec +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/docs/unofficial-chat-websocket-protocol.md +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/examples/.env.example +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/examples/oauth_server.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/examples/realtime_chat.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/examples/realtime_chat_async.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/examples/session_management.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/examples/unofficial_chat.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/examples/unofficial_chat_async.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/main.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/pyproject.toml +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/scripts/build.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/api/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/api/base.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/api/category.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/api/channel.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/api/chat.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/api/live.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/api/restriction.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/api/session.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/api/user.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/auth/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/auth/models.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/auth/oauth.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/auth/token.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/cli/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/cli/commands/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/cli/commands/auth.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/cli/commands/chat.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/cli/commands/live.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/cli/config.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/cli/formatter.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/cli/logging.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/cli/main.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/cli/writers.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/client.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/constants.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/exceptions/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/exceptions/errors.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/http/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/http/_base.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/http/client.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/http/endpoints.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/logging.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/models/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/models/category.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/models/channel.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/models/chat.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/models/common.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/models/live.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/models/restriction.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/models/session.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/models/user.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/py.typed +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/realtime/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/realtime/client.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/api/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/api/base.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/api/chat.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/api/live.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/api/user.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/auth/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/auth/cookie.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/chat/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/chat/client.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/chat/connection.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/chat/handler.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/chat/monitor.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/client.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/http/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/http/_base.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/http/client.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/http/endpoints.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/models/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/models/chat.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/models/live.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/models/reconnect.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/src/chzzk/unofficial/models/user.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/api/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/api/test_category.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/api/test_channel.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/api/test_chat.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/api/test_live.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/api/test_restriction.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/api/test_session.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/api/test_user.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/auth/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/auth/test_oauth.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/cli/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/cli/test_formatter.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/cli/test_writers.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/realtime/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/realtime/test_client.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/test_client.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/unofficial/__init__.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/unofficial/test_client.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/tests/unofficial/test_monitor.py +0 -0
- {chzzk_python-0.11.0 → chzzk_python-0.12.0}/uv.lock +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.git
|
|
2
|
+
.gitignore
|
|
3
|
+
__pycache__
|
|
4
|
+
*.py[cod]
|
|
5
|
+
.venv
|
|
6
|
+
venv/
|
|
7
|
+
.pytest_cache/
|
|
8
|
+
.ruff_cache/
|
|
9
|
+
.mypy_cache/
|
|
10
|
+
dist/
|
|
11
|
+
build/
|
|
12
|
+
*.egg-info/
|
|
13
|
+
.env
|
|
14
|
+
.env.*
|
|
15
|
+
*.token.json
|
|
16
|
+
.chzzk_token.json
|
|
17
|
+
*.log
|
|
18
|
+
*.jsonl
|
|
19
|
+
docs/
|
|
20
|
+
.github/
|
|
21
|
+
.mcp.json
|
|
22
|
+
CLAUDE.md
|
|
23
|
+
.claude/
|
|
24
|
+
chzzk.spec
|
|
25
|
+
tests/
|
|
26
|
+
examples/
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
name: Docker Build and Push
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
push:
|
|
9
|
+
description: "Push image to registry"
|
|
10
|
+
required: false
|
|
11
|
+
default: false
|
|
12
|
+
type: boolean
|
|
13
|
+
|
|
14
|
+
env:
|
|
15
|
+
REGISTRY: ghcr.io
|
|
16
|
+
IMAGE_NAME: ${{ github.repository }}
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
ci:
|
|
20
|
+
uses: ./.github/workflows/ci.yml
|
|
21
|
+
|
|
22
|
+
# Stage 1: 각 아키텍처를 네이티브 러너에서 병렬 빌드
|
|
23
|
+
build:
|
|
24
|
+
needs: ci
|
|
25
|
+
strategy:
|
|
26
|
+
fail-fast: false
|
|
27
|
+
matrix:
|
|
28
|
+
include:
|
|
29
|
+
- platform: linux/amd64
|
|
30
|
+
runner: ubuntu-latest
|
|
31
|
+
- platform: linux/arm64
|
|
32
|
+
runner: ubuntu-24.04-arm # Native ARM runner (QEMU 없음!)
|
|
33
|
+
runs-on: ${{ matrix.runner }}
|
|
34
|
+
permissions:
|
|
35
|
+
contents: read
|
|
36
|
+
packages: write
|
|
37
|
+
|
|
38
|
+
steps:
|
|
39
|
+
- name: Checkout repository
|
|
40
|
+
uses: actions/checkout@v4
|
|
41
|
+
with:
|
|
42
|
+
fetch-depth: 0
|
|
43
|
+
|
|
44
|
+
- name: Set up Docker Buildx
|
|
45
|
+
uses: docker/setup-buildx-action@v3
|
|
46
|
+
|
|
47
|
+
- name: Log in to GitHub Container Registry
|
|
48
|
+
uses: docker/login-action@v3
|
|
49
|
+
with:
|
|
50
|
+
registry: ${{ env.REGISTRY }}
|
|
51
|
+
username: ${{ github.actor }}
|
|
52
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
53
|
+
|
|
54
|
+
- name: Extract metadata
|
|
55
|
+
id: meta
|
|
56
|
+
uses: docker/metadata-action@v5
|
|
57
|
+
with:
|
|
58
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
59
|
+
|
|
60
|
+
- name: Get version from tag
|
|
61
|
+
id: version
|
|
62
|
+
run: |
|
|
63
|
+
if [[ "${{ github.ref_type }}" == "tag" ]]; then
|
|
64
|
+
VERSION="${{ github.ref_name }}"
|
|
65
|
+
VERSION="${VERSION#v}" # Remove 'v' prefix
|
|
66
|
+
else
|
|
67
|
+
VERSION="0.0.0+$(git rev-parse --short HEAD)"
|
|
68
|
+
fi
|
|
69
|
+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
70
|
+
|
|
71
|
+
- name: Build and push by digest
|
|
72
|
+
id: build
|
|
73
|
+
uses: docker/build-push-action@v6
|
|
74
|
+
with:
|
|
75
|
+
context: .
|
|
76
|
+
platforms: ${{ matrix.platform }}
|
|
77
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
78
|
+
build-args: |
|
|
79
|
+
VERSION=${{ steps.version.outputs.version }}
|
|
80
|
+
outputs: type=image,name=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
|
|
81
|
+
cache-from: type=gha,scope=${{ matrix.platform }}
|
|
82
|
+
cache-to: type=gha,scope=${{ matrix.platform }},mode=max
|
|
83
|
+
|
|
84
|
+
- name: Export digest
|
|
85
|
+
run: |
|
|
86
|
+
mkdir -p /tmp/digests
|
|
87
|
+
digest="${{ steps.build.outputs.digest }}"
|
|
88
|
+
touch "/tmp/digests/${digest#sha256:}"
|
|
89
|
+
|
|
90
|
+
- name: Upload digest
|
|
91
|
+
uses: actions/upload-artifact@v4
|
|
92
|
+
with:
|
|
93
|
+
name: digests-${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }}
|
|
94
|
+
path: /tmp/digests/*
|
|
95
|
+
if-no-files-found: error
|
|
96
|
+
retention-days: 1
|
|
97
|
+
|
|
98
|
+
# Stage 2: Multi-arch manifest 병합
|
|
99
|
+
merge:
|
|
100
|
+
needs: build
|
|
101
|
+
runs-on: ubuntu-latest
|
|
102
|
+
permissions:
|
|
103
|
+
contents: read
|
|
104
|
+
packages: write
|
|
105
|
+
attestations: write
|
|
106
|
+
id-token: write
|
|
107
|
+
|
|
108
|
+
steps:
|
|
109
|
+
- name: Download digests
|
|
110
|
+
uses: actions/download-artifact@v4
|
|
111
|
+
with:
|
|
112
|
+
path: /tmp/digests
|
|
113
|
+
pattern: digests-*
|
|
114
|
+
merge-multiple: true
|
|
115
|
+
|
|
116
|
+
- name: Set up Docker Buildx
|
|
117
|
+
uses: docker/setup-buildx-action@v3
|
|
118
|
+
|
|
119
|
+
- name: Log in to GitHub Container Registry
|
|
120
|
+
uses: docker/login-action@v3
|
|
121
|
+
with:
|
|
122
|
+
registry: ${{ env.REGISTRY }}
|
|
123
|
+
username: ${{ github.actor }}
|
|
124
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
125
|
+
|
|
126
|
+
- name: Extract metadata
|
|
127
|
+
id: meta
|
|
128
|
+
uses: docker/metadata-action@v5
|
|
129
|
+
with:
|
|
130
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
131
|
+
tags: |
|
|
132
|
+
type=semver,pattern={{version}}
|
|
133
|
+
type=semver,pattern={{major}}.{{minor}}
|
|
134
|
+
type=semver,pattern={{major}}
|
|
135
|
+
type=raw,value=latest,enable={{is_default_branch}}
|
|
136
|
+
type=sha,prefix=sha-
|
|
137
|
+
labels: |
|
|
138
|
+
org.opencontainers.image.title=chzzk-python
|
|
139
|
+
org.opencontainers.image.description=Unofficial Python SDK and CLI for Chzzk
|
|
140
|
+
org.opencontainers.image.vendor=hypn4
|
|
141
|
+
|
|
142
|
+
- name: Create manifest list and push
|
|
143
|
+
working-directory: /tmp/digests
|
|
144
|
+
run: |
|
|
145
|
+
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
|
|
146
|
+
$(printf '${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
|
|
147
|
+
|
|
148
|
+
- name: Inspect image
|
|
149
|
+
run: |
|
|
150
|
+
docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}
|
|
151
|
+
|
|
152
|
+
- name: Generate artifact attestation
|
|
153
|
+
uses: actions/attest-build-provenance@v2
|
|
154
|
+
with:
|
|
155
|
+
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
156
|
+
subject-digest: ${{ steps.meta.outputs.version }}
|
|
157
|
+
push-to-registry: true
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1
|
|
2
|
+
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Stage 1: Builder - uv로 의존성 설치
|
|
5
|
+
# =============================================================================
|
|
6
|
+
FROM ghcr.io/astral-sh/uv:python3.14-bookworm-slim AS builder
|
|
7
|
+
|
|
8
|
+
# 버전 정보 (hatch-vcs용 - .git 없이 빌드 지원)
|
|
9
|
+
ARG VERSION=0.0.0
|
|
10
|
+
ENV SETUPTOOLS_SCM_PRETEND_VERSION=${VERSION}
|
|
11
|
+
|
|
12
|
+
ENV UV_COMPILE_BYTECODE=1 \
|
|
13
|
+
UV_LINK_MODE=copy \
|
|
14
|
+
UV_PYTHON_DOWNLOADS=0
|
|
15
|
+
|
|
16
|
+
WORKDIR /app
|
|
17
|
+
|
|
18
|
+
# 의존성 먼저 설치 (레이어 캐싱 최적화)
|
|
19
|
+
RUN --mount=type=cache,target=/root/.cache/uv \
|
|
20
|
+
--mount=type=bind,source=uv.lock,target=uv.lock \
|
|
21
|
+
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
|
|
22
|
+
uv sync --locked --no-install-project --no-dev --all-extras
|
|
23
|
+
|
|
24
|
+
# 소스 코드 복사 및 프로젝트 설치
|
|
25
|
+
COPY src/ /app/src/
|
|
26
|
+
COPY pyproject.toml uv.lock README.md LICENSE /app/
|
|
27
|
+
|
|
28
|
+
RUN --mount=type=cache,target=/root/.cache/uv \
|
|
29
|
+
uv sync --locked --no-dev --all-extras --no-editable
|
|
30
|
+
|
|
31
|
+
# =============================================================================
|
|
32
|
+
# Stage 2: Runtime - 최소 프로덕션 이미지
|
|
33
|
+
# =============================================================================
|
|
34
|
+
FROM python:3.14-slim-bookworm AS runtime
|
|
35
|
+
|
|
36
|
+
# 보안: non-root 사용자
|
|
37
|
+
RUN groupadd --gid 1000 chzzk && \
|
|
38
|
+
useradd --uid 1000 --gid 1000 --shell /bin/bash --create-home chzzk
|
|
39
|
+
|
|
40
|
+
# 가상환경만 복사
|
|
41
|
+
COPY --from=builder --chown=chzzk:chzzk /app/.venv /app/.venv
|
|
42
|
+
|
|
43
|
+
ENV PATH="/app/.venv/bin:$PATH" \
|
|
44
|
+
PYTHONUNBUFFERED=1 \
|
|
45
|
+
PYTHONDONTWRITEBYTECODE=1
|
|
46
|
+
|
|
47
|
+
USER chzzk
|
|
48
|
+
WORKDIR /home/chzzk
|
|
49
|
+
|
|
50
|
+
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
|
|
51
|
+
CMD chzzk --help || exit 1
|
|
52
|
+
|
|
53
|
+
ENTRYPOINT ["chzzk"]
|
|
54
|
+
CMD ["--help"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chzzk-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.0
|
|
4
4
|
Summary: Unofficial Python SDK for Chzzk (NAVER Live Streaming Platform) API
|
|
5
5
|
Project-URL: Homepage, https://github.com/hypn4/chzzk-python
|
|
6
6
|
Project-URL: Repository, https://github.com/hypn4/chzzk-python
|
|
@@ -39,6 +39,7 @@ Description-Content-Type: text/markdown
|
|
|
39
39
|
|
|
40
40
|
[](https://www.python.org/downloads/)
|
|
41
41
|
[](https://opensource.org/licenses/MIT)
|
|
42
|
+
[](https://ghcr.io/hypn4/chzzk-python)
|
|
42
43
|
|
|
43
44
|
Unofficial Python SDK for Chzzk (NAVER Live Streaming Platform) API
|
|
44
45
|
|
|
@@ -64,6 +65,31 @@ uv add "chzzk-python[cli]"
|
|
|
64
65
|
pip install "chzzk-python[cli]"
|
|
65
66
|
```
|
|
66
67
|
|
|
68
|
+
### Docker
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Pull from GitHub Container Registry
|
|
72
|
+
docker pull ghcr.io/hypn4/chzzk-python:latest
|
|
73
|
+
|
|
74
|
+
# Run CLI commands
|
|
75
|
+
docker run --rm ghcr.io/hypn4/chzzk-python --help
|
|
76
|
+
docker run --rm ghcr.io/hypn4/chzzk-python auth --help
|
|
77
|
+
|
|
78
|
+
# Watch chat (with environment variables)
|
|
79
|
+
docker run --rm -it \
|
|
80
|
+
-e CHZZK_NID_AUT="your-nid-aut" \
|
|
81
|
+
-e CHZZK_NID_SES="your-nid-ses" \
|
|
82
|
+
ghcr.io/hypn4/chzzk-python chat watch CHANNEL_ID
|
|
83
|
+
|
|
84
|
+
# Interactive chat (requires -it flags)
|
|
85
|
+
docker run --rm -it \
|
|
86
|
+
-e CHZZK_NID_AUT="your-nid-aut" \
|
|
87
|
+
-e CHZZK_NID_SES="your-nid-ses" \
|
|
88
|
+
ghcr.io/hypn4/chzzk-python chat send CHANNEL_ID -i
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Available tags: `latest`, `X.Y.Z`, `X.Y`, `X`
|
|
92
|
+
|
|
67
93
|
## Quick Start
|
|
68
94
|
|
|
69
95
|
```python
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.python.org/downloads/)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://ghcr.io/hypn4/chzzk-python)
|
|
5
6
|
|
|
6
7
|
Unofficial Python SDK for Chzzk (NAVER Live Streaming Platform) API
|
|
7
8
|
|
|
@@ -27,6 +28,31 @@ uv add "chzzk-python[cli]"
|
|
|
27
28
|
pip install "chzzk-python[cli]"
|
|
28
29
|
```
|
|
29
30
|
|
|
31
|
+
### Docker
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Pull from GitHub Container Registry
|
|
35
|
+
docker pull ghcr.io/hypn4/chzzk-python:latest
|
|
36
|
+
|
|
37
|
+
# Run CLI commands
|
|
38
|
+
docker run --rm ghcr.io/hypn4/chzzk-python --help
|
|
39
|
+
docker run --rm ghcr.io/hypn4/chzzk-python auth --help
|
|
40
|
+
|
|
41
|
+
# Watch chat (with environment variables)
|
|
42
|
+
docker run --rm -it \
|
|
43
|
+
-e CHZZK_NID_AUT="your-nid-aut" \
|
|
44
|
+
-e CHZZK_NID_SES="your-nid-ses" \
|
|
45
|
+
ghcr.io/hypn4/chzzk-python chat watch CHANNEL_ID
|
|
46
|
+
|
|
47
|
+
# Interactive chat (requires -it flags)
|
|
48
|
+
docker run --rm -it \
|
|
49
|
+
-e CHZZK_NID_AUT="your-nid-aut" \
|
|
50
|
+
-e CHZZK_NID_SES="your-nid-ses" \
|
|
51
|
+
ghcr.io/hypn4/chzzk-python chat send CHANNEL_ID -i
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Available tags: `latest`, `X.Y.Z`, `X.Y`, `X`
|
|
55
|
+
|
|
30
56
|
## Quick Start
|
|
31
57
|
|
|
32
58
|
```python
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# chzzk-python
|
|
2
2
|
|
|
3
|
-
[](https://www.python.org/downloads/)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://ghcr.io/hypn4/chzzk-python)
|
|
5
6
|
|
|
6
7
|
치지직(CHZZK) 스트리밍 플랫폼을 위한 비공식 Python SDK
|
|
7
8
|
|
|
@@ -27,6 +28,31 @@ uv add "chzzk-python[cli]"
|
|
|
27
28
|
pip install "chzzk-python[cli]"
|
|
28
29
|
```
|
|
29
30
|
|
|
31
|
+
### Docker
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# GitHub Container Registry에서 Pull
|
|
35
|
+
docker pull ghcr.io/hypn4/chzzk-python:latest
|
|
36
|
+
|
|
37
|
+
# CLI 명령어 실행
|
|
38
|
+
docker run --rm ghcr.io/hypn4/chzzk-python --help
|
|
39
|
+
docker run --rm ghcr.io/hypn4/chzzk-python auth --help
|
|
40
|
+
|
|
41
|
+
# 채팅 보기 (환경 변수 사용)
|
|
42
|
+
docker run --rm -it \
|
|
43
|
+
-e CHZZK_NID_AUT="your-nid-aut" \
|
|
44
|
+
-e CHZZK_NID_SES="your-nid-ses" \
|
|
45
|
+
ghcr.io/hypn4/chzzk-python chat watch CHANNEL_ID
|
|
46
|
+
|
|
47
|
+
# 대화형 채팅 (-it 플래그 필요)
|
|
48
|
+
docker run --rm -it \
|
|
49
|
+
-e CHZZK_NID_AUT="your-nid-aut" \
|
|
50
|
+
-e CHZZK_NID_SES="your-nid-ses" \
|
|
51
|
+
ghcr.io/hypn4/chzzk-python chat send CHANNEL_ID -i
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
사용 가능한 태그: `latest`, `X.Y.Z`, `X.Y`, `X`
|
|
55
|
+
|
|
30
56
|
## 빠른 시작
|
|
31
57
|
|
|
32
58
|
```python
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.
|
|
32
|
-
__version_tuple__ = version_tuple = (0,
|
|
31
|
+
__version__ = version = '0.12.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 12, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|