Skip to content

Commit

Permalink
Gunakan argparse untuk membuat antarmuka CLI
Browse files Browse the repository at this point in the history
Supaya tidak memerlukan pustaka luar
  • Loading branch information
laymonage committed Mar 17, 2020
1 parent a5fcbbf commit 29205b1
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 31 deletions.
36 changes: 28 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,15 @@ pip install kbbi

### Manual

1. Lakukan instalasi untuk paket-paket prasyarat ([`requests`][requests], [`BeautifulSoup4`][beautifulsoup4], dan [`Abseil`][abseil]).
1. Lakukan instalasi untuk paket-paket prasyarat ([`requests`][requests]
dan [`BeautifulSoup4`][beautifulsoup4]).
2. Klonakan repositori ini atau unduh [`kbbi.py`][kbbi-py].
3. Letakkan `kbbi.py` dalam direktori yang Anda inginkan.

## Penggunaan

### Melalui kode Python

Buat objek `KBBI` baru (contoh: `kata = KBBI('kata kunci')`), lalu manfaatkan
representasi `str`-nya dengan memanggil `str(kata)` atau ambil `dict` hasil
serialisasinya dengan memanggil `kata.serialisasi()`. Apabila ingin memanfaatkan
Expand Down Expand Up @@ -112,19 +115,37 @@ tak.sir [2]
}
```

Penggunaan melalui CLI.
### Melalui CLI

```
$ python kbbi.py cinta
```

Pencarian dengan kata/frasa yang dipisahkan oleh spasi harus diapit oleh
tanda petik.

```
$ python kbbi.py "tanggung jawab"
```

Apabila tidak ingin menampilkan contoh, gunakan `--tanpa-contoh` atau `-t`.

```
$ python kbbi.py --kata=cinta
$ python kbbi.py "tanggung jawab" --tanpa-contoh
```

Pencarian frasa yang dipisahkan oleh spasi harus diapit oleh tanda petik.
Untuk mendapatkan hasil dalam bentuk serialisasi JSON, gunakan `--json`
atau `-j`.

```
$ python kbbi.py --kata="tanggung jawab"
$ python kbbi.py "tanggung jawab" --json
```

Menambahkan contoh kalimat.
Untuk mengatur indentasi pada serialisasi JSON, gunakan `--indentasi N`
atau `-i N`.

```
$ python kbbi.py --kata="tanggung jawab" --contoh
$ python kbbi.py "tanggung jawab" --json --indentasi 2
```


Expand All @@ -146,7 +167,6 @@ penyalahgunaan yang mungkin muncul dari proyek ini.
[kbbi]: https://kbbi.kemdikbud.go.id
[requests]: https://pypi.org/project/requests
[beautifulsoup4]: https://pypi.org/project/requests/beautifulsoup4
[abseil]: https://github.com/abseil/abseil-py
[kbbi-py]: kbbi/kbbi.py
[license]: LICENSE
[hukum]: https://kbbi.kemdikbud.go.id/Beranda/Hukum
Expand Down
68 changes: 50 additions & 18 deletions kbbi/kbbi.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,14 @@
.. moduleauthor:: sage <[email protected]>
"""

import argparse
import json
import sys
from urllib.parse import quote

import requests
from bs4 import BeautifulSoup

from absl import app
from absl import flags


FLAGS = flags.FLAGS

flags.DEFINE_string("kata", None, "Kata yang dicari.")
flags.DEFINE_boolean("contoh", False, 'Menampilkan contoh kalimat.')

flags.mark_flag_as_required('kata')

class KBBI:
"""Sebuah laman dalam KBBI daring."""
Expand Down Expand Up @@ -409,15 +402,54 @@ def __init__(self):
)


def main(argv):
def _parse_args(args):
parser = argparse.ArgumentParser()
parser.add_argument(
"laman", help='Laman yang ingin diambil, contoh: "cinta"'
)
parser.add_argument(
"-t",
"--tanpa-contoh",
help="jangan tampilkan contoh (bila ada)",
action="store_true",
)
parser.add_argument(
"-j",
"--json",
help="tampilkan hasil (selalu dengan contoh) dalam bentuk JSON",
action="store_true",
)
parser.add_argument(
"-i",
"--indentasi",
help="gunakan indentasi sebanyak N untuk serialisasi JSON",
type=int,
metavar="N",
)
return parser.parse_args(args)


def _keluaran(laman, args):
if args.json:
if args.indentasi:
return json.dumps(laman.serialisasi(), indent=args.indentasi)
else:
return json.dumps(laman.serialisasi())
elif args.tanpa_contoh:
return laman.__str__(contoh=False)
else:
return str(laman)

kata = KBBI(FLAGS.kata)
contoh = False
if FLAGS.contoh:
contoh = True

print(kata.__str__(contoh=contoh))
def main(argv):
args = _parse_args(argv)
try:
laman = KBBI(args.laman)
except (TidakDitemukan, TerjadiKesalahan, BatasSehari) as e:
print(e)
else:
print(_keluaran(laman, args))


if __name__ == '__main__':
app.run(main)
if __name__ == "__main__":
main(sys.argv[1:])
6 changes: 1 addition & 5 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,5 @@
"kbbi kamus bahasa indonesia indonesian natural language scraper"
),
packages=find_packages(),
install_requires=[
'requests',
'beautifulsoup4',
'absl-py',
],
install_requires=["requests", "beautifulsoup4",],
)

0 comments on commit 29205b1

Please sign in to comment.