ferogram 0.1.0__tar.gz → 0.1.2__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.
Files changed (41) hide show
  1. ferogram-0.1.2/.github/workflows/publish.yml +232 -0
  2. {ferogram-0.1.0 → ferogram-0.1.2}/Cargo.lock +1 -1
  3. {ferogram-0.1.0 → ferogram-0.1.2}/Cargo.toml +3 -3
  4. {ferogram-0.1.0 → ferogram-0.1.2}/PKG-INFO +1 -1
  5. {ferogram-0.1.0 → ferogram-0.1.2}/pyproject.toml +1 -1
  6. ferogram-0.1.0/.github/workflows/publish.yml +0 -149
  7. {ferogram-0.1.0 → ferogram-0.1.2}/.gitignore +0 -0
  8. {ferogram-0.1.0 → ferogram-0.1.2}/LICENSE-APACHE +0 -0
  9. {ferogram-0.1.0 → ferogram-0.1.2}/LICENSE-MIT +0 -0
  10. {ferogram-0.1.0 → ferogram-0.1.2}/README.md +0 -0
  11. {ferogram-0.1.0 → ferogram-0.1.2}/examples/command_bot.py +0 -0
  12. {ferogram-0.1.0 → ferogram-0.1.2}/examples/echo_bot.py +0 -0
  13. {ferogram-0.1.0 → ferogram-0.1.2}/examples/raw_invoke.py +0 -0
  14. {ferogram-0.1.0 → ferogram-0.1.2}/examples/send_hi.py +0 -0
  15. {ferogram-0.1.0 → ferogram-0.1.2}/examples/send_media.py +0 -0
  16. {ferogram-0.1.0 → ferogram-0.1.2}/examples/send_message.py +0 -0
  17. {ferogram-0.1.0 → ferogram-0.1.2}/examples/update_handlers.py +0 -0
  18. {ferogram-0.1.0 → ferogram-0.1.2}/examples/userbot.py +0 -0
  19. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/__init__.py +0 -0
  20. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/client.py +0 -0
  21. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/filters.py +0 -0
  22. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/logging.py +0 -0
  23. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/py.typed +0 -0
  24. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw/__init__.py +0 -0
  25. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw/api/__init__.py +0 -0
  26. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw/api/functions.py +0 -0
  27. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw/api/types.py +0 -0
  28. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw/codegen.py +0 -0
  29. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw/generated/__init__.py +0 -0
  30. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw/generated/_tl_schema.py +0 -0
  31. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw/generated/functions.py +0 -0
  32. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw/generated/types.py +0 -0
  33. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw/tl.py +0 -0
  34. {ferogram-0.1.0 → ferogram-0.1.2}/ferogram/raw_api.tl +0 -0
  35. {ferogram-0.1.0 → ferogram-0.1.2}/src/auth.rs +0 -0
  36. {ferogram-0.1.0 → ferogram-0.1.2}/src/client.rs +0 -0
  37. {ferogram-0.1.0 → ferogram-0.1.2}/src/lib.rs +0 -0
  38. {ferogram-0.1.0 → ferogram-0.1.2}/src/message.rs +0 -0
  39. {ferogram-0.1.0 → ferogram-0.1.2}/src/raw.rs +0 -0
  40. {ferogram-0.1.0 → ferogram-0.1.2}/src/types.rs +0 -0
  41. {ferogram-0.1.0 → ferogram-0.1.2}/src/updates.rs +0 -0
