pyproc 0.1.12__tar.gz → 0.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.
- pyproc-0.2/.github/workflows/pyproc-pypi.yml +60 -0
- pyproc-0.2/.gitignore +57 -0
- pyproc-0.2/CHANGELOG.md +78 -0
- pyproc-0.2/Makefile +39 -0
- pyproc-0.2/PKG-INFO +210 -0
- pyproc-0.2/README.md +184 -0
- {pyproc-0.1.12 → pyproc-0.2}/pyproc/__init__.py +1 -1
- pyproc-0.1.12/scripts/downloader.py → pyproc-0.2/pyproc/cli.py +26 -48
- {pyproc-0.1.12 → pyproc-0.2}/pyproc/lpse.py +46 -107
- {pyproc-0.1.12/scripts → pyproc-0.2/pyproc}/text.py +1 -0
- {pyproc-0.1.12 → pyproc-0.2}/pyproc/utils.py +26 -0
- pyproc-0.2/pyproject.toml +40 -0
- pyproc-0.1.12/pyproc.egg-info/requires.txt → pyproc-0.2/requirements.txt +4 -3
- pyproc-0.2/tests/.gitignore +6 -0
- pyproc-0.2/tests/supporting_files/list-host-with-filename.txt +2 -0
- pyproc-0.2/tests/supporting_files/list-host.txt +2 -0
- pyproc-0.2/tests/test_downloader.py +294 -0
- pyproc-0.2/tests/test_lpse.py +420 -0
- pyproc-0.1.12/PKG-INFO +0 -231
- pyproc-0.1.12/README.md +0 -206
- pyproc-0.1.12/pyproc.egg-info/PKG-INFO +0 -231
- pyproc-0.1.12/pyproc.egg-info/SOURCES.txt +0 -17
- pyproc-0.1.12/pyproc.egg-info/dependency_links.txt +0 -1
- pyproc-0.1.12/pyproc.egg-info/entry_points.txt +0 -2
- pyproc-0.1.12/pyproc.egg-info/top_level.txt +0 -2
- pyproc-0.1.12/pyproc.egg-info/zip-safe +0 -1
- pyproc-0.1.12/setup.cfg +0 -4
- pyproc-0.1.12/setup.py +0 -62
- {pyproc-0.1.12 → pyproc-0.2}/LICENSE +0 -0
- {pyproc-0.1.12 → pyproc-0.2}/pyproc/exceptions.py +0 -0
- {pyproc-0.1.12/scripts → pyproc-0.2/tests}/__init__.py +0 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# This workflow will install Python dependencies, run tests and lint with a single version of Python
|
|
2
|
+
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
|
|
3
|
+
|
|
4
|
+
name: PyProc Build and Release
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
tags:
|
|
9
|
+
- v*
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
release-build:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Set up Python
|
|
18
|
+
uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: '3.x'
|
|
21
|
+
|
|
22
|
+
- name: Display Python Version
|
|
23
|
+
run: python -c "import sys; print(sys.version)"
|
|
24
|
+
|
|
25
|
+
- name: Clean build directory
|
|
26
|
+
run: rm -rf ./dists ./pyproc.egg-info ./tests/*.csv ./tests/*.idx ./*csv ./*idx
|
|
27
|
+
|
|
28
|
+
- name: Build Package
|
|
29
|
+
run: |
|
|
30
|
+
python -m pip install build
|
|
31
|
+
python -m build
|
|
32
|
+
|
|
33
|
+
- name: Upload distributions
|
|
34
|
+
uses: actions/upload-artifact@v4
|
|
35
|
+
with:
|
|
36
|
+
name: release-dists
|
|
37
|
+
path: dist/
|
|
38
|
+
|
|
39
|
+
pypi-publish:
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
needs:
|
|
42
|
+
- release-build
|
|
43
|
+
permissions:
|
|
44
|
+
id-token: write
|
|
45
|
+
|
|
46
|
+
environment:
|
|
47
|
+
name: pypi
|
|
48
|
+
|
|
49
|
+
steps:
|
|
50
|
+
- name: Retrieve release distributions
|
|
51
|
+
uses: actions/download-artifact@v4
|
|
52
|
+
with:
|
|
53
|
+
name: release-dists
|
|
54
|
+
path: dist/
|
|
55
|
+
|
|
56
|
+
- name: Publish release distributions to PyPI
|
|
57
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
58
|
+
with:
|
|
59
|
+
package-dir: dist/
|
|
60
|
+
|
pyproc-0.2/.gitignore
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
.DS_Store
|
|
2
|
+
.idea
|
|
3
|
+
venv
|
|
4
|
+
# Byte-compiled / optimized / DLL files
|
|
5
|
+
__pycache__/
|
|
6
|
+
*.py[cod]
|
|
7
|
+
*$py.class
|
|
8
|
+
|
|
9
|
+
# C extensions
|
|
10
|
+
*.so
|
|
11
|
+
|
|
12
|
+
# Distribution / packaging
|
|
13
|
+
.Python
|
|
14
|
+
build/
|
|
15
|
+
develop-eggs/
|
|
16
|
+
dist/
|
|
17
|
+
downloads/
|
|
18
|
+
eggs/
|
|
19
|
+
.eggs/
|
|
20
|
+
lib/
|
|
21
|
+
lib64/
|
|
22
|
+
parts/
|
|
23
|
+
sdist/
|
|
24
|
+
var/
|
|
25
|
+
wheels/
|
|
26
|
+
pip-wheel-metadata/
|
|
27
|
+
share/python-wheels/
|
|
28
|
+
*.egg-info/
|
|
29
|
+
.installed.cfg
|
|
30
|
+
*.egg
|
|
31
|
+
MANIFEST
|
|
32
|
+
|
|
33
|
+
# PyInstaller
|
|
34
|
+
# Usually these files are written by a python script from a template
|
|
35
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
36
|
+
*.manifest
|
|
37
|
+
*.spec
|
|
38
|
+
|
|
39
|
+
# Installer logs
|
|
40
|
+
pip-log.txt
|
|
41
|
+
pip-delete-this-directory.txt
|
|
42
|
+
|
|
43
|
+
# Unit test / coverage reports
|
|
44
|
+
htmlcov/
|
|
45
|
+
.tox/
|
|
46
|
+
.nox/
|
|
47
|
+
.coverage
|
|
48
|
+
.coverage.*
|
|
49
|
+
.cache
|
|
50
|
+
nosetests.xml
|
|
51
|
+
coverage.xml
|
|
52
|
+
*.cover
|
|
53
|
+
.hypothesis/
|
|
54
|
+
.pytest_cache/
|
|
55
|
+
*.csv
|
|
56
|
+
*.idx
|
|
57
|
+
statistic.txt
|
pyproc-0.2/CHANGELOG.md
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
All notable changes to this project will be documented in this file.
|
|
3
|
+
|
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## 0.1.7
|
|
8
|
+
|
|
9
|
+
### Fix
|
|
10
|
+
- [downloader] fix error saat menggabungkan file detil jika pemenang tidak ditemukan
|
|
11
|
+
- [downloader] ketika retry download , detil downloader akan menggunakan cache dari proses sebelumnya
|
|
12
|
+
- [downloader] pemilihan pemenang berdasarkan hirarki pemenang berkontrak > pemenang terverifikasi > pemenang
|
|
13
|
+
- [downloader] fix filter tahun anggaran, jika tidak ada data tahun anggaran maka filter akan berdasarkan data tanggal pembuatan
|
|
14
|
+
- [package] Fix NPWP - Nama Peserta splitter pada hasil evaluasi
|
|
15
|
+
- [package] menghilangkan fungsi pengecekan url rewrite dengan hardcoded path `/eproc4` pada host SPSE
|
|
16
|
+
- [package] bypass parsing auth token jika versi SPSE < 20191009
|
|
17
|
+
|
|
18
|
+
### Add
|
|
19
|
+
- [downloader] jika proses download index gagal di tengah jalan, aplikasi akan melanjutkan berdasarkan posisi batch terakhir
|
|
20
|
+
- [downloader] menambahkan jenis paket pengadaan pada header informasi
|
|
21
|
+
- [downloader] menambahkan argument `--skip-spse-check`
|
|
22
|
+
- [package] menambahkan parameter `skip_spse_checking` untuk menghindari proses parsing info LPSE yang gagal jika aplikasi menggunakan custom homepage
|
|
23
|
+
|
|
24
|
+
## Change
|
|
25
|
+
- update test case
|
|
26
|
+
|
|
27
|
+
## 0.1.6
|
|
28
|
+
|
|
29
|
+
### Change
|
|
30
|
+
- Mengganti tipe data menjadi boolean untuk kolom pemenang dan pemenang berkontrak pada hasil evaluasi
|
|
31
|
+
- Set default index download delay menjadi 1 detik
|
|
32
|
+
- Set pemenang tender dari hasil evaluasi
|
|
33
|
+
- Mengganti separator tahun anggaran (range) dari '-' (koma) menjadi '-' (dash)
|
|
34
|
+
- update test case
|
|
35
|
+
- minor update
|
|
36
|
+
|
|
37
|
+
## 0.1.5
|
|
38
|
+
|
|
39
|
+
### Add
|
|
40
|
+
- menambahkan parameter `--index-download-delay` pada downloader CLI karena beberapa situs LPSE membatasi jumlah request
|
|
41
|
+
|
|
42
|
+
### Fix
|
|
43
|
+
- fix `LpseDetil.get_pemenang` error karena menggunakan kolom hasil negosiasi sebagai parameter pengurutan
|
|
44
|
+
|
|
45
|
+
## 0.1.4
|
|
46
|
+
|
|
47
|
+
### Fix
|
|
48
|
+
- Fix lpse pool error pada downloader karena belum implementasi authenticity token
|
|
49
|
+
|
|
50
|
+
## 0.1.3
|
|
51
|
+
|
|
52
|
+
### Fix
|
|
53
|
+
- Fix download index paket error karena penambahan parameter pada API SPSE
|
|
54
|
+
|
|
55
|
+
### Add
|
|
56
|
+
- Menambahkan method `Lpse.get_auth_token` untuk mendapatkan `auth_token` yang digunakan pada saat mendapatkan data index paket
|
|
57
|
+
|
|
58
|
+
## 0.1.2
|
|
59
|
+
|
|
60
|
+
### Fix
|
|
61
|
+
- Fix downloader error karena perubahan api pada 0.1.1
|
|
62
|
+
|
|
63
|
+
## 0.1.1
|
|
64
|
+
|
|
65
|
+
### Fix
|
|
66
|
+
- Fix pemenang double pada package dan downloader dengan memilih nilai penawaran paling rendah
|
|
67
|
+
|
|
68
|
+
## 0.1
|
|
69
|
+
Release versi stable pertama
|
|
70
|
+
|
|
71
|
+
### Fitur
|
|
72
|
+
|
|
73
|
+
- Dukungan Penuh untuk API SPSE Versi 4
|
|
74
|
+
- Mendapatkan Daftar Paket Tender dan Non Tender
|
|
75
|
+
- Mendapatkan Detil Paket (Pengumuman, Peserta, Hasil Evaluasi, Pemenang, Pemenang Berkontrak, Jadwal Penetapan Pemenang, Jadwal Penandatangan Kontrak)
|
|
76
|
+
- Filter pencarian paket tender/non tender berdasarkan kategori pengadaan.
|
|
77
|
+
- Mengurutkan Pencarian paket berdasarkan id paket, nama instansi, tahap paket, dan HPS
|
|
78
|
+
- CLI Downloader
|
pyproc-0.2/Makefile
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
.PHONY: test test-verbose test-lpse test-downloader install clean build
|
|
2
|
+
|
|
3
|
+
PYTHON ?= python3
|
|
4
|
+
VENV = .venv
|
|
5
|
+
VENV_PYTHON = $(VENV)/bin/python
|
|
6
|
+
VENV_PIP = $(VENV)/bin/pip
|
|
7
|
+
|
|
8
|
+
# Create venv and install dependencies
|
|
9
|
+
install: $(VENV)/bin/activate
|
|
10
|
+
|
|
11
|
+
$(VENV)/bin/activate: pyproject.toml
|
|
12
|
+
$(PYTHON) -m venv --without-pip $(VENV)
|
|
13
|
+
curl -sS https://bootstrap.pypa.io/get-pip.py | $(VENV_PYTHON)
|
|
14
|
+
$(VENV_PIP) install pytest
|
|
15
|
+
$(VENV_PIP) install -e .
|
|
16
|
+
touch $(VENV)/bin/activate
|
|
17
|
+
|
|
18
|
+
# Run tests
|
|
19
|
+
test: install
|
|
20
|
+
$(VENV_PYTHON) -m pytest
|
|
21
|
+
|
|
22
|
+
# Run tests with verbose output
|
|
23
|
+
test-verbose: install
|
|
24
|
+
$(VENV_PYTHON) -m pytest -v
|
|
25
|
+
|
|
26
|
+
# Run tests for a specific file
|
|
27
|
+
test-lpse: install
|
|
28
|
+
$(VENV_PYTHON) -m pytest tests/test_lpse.py
|
|
29
|
+
|
|
30
|
+
test-downloader: install
|
|
31
|
+
$(VENV_PYTHON) -m pytest tests/test_downloader.py
|
|
32
|
+
|
|
33
|
+
# Clean build artifacts and test outputs (keeps .venv)
|
|
34
|
+
clean:
|
|
35
|
+
rm -rf ./dists ./pyproc.egg-info ./tests/*.csv ./tests/*.idx ./*csv ./*idx ./build ./*.egg-info ./.pytest_cache __pycache__ ./**/__pycache__
|
|
36
|
+
|
|
37
|
+
# Build the package
|
|
38
|
+
build: install
|
|
39
|
+
$(VENV_PYTHON) -m build
|
pyproc-0.2/PKG-INFO
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pyproc
|
|
3
|
+
Version: 0.2
|
|
4
|
+
Summary: Python Inaproc SPSE SDK
|
|
5
|
+
Project-URL: Homepage, https://github.com/wakataw/pyproc
|
|
6
|
+
Project-URL: Issues, https://github.com/wakataw/pyproc/issues
|
|
7
|
+
Author-email: Agung Pratama <workwithagung@gmail.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Natural Language :: English
|
|
14
|
+
Classifier: Natural Language :: Indonesian
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
17
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
|
+
Classifier: Topic :: Utilities
|
|
20
|
+
Requires-Python: >=3.9
|
|
21
|
+
Requires-Dist: backoff
|
|
22
|
+
Requires-Dist: beautifulsoup4
|
|
23
|
+
Requires-Dist: html5lib
|
|
24
|
+
Requires-Dist: requests
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
# PyProc
|
|
28
|
+
|
|
29
|
+
 [](https://pypi.org/project/pyproc/) [](https://www.python.org/downloads/) [](https://github.com/wakataw/pyproc)
|
|
30
|
+
|
|
31
|
+
PyProc (Python Procurement) merupakan wrapper untuk API SPSE yang ditulis dalam bahasa Python. Sistem Pengadaan Secara Elektronik (SPSE) SPSE merupakan aplikasi e-Procurement yang dikembangkan oleh LKPP untuk digunakan oleh LPSE di instansi pemerintah seluruh Indonesia.
|
|
32
|
+
|
|
33
|
+
> DISCLAIMER:
|
|
34
|
+
>
|
|
35
|
+
> Penulis tidak terafiliasi dengan pengembang SPSE atau pemilik aplikasi SPSE. Software ini dikembangkan dengan tujuan akademis, bentuk pengawasan oleh masyarakat, dan membantu pengusaha untuk mempermudah otomasi perolehan informasi pengadaan dari pemerintah.
|
|
36
|
+
>
|
|
37
|
+
> Penggunaan yang tidak wajar dan mengganggu sebagian atau seluruh fungsi aplikasi SPSE pada satuan kerja menjadi tanggung jawab masing-masing pengguna.
|
|
38
|
+
>
|
|
39
|
+
> PyProc ada karena SPSE ada, jadi gunakanlah dengan bijak dan secukupnya.
|
|
40
|
+
|
|
41
|
+
## Pemasangan
|
|
42
|
+
|
|
43
|
+
Pemasangan PyProc via `pip`:
|
|
44
|
+
```bash
|
|
45
|
+
$ pip install pyproc
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Upgrade PyProc via `pip`:
|
|
49
|
+
```bash
|
|
50
|
+
$ pip install pyproc --upgrade
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Instalasi versi unstable:
|
|
54
|
+
```bash
|
|
55
|
+
$ pip install git+https://github.com/wakataw/pyproc.git
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Penggunaan Command Line Interface
|
|
59
|
+
|
|
60
|
+
### Download Data LPSE
|
|
61
|
+
Format Command
|
|
62
|
+
```bash
|
|
63
|
+
$ pyproc [ARGUMENT] DAFTAR_LPSE
|
|
64
|
+
```
|
|
65
|
+
**Arguments**
|
|
66
|
+
|
|
67
|
+
| argumen | contoh | diperlukan | default | keterangan |
|
|
68
|
+
|-----------------------------|---------------------------------------------|------------|----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
69
|
+
| `DAFTAR_LPSE` | `pyproc pu` | Ya | - | Daftar alamat LPSE yang akan diunduh. <br>[Format Daftar LPSE](#format-daftar-lpse-lanjutan) |
|
|
70
|
+
| `-h --help` | `pyproc --help` | optional | - | menampilkan keterangan dan bantuan |
|
|
71
|
+
| `-k --keyword` | `pyproc --keyword "mobil dinas" ...` | optional | - | filter pencarian index paket berdasarkan kata kunci tertentu |
|
|
72
|
+
| `-t --tahun-anggaran` | `pyproc --tahun-anggaran 2021 ...` | optional | Tahun Berjalan | Filter pencarian index paket berdasarkan tahun anggaran tertentu. Fungsi ini hanya berlaku mulai dari SPSE 4.4. <br><br>Format Penulisan: <br>**ALL**: mengunduh seluruh data <br>**2021**: mengunduh data untuk tahun 2021 <br>**2015,2018,2019**: mengunduh data untuk tahun 2015, 2018, dan 2019<br>**2011-2020** mengunduh data untuk tahun 2011 s.d. 2020 |
|
|
73
|
+
| `--kategori` | `pyproc --kategori PENGADAAN_BARANG ...` | optional | - | Filter pencarian berdasarkan kategori pengadaan. <br>Daftar kategori: `PENGADAAN_BARANG`, `JASA_KONSULTANSI_BADAN_USAHA_NON_KONSTRUKSI`, `PEKERJAAN_KONSTRUKSI`, `JASA_LAINNYA`, `JASA_KONSULTANSI_PERORANGAN`, `JASA_KONSULTANSI_BADAN_USAHA_KONSTRUKSI` |
|
|
74
|
+
| `--nama-penyedia` | `pyproc --nama-penyedia "PT SUKA MAJU" ...` | optional | - | Filter pencarian index paket berdasarkan nama penyedia |
|
|
75
|
+
| `-c --chunk-size` | `pyproc --chunk-size 25 ...` | optional | 25 | Jumlah daftar paket per halaman yang diunduh. Semakin besar jumlah tidak menjamin proses download semakin cepat. Gunakanlah jumlah data yang wajar sehingga tidak membebani server SPSE. |
|
|
76
|
+
| `-w --workers` | `pyproc --workers 4 ...` | optional | 8 | Jumlah koneksi yang berjalan secara bersamaan saat mengunduh detil paket dengan maksimal 10 worker. |
|
|
77
|
+
| `-x --timeout` | `pyproc --timeout 60 ...` | optional | 30 | Waktu tunggu jika koneksi lambat (dalam detik) |
|
|
78
|
+
| `-n --non-tender` | `pyproc --non-tender ...` | optional | FALSE | Tambahkan argumen ini untuk mengunduh data non-tender/pengadaan langsung |
|
|
79
|
+
| `-d --index-download-delay` | `pyproc --index-download-delay 5 ...` | optional | 1 | Waktu jeda download index paket untuk setiap halaman/batch |
|
|
80
|
+
| `-o --output` | `pyproc --ouput csv ...` | optional | csv | Jenis data keluaran/hasil dari download. Format yang didukung csv dan json. Karena keterbatasan format, tidak semua data ditampilkan pada format csv. Jika memerlukan data detil yang komprehensif, gunakan format json karena mencangkup semua data detail. |
|
|
81
|
+
| `--keep-index` | `pyproc --keep-index ...` | optinal | FALSE | pyproc akan membentuk file idx (sqlite3 database) saat proses download dan akan dihapus ketika proses selesai. Tambahkan argumen ini jika tidak ingin menghapus database tersebut. |
|
|
82
|
+
| `-r --resume` | `pyproc --resume ...` | optinal | FALSE | Tambahkan argument ini untuk melanjutkan proses yang gagal (karena internet putus atau gangguan koneksi lainnya). Namun pastikan bahwa seluruh index sudah berhasil diunduh karena argumen --resume akan melewati proses download index. |
|
|
83
|
+
| `-s --sep` | `pyproc --sep ";" kemenkeu` | optional | `;` titik koma | Set custom separator untuk output format csv |
|
|
84
|
+
| `--log` | `pyproc --log INFO ...` | optional | INFO | Argumen untuk setting informasi yang ditampilkan pyproc pada terminal. Daftar nilai yang didukung: <br>`DEBUG`: menampilkan informasi sedetil mungkin<br>`INFO`: menampilkan informasi penting saja <br>`WARNING`: hanya menampilkan informasi yang bersifat warning <br>`ERROR`: hanya menampilkan error <br>`CRITICAL`: hanya menampilkan permasalahan yang bersifat kritis saja |
|
|
85
|
+
|
|
86
|
+
### Format Daftar LPSE (lanjutan)
|
|
87
|
+
PyProc dapat mengunduh data dari 1 atau lebih LPSE. Proses tersebut akan berjalan sesuai dengan nilai `DAFTAR_LPSE` yang diberikan user. Beberapa format yang didukung oleh PyProc adalah sebagai berikut:
|
|
88
|
+
- Download data dengan menyertakan nama file hasil download
|
|
89
|
+
|
|
90
|
+
Untuk set nama file secara manual, gunakan format `"alamatlpse[titik_koma]namafile"`.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
$ pyproc "kemenkeu;namafileouputkemenkeu" --output json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
perintah ini akan mengunduh data LPSE PU dan mengekspor data ke file `namafileouputkemenkeu.json`
|
|
97
|
+
|
|
98
|
+
- Download data lebih dari 1 LPSE
|
|
99
|
+
|
|
100
|
+
Untuk mengunduh lebih dari 1 lpse secara bersamaan, gunakan format `"alamat1[koma]alamat2[koma]alamat3"`
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
$ pyproc jakarta,pu,kemenkeu,sumbarprov
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
atau dengan menyertakan namafile dengan format `"alamat1[titikkoma]nama1[koma]alamat2[titikkoma]nama2"`
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
$ pyproc "jakarta;filejakarta,pu:filepu,kemenkeu:filekemenkeu,sumbarprov:filesumbarprov"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
- Download data berdasrakan daftar lpse pada file csv
|
|
113
|
+
Download paket LPSE dengan sumber alamat dari file
|
|
114
|
+
```bash
|
|
115
|
+
$ pyproc daftarlpse.csv
|
|
116
|
+
|
|
117
|
+
# konten daftarlpse.csv
|
|
118
|
+
sumbarprov
|
|
119
|
+
pu
|
|
120
|
+
kemenkeu
|
|
121
|
+
|
|
122
|
+
# konten daftarlpse.csv dengan nama hasil download
|
|
123
|
+
sumbarprov;lpse-sumbar
|
|
124
|
+
pu;lpse-pu.csv
|
|
125
|
+
kemenkeu;lpse-kemenkeu
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Penggunaan PyProc Sebagai Package
|
|
129
|
+
|
|
130
|
+
Untuk dapat menggunakan PyProc, anda harus mengimpornya terlebih dahulu dan menginisiasi objek `Lpse`
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from pyproc import Lpse
|
|
134
|
+
|
|
135
|
+
# Inisiasi objek lpse kementerian pu
|
|
136
|
+
lpse = Lpse('kemenkeu')
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Pencarian Daftar Paket Lelang
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
from pyproc import Lpse
|
|
143
|
+
|
|
144
|
+
# Inisiasi objek lpse kementerian pu
|
|
145
|
+
lpse = Lpse('pu')
|
|
146
|
+
|
|
147
|
+
# mendapatkan daftar paket lelang
|
|
148
|
+
daftar_lelang = lpse.get_paket_tender(start=0, length=2)
|
|
149
|
+
print(daftar_lelang)
|
|
150
|
+
|
|
151
|
+
# pencarian paket non tender (penunjukkan langsung)
|
|
152
|
+
daftar_pl = lpse.get_paket_non_tender(start=0, length=30)
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Pencarian Paket dengan mengurutkan berdasarkan kolom tertentu
|
|
156
|
+
```python
|
|
157
|
+
from pyproc import Lpse
|
|
158
|
+
from pyproc.lpse import By
|
|
159
|
+
|
|
160
|
+
lpse = Lpse('sumbarprov')
|
|
161
|
+
|
|
162
|
+
# pencarian daftar lelang, urutkan berdasarkan Harga Perkiraan Sendiri
|
|
163
|
+
daftar_lelang = lpse.get_paket_tender(start=0, length=30, order=By.HPS)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Filter pencarian paket berdasarkan kategori pengadaan
|
|
167
|
+
```python
|
|
168
|
+
from pyproc import Lpse
|
|
169
|
+
from pyproc import JenisPengadaan
|
|
170
|
+
|
|
171
|
+
# Inisiasi objek lpse kementerian padang
|
|
172
|
+
lpse = Lpse('padang')
|
|
173
|
+
|
|
174
|
+
# Kategori Pengadaan Barang
|
|
175
|
+
paket_pengadaan_barang = lpse.get_paket_tender(start=0, length=30, kategori=JenisPengadaan.PENGADAAN_BARANG)
|
|
176
|
+
paket_konstruksi = lpse.get_paket_tender(start=0, length=30, kategori=JenisPengadaan.PEKERJAAN_KONSTRUKSI)
|
|
177
|
+
|
|
178
|
+
# dst untuk kategori lainnya
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Pencarian Detil Paket Lelang
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
from pyproc import Lpse
|
|
185
|
+
|
|
186
|
+
lpse = Lpse('jakarta')
|
|
187
|
+
|
|
188
|
+
# mendapatkan semua detil paket lelang
|
|
189
|
+
detil = lpse.detil_paket_tender(id_paket='48658064')
|
|
190
|
+
detil.get_all_detil()
|
|
191
|
+
print(detil)
|
|
192
|
+
|
|
193
|
+
# mendapatkan hanya pemenang lelang
|
|
194
|
+
pemenang = detil.get_pemenang()
|
|
195
|
+
print(pemenang)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Uninstall
|
|
199
|
+
|
|
200
|
+
Untuk uninstall package jalankan perintah berikut:
|
|
201
|
+
```bash
|
|
202
|
+
$ pip uninstall pyproc
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## License
|
|
206
|
+
Paket ini di-release di bawah lisensi MIT.
|
|
207
|
+
|
|
208
|
+
## Donatur ☕️
|
|
209
|
+
Orang-orang yang berjasa menyediakan kopi sehingga pengembangan paket tetap berjalan
|
|
210
|
+
- Angga Rinaldi Rizal (50 cangkir ☕️)
|
pyproc-0.2/README.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# PyProc
|
|
2
|
+
|
|
3
|
+
 [](https://pypi.org/project/pyproc/) [](https://www.python.org/downloads/) [](https://github.com/wakataw/pyproc)
|
|
4
|
+
|
|
5
|
+
PyProc (Python Procurement) merupakan wrapper untuk API SPSE yang ditulis dalam bahasa Python. Sistem Pengadaan Secara Elektronik (SPSE) SPSE merupakan aplikasi e-Procurement yang dikembangkan oleh LKPP untuk digunakan oleh LPSE di instansi pemerintah seluruh Indonesia.
|
|
6
|
+
|
|
7
|
+
> DISCLAIMER:
|
|
8
|
+
>
|
|
9
|
+
> Penulis tidak terafiliasi dengan pengembang SPSE atau pemilik aplikasi SPSE. Software ini dikembangkan dengan tujuan akademis, bentuk pengawasan oleh masyarakat, dan membantu pengusaha untuk mempermudah otomasi perolehan informasi pengadaan dari pemerintah.
|
|
10
|
+
>
|
|
11
|
+
> Penggunaan yang tidak wajar dan mengganggu sebagian atau seluruh fungsi aplikasi SPSE pada satuan kerja menjadi tanggung jawab masing-masing pengguna.
|
|
12
|
+
>
|
|
13
|
+
> PyProc ada karena SPSE ada, jadi gunakanlah dengan bijak dan secukupnya.
|
|
14
|
+
|
|
15
|
+
## Pemasangan
|
|
16
|
+
|
|
17
|
+
Pemasangan PyProc via `pip`:
|
|
18
|
+
```bash
|
|
19
|
+
$ pip install pyproc
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Upgrade PyProc via `pip`:
|
|
23
|
+
```bash
|
|
24
|
+
$ pip install pyproc --upgrade
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Instalasi versi unstable:
|
|
28
|
+
```bash
|
|
29
|
+
$ pip install git+https://github.com/wakataw/pyproc.git
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Penggunaan Command Line Interface
|
|
33
|
+
|
|
34
|
+
### Download Data LPSE
|
|
35
|
+
Format Command
|
|
36
|
+
```bash
|
|
37
|
+
$ pyproc [ARGUMENT] DAFTAR_LPSE
|
|
38
|
+
```
|
|
39
|
+
**Arguments**
|
|
40
|
+
|
|
41
|
+
| argumen | contoh | diperlukan | default | keterangan |
|
|
42
|
+
|-----------------------------|---------------------------------------------|------------|----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
43
|
+
| `DAFTAR_LPSE` | `pyproc pu` | Ya | - | Daftar alamat LPSE yang akan diunduh. <br>[Format Daftar LPSE](#format-daftar-lpse-lanjutan) |
|
|
44
|
+
| `-h --help` | `pyproc --help` | optional | - | menampilkan keterangan dan bantuan |
|
|
45
|
+
| `-k --keyword` | `pyproc --keyword "mobil dinas" ...` | optional | - | filter pencarian index paket berdasarkan kata kunci tertentu |
|
|
46
|
+
| `-t --tahun-anggaran` | `pyproc --tahun-anggaran 2021 ...` | optional | Tahun Berjalan | Filter pencarian index paket berdasarkan tahun anggaran tertentu. Fungsi ini hanya berlaku mulai dari SPSE 4.4. <br><br>Format Penulisan: <br>**ALL**: mengunduh seluruh data <br>**2021**: mengunduh data untuk tahun 2021 <br>**2015,2018,2019**: mengunduh data untuk tahun 2015, 2018, dan 2019<br>**2011-2020** mengunduh data untuk tahun 2011 s.d. 2020 |
|
|
47
|
+
| `--kategori` | `pyproc --kategori PENGADAAN_BARANG ...` | optional | - | Filter pencarian berdasarkan kategori pengadaan. <br>Daftar kategori: `PENGADAAN_BARANG`, `JASA_KONSULTANSI_BADAN_USAHA_NON_KONSTRUKSI`, `PEKERJAAN_KONSTRUKSI`, `JASA_LAINNYA`, `JASA_KONSULTANSI_PERORANGAN`, `JASA_KONSULTANSI_BADAN_USAHA_KONSTRUKSI` |
|
|
48
|
+
| `--nama-penyedia` | `pyproc --nama-penyedia "PT SUKA MAJU" ...` | optional | - | Filter pencarian index paket berdasarkan nama penyedia |
|
|
49
|
+
| `-c --chunk-size` | `pyproc --chunk-size 25 ...` | optional | 25 | Jumlah daftar paket per halaman yang diunduh. Semakin besar jumlah tidak menjamin proses download semakin cepat. Gunakanlah jumlah data yang wajar sehingga tidak membebani server SPSE. |
|
|
50
|
+
| `-w --workers` | `pyproc --workers 4 ...` | optional | 8 | Jumlah koneksi yang berjalan secara bersamaan saat mengunduh detil paket dengan maksimal 10 worker. |
|
|
51
|
+
| `-x --timeout` | `pyproc --timeout 60 ...` | optional | 30 | Waktu tunggu jika koneksi lambat (dalam detik) |
|
|
52
|
+
| `-n --non-tender` | `pyproc --non-tender ...` | optional | FALSE | Tambahkan argumen ini untuk mengunduh data non-tender/pengadaan langsung |
|
|
53
|
+
| `-d --index-download-delay` | `pyproc --index-download-delay 5 ...` | optional | 1 | Waktu jeda download index paket untuk setiap halaman/batch |
|
|
54
|
+
| `-o --output` | `pyproc --ouput csv ...` | optional | csv | Jenis data keluaran/hasil dari download. Format yang didukung csv dan json. Karena keterbatasan format, tidak semua data ditampilkan pada format csv. Jika memerlukan data detil yang komprehensif, gunakan format json karena mencangkup semua data detail. |
|
|
55
|
+
| `--keep-index` | `pyproc --keep-index ...` | optinal | FALSE | pyproc akan membentuk file idx (sqlite3 database) saat proses download dan akan dihapus ketika proses selesai. Tambahkan argumen ini jika tidak ingin menghapus database tersebut. |
|
|
56
|
+
| `-r --resume` | `pyproc --resume ...` | optinal | FALSE | Tambahkan argument ini untuk melanjutkan proses yang gagal (karena internet putus atau gangguan koneksi lainnya). Namun pastikan bahwa seluruh index sudah berhasil diunduh karena argumen --resume akan melewati proses download index. |
|
|
57
|
+
| `-s --sep` | `pyproc --sep ";" kemenkeu` | optional | `;` titik koma | Set custom separator untuk output format csv |
|
|
58
|
+
| `--log` | `pyproc --log INFO ...` | optional | INFO | Argumen untuk setting informasi yang ditampilkan pyproc pada terminal. Daftar nilai yang didukung: <br>`DEBUG`: menampilkan informasi sedetil mungkin<br>`INFO`: menampilkan informasi penting saja <br>`WARNING`: hanya menampilkan informasi yang bersifat warning <br>`ERROR`: hanya menampilkan error <br>`CRITICAL`: hanya menampilkan permasalahan yang bersifat kritis saja |
|
|
59
|
+
|
|
60
|
+
### Format Daftar LPSE (lanjutan)
|
|
61
|
+
PyProc dapat mengunduh data dari 1 atau lebih LPSE. Proses tersebut akan berjalan sesuai dengan nilai `DAFTAR_LPSE` yang diberikan user. Beberapa format yang didukung oleh PyProc adalah sebagai berikut:
|
|
62
|
+
- Download data dengan menyertakan nama file hasil download
|
|
63
|
+
|
|
64
|
+
Untuk set nama file secara manual, gunakan format `"alamatlpse[titik_koma]namafile"`.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
$ pyproc "kemenkeu;namafileouputkemenkeu" --output json
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
perintah ini akan mengunduh data LPSE PU dan mengekspor data ke file `namafileouputkemenkeu.json`
|
|
71
|
+
|
|
72
|
+
- Download data lebih dari 1 LPSE
|
|
73
|
+
|
|
74
|
+
Untuk mengunduh lebih dari 1 lpse secara bersamaan, gunakan format `"alamat1[koma]alamat2[koma]alamat3"`
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
$ pyproc jakarta,pu,kemenkeu,sumbarprov
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
atau dengan menyertakan namafile dengan format `"alamat1[titikkoma]nama1[koma]alamat2[titikkoma]nama2"`
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
$ pyproc "jakarta;filejakarta,pu:filepu,kemenkeu:filekemenkeu,sumbarprov:filesumbarprov"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
- Download data berdasrakan daftar lpse pada file csv
|
|
87
|
+
Download paket LPSE dengan sumber alamat dari file
|
|
88
|
+
```bash
|
|
89
|
+
$ pyproc daftarlpse.csv
|
|
90
|
+
|
|
91
|
+
# konten daftarlpse.csv
|
|
92
|
+
sumbarprov
|
|
93
|
+
pu
|
|
94
|
+
kemenkeu
|
|
95
|
+
|
|
96
|
+
# konten daftarlpse.csv dengan nama hasil download
|
|
97
|
+
sumbarprov;lpse-sumbar
|
|
98
|
+
pu;lpse-pu.csv
|
|
99
|
+
kemenkeu;lpse-kemenkeu
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Penggunaan PyProc Sebagai Package
|
|
103
|
+
|
|
104
|
+
Untuk dapat menggunakan PyProc, anda harus mengimpornya terlebih dahulu dan menginisiasi objek `Lpse`
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
from pyproc import Lpse
|
|
108
|
+
|
|
109
|
+
# Inisiasi objek lpse kementerian pu
|
|
110
|
+
lpse = Lpse('kemenkeu')
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Pencarian Daftar Paket Lelang
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
from pyproc import Lpse
|
|
117
|
+
|
|
118
|
+
# Inisiasi objek lpse kementerian pu
|
|
119
|
+
lpse = Lpse('pu')
|
|
120
|
+
|
|
121
|
+
# mendapatkan daftar paket lelang
|
|
122
|
+
daftar_lelang = lpse.get_paket_tender(start=0, length=2)
|
|
123
|
+
print(daftar_lelang)
|
|
124
|
+
|
|
125
|
+
# pencarian paket non tender (penunjukkan langsung)
|
|
126
|
+
daftar_pl = lpse.get_paket_non_tender(start=0, length=30)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Pencarian Paket dengan mengurutkan berdasarkan kolom tertentu
|
|
130
|
+
```python
|
|
131
|
+
from pyproc import Lpse
|
|
132
|
+
from pyproc.lpse import By
|
|
133
|
+
|
|
134
|
+
lpse = Lpse('sumbarprov')
|
|
135
|
+
|
|
136
|
+
# pencarian daftar lelang, urutkan berdasarkan Harga Perkiraan Sendiri
|
|
137
|
+
daftar_lelang = lpse.get_paket_tender(start=0, length=30, order=By.HPS)
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Filter pencarian paket berdasarkan kategori pengadaan
|
|
141
|
+
```python
|
|
142
|
+
from pyproc import Lpse
|
|
143
|
+
from pyproc import JenisPengadaan
|
|
144
|
+
|
|
145
|
+
# Inisiasi objek lpse kementerian padang
|
|
146
|
+
lpse = Lpse('padang')
|
|
147
|
+
|
|
148
|
+
# Kategori Pengadaan Barang
|
|
149
|
+
paket_pengadaan_barang = lpse.get_paket_tender(start=0, length=30, kategori=JenisPengadaan.PENGADAAN_BARANG)
|
|
150
|
+
paket_konstruksi = lpse.get_paket_tender(start=0, length=30, kategori=JenisPengadaan.PEKERJAAN_KONSTRUKSI)
|
|
151
|
+
|
|
152
|
+
# dst untuk kategori lainnya
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Pencarian Detil Paket Lelang
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
from pyproc import Lpse
|
|
159
|
+
|
|
160
|
+
lpse = Lpse('jakarta')
|
|
161
|
+
|
|
162
|
+
# mendapatkan semua detil paket lelang
|
|
163
|
+
detil = lpse.detil_paket_tender(id_paket='48658064')
|
|
164
|
+
detil.get_all_detil()
|
|
165
|
+
print(detil)
|
|
166
|
+
|
|
167
|
+
# mendapatkan hanya pemenang lelang
|
|
168
|
+
pemenang = detil.get_pemenang()
|
|
169
|
+
print(pemenang)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Uninstall
|
|
173
|
+
|
|
174
|
+
Untuk uninstall package jalankan perintah berikut:
|
|
175
|
+
```bash
|
|
176
|
+
$ pip uninstall pyproc
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## License
|
|
180
|
+
Paket ini di-release di bawah lisensi MIT.
|
|
181
|
+
|
|
182
|
+
## Donatur ☕️
|
|
183
|
+
Orang-orang yang berjasa menyediakan kopi sehingga pengembangan paket tetap berjalan
|
|
184
|
+
- Angga Rinaldi Rizal (50 cangkir ☕️)
|