@@ -0,0 +1,232 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+ workflow_dispatch:
7
+ inputs:
8
+ job:
9
+ description: "Which job to run"
10
+ required: true
11
+ default: all
12
+ type: choice
13
+ options:
14
+ - all
15
+ - linux
16
+ - macos
17
+ - windows
18
+ - android
19
+ - sdist
20
+ publish:
21
+ description: "Upload to PyPI after build"
22
+ required: false
23
+ default: false
24
+ type: boolean
25
+
26
+ jobs:
27
+
28
+ linux:
29
+ if: github.event_name == 'push' || inputs.job == 'all' || inputs.job == 'linux'
30
+ runs-on: ubuntu-latest
31
+ strategy:
32
+ fail-fast: false
33
+ matrix:
34
+ target:
35
+ - x86_64-unknown-linux-gnu
36
+ - aarch64-unknown-linux-gnu
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+ - uses: actions/setup-python@v5
40
+ with:
41
+ python-version: "3.12"
42
+ - name: Cache Rust build artifacts
43
+ uses: Swatinem/rust-cache@v2
44
+ with:
45
+ key: ${{ matrix.target }}
46
+ - uses: PyO3/maturin-action@v1
47
+ # ring's build.rs compiles ARM assembly via cc-rs using the manylinux
48
+ # cross-compiler, which doesn't define __ARM_ARCH. Explicitly set it.
49
+ env:
50
+ CFLAGS_aarch64_unknown_linux_gnu: "-D__ARM_ARCH=8 -march=armv8-a"
51
+ with:
52
+ target: ${{ matrix.target }}
53
+ args: --release --out dist
54
+ manylinux: auto
55
+ - uses: actions/upload-artifact@v4
56
+ with:
57
+ name: wheels-linux-${{ matrix.target }}
58
+ path: dist
59
+
60
+ macos:
61
+ if: github.event_name == 'push' || inputs.job == 'all' || inputs.job == 'macos'
62
+ runs-on: macos-latest
63
+ strategy:
64
+ fail-fast: false
65
+ matrix:
66
+ target:
67
+ - x86_64-apple-darwin
68
+ - aarch64-apple-darwin
69
+ steps:
70
+ - uses: actions/checkout@v4
71
+ - uses: actions/setup-python@v5
72
+ with:
73
+ python-version: "3.12"
74
+ - name: Cache Rust build artifacts
75
+ uses: Swatinem/rust-cache@v2
76
+ with:
77
+ key: ${{ matrix.target }}
78
+ - uses: PyO3/maturin-action@v1
79
+ with:
80
+ target: ${{ matrix.target }}
81
+ args: --release --out dist
82
+ - uses: actions/upload-artifact@v4
83
+ with:
84
+ name: wheels-macos-${{ matrix.target }}
85
+ path: dist
86
+
87
+ windows:
88
+ if: github.event_name == 'push' || inputs.job == 'all' || inputs.job == 'windows'
89
+ runs-on: windows-latest
90
+ steps:
91
+ - uses: actions/checkout@v4
92
+ - uses: actions/setup-python@v5
93
+ with:
94
+ python-version: "3.12"
95
+ - name: Cache Rust build artifacts
96
+ uses: Swatinem/rust-cache@v2
97
+ - uses: PyO3/maturin-action@v1
98
+ with:
99
+ args: --release --out dist
100
+ - uses: actions/upload-artifact@v4
101
+ with:
102
+ name: wheels-windows
103
+ path: dist
104
+
105
+ android:
106
+ if: github.event_name == 'push' || inputs.job == 'all' || inputs.job == 'android'
107
+ runs-on: ubuntu-latest
108
+ strategy:
109
+ fail-fast: false
110
+ matrix:
111
+ include:
112
+ - target: aarch64-linux-android
113
+ api: 24
114
+ arch: arm64-v8a
115
+ - target: armv7-linux-androideabi
116
+ api: 24
117
+ arch: armeabi-v7a
118
+ - target: x86_64-linux-android
119
+ api: 24
120
+ arch: x86_64
121
+ - target: i686-linux-android
122
+ api: 24
123
+ arch: x86
124
+ steps:
125
+ - uses: actions/checkout@v4
126
+
127
+ - uses: actions/setup-python@v5
128
+ with:
129
+ python-version: "3.12"
130
+
131
+ - name: Setup Android NDK r26d
132
+ uses: nttld/setup-ndk@v1
133
+ id: ndk
134
+ with:
135
+ ndk-version: r26d
136
+ link-to-sdk: true
137
+
138
+ - name: Cache Rust build artifacts
139
+ uses: Swatinem/rust-cache@v2
140
+ with:
141
+ key: ${{ matrix.target }}
142
+
143
+ - name: Add Rust Android target
144
+ run: rustup target add ${{ matrix.target }}
145
+
146
+ - name: Install maturin
147
+ run: pip install maturin
148
+
149
+ - name: Build Android wheel
150
+ env:
151
+ ANDROID_NDK_HOME: ${{ steps.ndk.outputs.ndk-path }}
152
+ ANDROID_API_LEVEL: ${{ matrix.api }}
153
+ PYO3_CROSS_PYTHON_VERSION: "3.12"
154
+ run: |
155
+ NDK_BIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
156
+ TARGET=${{ matrix.target }}
157
+ API=${{ matrix.api }}
158
+
159
+ # Resolve the correct clang triple for this target + API level
160
+ case "$TARGET" in
161
+ aarch64-linux-android) CLANG_PREFIX="aarch64-linux-android${API}" ;;
162
+ armv7-linux-androideabi) CLANG_PREFIX="armv7a-linux-androideabi${API}" ;;
163
+ x86_64-linux-android) CLANG_PREFIX="x86_64-linux-android${API}" ;;
164
+ i686-linux-android) CLANG_PREFIX="i686-linux-android${API}" ;;
165
+ esac
166
+
167
+ # cc-rs reads CC_<target> with lowercase triple (dashes -> underscores).
168
+ # CARGO_TARGET_<TARGET>_LINKER uses uppercase. Split accordingly.
169
+ TARGET_UPPER=$(echo "$TARGET" | tr '[:lower:]-' '[:upper:]_')
170
+ TARGET_LOWER=$(echo "$TARGET" | tr '-' '_')
171
+ export CC_${TARGET_LOWER}=$NDK_BIN/${CLANG_PREFIX}-clang
172
+ export CXX_${TARGET_LOWER}=$NDK_BIN/${CLANG_PREFIX}-clang++
173
+ export AR_${TARGET_LOWER}=$NDK_BIN/llvm-ar
174
+ export CARGO_TARGET_${TARGET_UPPER}_LINKER=$NDK_BIN/${CLANG_PREFIX}-clang
175
+
176
+ # pyo3 emits -lpython3.12 for abi3 cross-builds. The linker needs a
177
+ # lib to satisfy that reference; at runtime Termux's Python provides
178
+ # the real symbols. Create empty stubs and inject via RUSTFLAGS so
179
+ # the linker finds them without maturin treating the dir as a Python
180
+ # sysroot (which PYO3_CROSS_LIB_DIR would do, triggering a
181
+ # _sysconfigdata*.py search and failing).
182
+ STUB_DIR=$(mktemp -d)
183
+ $NDK_BIN/llvm-ar rcs "$STUB_DIR/libpython3.12.a"
184
+ $NDK_BIN/llvm-ar rcs "$STUB_DIR/libpython3.a"
185
+ export RUSTFLAGS="-L native=$STUB_DIR"
186
+
187
+ maturin build \
188
+ --release \
189
+ --target $TARGET \
190
+ --compatibility off \
191
+ --out dist
192
+
193
+ - uses: actions/upload-artifact@v4
194
+ with:
195
+ name: wheels-android-${{ matrix.target }}
196
+ path: dist
197
+
198
+ sdist:
199
+ if: github.event_name == 'push' || inputs.job == 'all' || inputs.job == 'sdist'
200
+ runs-on: ubuntu-latest
201
+ steps:
202
+ - uses: actions/checkout@v4
203
+ - uses: PyO3/maturin-action@v1
204
+ with:
205
+ command: sdist
206
+ args: --out dist
207
+ - uses: actions/upload-artifact@v4
208
+ with:
209
+ name: wheels-sdist
210
+ path: dist
211
+
212
+ publish:
213
+ needs: [linux, macos, windows, android, sdist]
214
+ if: |
215
+ always() &&
216
+ (github.event_name == 'push' || inputs.publish == true) &&
217
+ !contains(needs.*.result, 'failure') &&
218
+ !contains(needs.*.result, 'cancelled')
219
+ runs-on: ubuntu-latest
220
+ environment: pypi
221
+ permissions:
222
+ id-token: write
223
+ steps:
224
+ - uses: actions/download-artifact@v4
225
+ with:
226
+ pattern: "wheels-*"
227
+ merge-multiple: true
228
+ path: dist
229
+ - uses: PyO3/maturin-action@v1
230
+ with:
231
+ command: upload
232
+ args: --non-interactive --skip-existing dist/*
@@ -347,7 +347,7 @@ dependencies = [
347
347
 
348
348
  [[package]]
349
349
  name = "ferogram-py"
350
- version = "0.1.0"
350
+ version = "0.1.2"
351
351
  dependencies = [
352
352
  "ferogram",
353
353
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "ferogram-py"
3
- version = "0.1.0"
3
+ version = "0.1.2"
4
4
  edition = "2024"
5
5
  description = "Python bindings for ferogram (Rust MTProto)"
6
6
  license = "MIT OR Apache-2.0"
@@ -12,10 +12,10 @@ crate-type = ["cdylib"]
12
12
 
13
13
  [dependencies]
14
14
  ferogram = { git = "https://github.com/ankit-chaubey/ferogram", branch = "main" }
15
- pyo3 = { version = "0.23", features = ["extension-module", "abi3-py39"] }
15
+ pyo3 = { version = "0.23", features = ["extension-module", "abi3-py312"] }
16
16
  pyo3-async-runtimes = { version = "0.23", features = ["tokio-runtime"] }
17
17
  tokio = { version = "1", features = ["full"] }
18
- # Note: do NOT add ferogram-tl-types as a direct dep use ferogram::tl instead
18
+ # Note: do NOT add ferogram-tl-types as a direct dep - use ferogram::tl instead
19
19
  # to avoid a duplicate-crate version conflict (crates.io vs git).
20
20
 
21
21
  [profile.release]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ferogram
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "ferogram"
7
- version = "0.1.0"
7
+ version = "0.1.2"
8
8
  description = "Python wrapper for ferogram, blazing-fast Rust MTProto library for Telegram."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT OR Apache-2.0" }
@@ -1,149 +0,0 @@
1
- name: Publish to PyPI
2
-
3
- on:
4
- push:
5
- tags: ["v*"]
6
- workflow_dispatch:
7
- inputs:
8
- job:
9
- description: "Which job to run"
10
- required: true
11
- default: all
12
- type: choice
13
- options:
14
- - all
15
- - linux
16
- - macos
17
- - windows
18
- - sdist
19
- publish:
20
- description: "Upload to PyPI after build"
21
- required: false
22
- default: false
23
- type: boolean
24
-
25
- jobs:
26
-
27
- linux:
28
- if: github.event_name == 'push' || inputs.job == 'all' || inputs.job == 'linux'
29
- runs-on: ubuntu-latest
30
- strategy:
31
- # Prevent one target failing from cancelling its sibling.
32
- # Without this, aarch64 failing was silently cancelling x86_64.
33
- fail-fast: false
34
- matrix:
35
- target:
36
- - x86_64-unknown-linux-gnu
37
- - aarch64-unknown-linux-gnu
38
- steps:
39
- - uses: actions/checkout@v4
40
- - uses: actions/setup-python@v5
41
- with:
42
- python-version: "3.12"
43
- - name: Cache Rust build artifacts
44
- uses: Swatinem/rust-cache@v2
45
- with:
46
- key: ${{ matrix.target }}
47
- - uses: PyO3/maturin-action@v1
48
- # The ring crate's build.rs compiles ARM assembly (chacha-armv8-linux64.S)
49
- # via cc-rs using the manylinux cross-compiler. That compiler doesn't
50
- # define __ARM_ARCH, which ring requires:
51
- # include/ring-core/asm_base.h:73: #error "ARM assembler must define __ARM_ARCH"
52
- # Setting CFLAGS for the aarch64 target via cc-rs's env convention fixes
53
- # this without touching any upstream crate.
54
- env:
55
- CFLAGS_aarch64_unknown_linux_gnu: "-D__ARM_ARCH=8 -march=armv8-a"
56
- with:
57
- target: ${{ matrix.target }}
58
- args: --release --out dist
59
- manylinux: auto
60
- - uses: actions/upload-artifact@v4
61
- with:
62
- name: wheels-linux-${{ matrix.target }}
63
- path: dist
64
-
65
- macos:
66
- if: github.event_name == 'push' || inputs.job == 'all' || inputs.job == 'macos'
67
- runs-on: macos-latest
68
- strategy:
69
- fail-fast: false
70
- matrix:
71
- target:
72
- - x86_64-apple-darwin
73
- - aarch64-apple-darwin
74
- steps:
75
- - uses: actions/checkout@v4
76
- - uses: actions/setup-python@v5
77
- with:
78
- python-version: "3.12"
79
- - name: Cache Rust build artifacts
80
- uses: Swatinem/rust-cache@v2
81
- with:
82
- key: ${{ matrix.target }}
83
- - uses: PyO3/maturin-action@v1
84
- with:
85
- target: ${{ matrix.target }}
86
- args: --release --out dist
87
- - uses: actions/upload-artifact@v4
88
- with:
89
- name: wheels-macos-${{ matrix.target }}
90
- path: dist
91
-
92
- windows:
93
- if: github.event_name == 'push' || inputs.job == 'all' || inputs.job == 'windows'
94
- runs-on: windows-latest
95
- steps:
96
- - uses: actions/checkout@v4
97
- - uses: actions/setup-python@v5
98
- with:
99
- python-version: "3.12"
100
- - name: Cache Rust build artifacts
101
- uses: Swatinem/rust-cache@v2
102
- - uses: PyO3/maturin-action@v1
103
- with:
104
- args: --release --out dist
105
- - uses: actions/upload-artifact@v4
106
- with:
107
- name: wheels-windows
108
- path: dist
109
-
110
- sdist:
111
- if: github.event_name == 'push' || inputs.job == 'all' || inputs.job == 'sdist'
112
- runs-on: ubuntu-latest
113
- steps:
114
- - uses: actions/checkout@v4
115
- - uses: PyO3/maturin-action@v1
116
- with:
117
- command: sdist
118
- args: --out dist
119
- - uses: actions/upload-artifact@v4
120
- with:
121
- name: wheels-sdist
122
- path: dist
123
-
124
- publish:
125
- # Android was removed from this workflow entirely. PyO3 abi3 wheels require
126
- # libpython3.9.so at link time — a library that does not exist in the Android
127
- # NDK sysroot. There is no lightweight fix; a full Python-for-Android sysroot
128
- # would be required. More importantly, PyPI does not serve Android wheel tags,
129
- # so those wheels would never be pip-installable anyway.
130
- needs: [linux, macos, windows, sdist]
131
- if: |
132
- always() &&
133
- (github.event_name == 'push' || inputs.publish == true) &&
134
- !contains(needs.*.result, 'failure') &&
135
- !contains(needs.*.result, 'cancelled')
136
- runs-on: ubuntu-latest
137
- environment: pypi
138
- permissions:
139
- id-token: write
140
- steps:
141
- - uses: actions/download-artifact@v4
142
- with:
143
- pattern: "wheels-*"
144
- merge-multiple: true
145
- path: dist
146
- - uses: PyO3/maturin-action@v1
147
- with:
148
- command: upload
149
- args: --non-interactive --skip-existing dist/*
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