Skip to content

Commit d94c91e

Browse files
committed
intro/requests, intro/click: Additions, rewordings, new links
This should make the text slightly more approachable by relative beginners, but at the same time it's not dumbed down too much.
1 parent 271678d commit d94c91e

File tree

2 files changed

+48
-19
lines changed

2 files changed

+48
-19
lines changed

lessons/intro/click/index.md

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@ Takto jednoduše se dá vytvořit aplikace s přepínači:
4343
import click
4444

4545
@click.command()
46-
@click.option('--count', default=1, help='Number of greetings.')
47-
@click.option('--name', prompt='Your name',
48-
help='The person to greet.')
46+
@click.option('--count', default=1, metavar='COUNT',
47+
help='Number of greetings.')
48+
@click.option('--name', prompt='Your name', metavar='NAME',
49+
help='The person to greet.')
4950
def hello(count, name):
5051
"""Simple program that greets NAME for a total of COUNT times."""
5152
for x in range(count):
@@ -55,6 +56,15 @@ if __name__ == '__main__':
5556
hello()
5657
```
5758

59+
Vyzkoušejte si ji! Máte-li ji uloženou jako `hello.py`, zkuste:
60+
61+
```console
62+
$ python hello.py
63+
$ python hello.py --help
64+
$ python hello.py --name Pythonista
65+
$ python hello.py --count 5
66+
```
67+
5868

5969
## Příkazy a přepínače
6070

@@ -63,7 +73,7 @@ click zpracuje argumenty příkazové řádky a zavolá původní funkci
6373
s příslušnými pythonními hodnotami.
6474
Proto se dává do bloku `if __name__ == '__main__':`, který se spustí, jen
6575
když se pythonní soubor spoustí „přímo“.
66-
Když je importován, tenhle blok se neprovede.
76+
Když je soubor importován, tenhle blok se neprovede.
6777

6878
Dekorátory `@click.option` a `@click.argument` pak přidávají přepínače
6979
a argumenty.
@@ -123,20 +133,22 @@ Přepínač `--help` přidává click sám.
123133

124134
Kromě přepínačů podporuje click i *argumenty*.
125135
Přepínače musí uživatel na řádce pojmenovat; argumenty se zadávají pozičně.
126-
Používají se ve dvou případech: pro povinné argumenty a pro argumenty, kterých
136+
Používají se ve dvou případech: pro povinné informace a pro argumenty, kterých
127137
může být libovolný počet.
128138
Na všechno ostatní radši použijte přepínače.
129139

130140
```python
131141
@click.command()
132142
@click.argument('directory')
133143
def cd(directory):
144+
"""Change the current directory"""
134145
click.echo('Changing to directory {}'.format(directory))
135146

136147
@click.command()
137148
@click.argument('source', nargs=-1)
138149
@click.argument('destination', nargs=1)
139150
def mv(source, destination):
151+
"""Move any number of files to one destination"""
140152
for filename in source:
141153
click.echo('Moving {} to {}'.format(filename, destination))
142154
```
@@ -145,20 +157,26 @@ def mv(source, destination):
145157
## Soubory
146158

147159
Má-li uživatel zadat jméno souboru, nepoužívejte řetězce, ale speciální typ
148-
`click.File()`.
160+
[`click.File()`](http://click.pocoo.org/5/api/#click.File).
149161
Click za vás soubor automaticky otevře a zavře.
150162
Kromě toho podporuje unixovskou konvenci, že `-` znamená standardní
151163
vstup/výstup.
152164

165+
Argument pro `File` je mód, ve kterém se soubor otevírá, podobně jako pro
166+
funkci [`open`](https://docs.python.org/3/library/functions.html#open):
167+
`'r'` pro čtení, `'w'` pro zápis.
168+
153169
```python
154170
@click.command()
155171
@click.argument('files', nargs=-1, type=click.File('r'))
156172
def cat(files):
173+
"""Print out the contents of the given files"""
157174
for file in files:
158175
print(file.read(), end='')
159176
```
160177

161-
Existuje i varianta `click.Path()`, která soubor neotvírá.
178+
Existuje i varianta [`click.Path()`](http://click.pocoo.org/5/api/#click.Path),
179+
která soubor neotvírá. Pomocí ní jde např. zadat jméno adresáře.
162180

163181

164182
## Podpříkazy

lessons/intro/requests/index.md

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ Příklady použití pro další HTTP metody najdete v [dokumentaci].
4747

4848
## Použití session
4949

50-
Hlavně v budoucnu se nám bude hodit použití tzv. *session*.
50+
Hlavně v budoucnu se nám bude hodit použití tzv.
51+
[*session*](http://docs.python-requests.org/en/master/user/advanced/#session-objects).
5152

5253
Session má několik výhod.
5354
První je, že využívá na pozadí jedno otevřené HTTP spojení a poskytuje tak
@@ -75,7 +76,7 @@ k testování HTTP dotazů:
7576
## Twitter API
7677

7778
Pro reálné použití si ukážeme, jak se dá pomocí requests získat seznam tweetů.
78-
Z Twitteru nebudeme samozřejmě nic parsovat, ale použijeme jejich [API].
79+
Nebudeme samozřejmě nic parsovat z HTML stránek, ale použijeme [API Twitteru].
7980

8081
```pycon
8182
>>> r = session.get('https://api.twitter.com/1.1/search/tweets.json')
@@ -87,9 +88,11 @@ Jak můžete vidět v odpovědi, Twitter API neumožňuje data číst bez autent
8788
Jak se autentizovat byste při troše hledání našli v dokumentaci, ale protože
8889
tu nevyučujeme úvod do OAuthu, ale Python, rozhodli jsme se vám to zjednodušit.
8990

90-
Po přihlášení na Twitter (pokud nemáte účet, můžete si vytvořit nějaký *dummy*
91-
účet, ale budete potřebovat ověřitelné telefonní číslo)
92-
jděte na [apps.twitter.com] a vytvořte aplikaci (URL si můžete vymyslet).
91+
Nemáte-li na Twitter účet, vytvořte si ho. Můžete vytvořit nějaký *dummy* účet,
92+
který dál nebudete používat. Budete ale potřebovat ověřitelné telefonní číslo.
93+
94+
Po přihlášení na Twitter jděte na [apps.twitter.com] a vytvořte aplikaci
95+
(URL si můžete vymyslet, třeba `http://invalid`).
9396
Po vytvoření najdete na kartě *Keys and Access Tokens* **API Key** a **API Secret**.
9497
Pozor, jedná se prakticky o hesla k vašemu Twitter účtu,
9598
a proto by je nikdo kromě vás neměl vidět.
@@ -133,7 +136,8 @@ hlavičky.
133136
`requests.auth.HTTPBasicAuth` zde dle specifikace zakóduje jméno a heslo pomocí
134137
algoritmu base64 a přidá hlavičku `Authorization`.
135138

136-
Ve skutečnosti je základní HTTP přihlášení tak běžné, že lze použít zkratku:
139+
Základní HTTP přihlášení je tak běžné, že pro něj Requests mají zkratku –
140+
místo `HTTPBasicAuth` se dá použít jen dvojice (jméno, heslo):
137141

138142
```pycon
139143
>>> r = session.post('https://api.twitter.com/oauth2/token',
@@ -153,7 +157,8 @@ ale je možné nastavit autentizační funkci pro celou session.
153157
>>> session.auth = bearer_auth
154158
```
155159

156-
Pak už by mělo API fungovat:
160+
Pak už by mělo API fungovat.
161+
Použijeme [API pro vyhledávání tweetů][Search API]:
157162

158163
```pycon
159164
>>> r = session.get(
@@ -167,7 +172,7 @@ Once a framework decides to abstract the HTML layer from you. Customizing your U
167172
...
168173
```
169174

170-
Zde je pro zjednodušení k dispozici celá funkce pro vytvoření autentizované
175+
Zde je pro zjednodušení k dispozici celá funkce pro vytvoření autentizované
171176
*session*:
172177

173178
```python
@@ -190,12 +195,13 @@ def twitter_session(api_key, api_secret):
190195
return session
191196
```
192197

193-
[API]: https://dev.twitter.com/rest/public
198+
[API Twitteru]: https://dev.twitter.com/rest/public
194199
[apps.twitter.com]: https://apps.twitter.com/
200+
[Search API]: https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets.html
195201

196202
### GitHub API
197203

198-
Podíváme se i na GitHub API, které má jednodušší autentizaci (od GitHubu přímo
204+
Podíváme se i na [GitHub API], které má jednodušší autentizaci (od GitHubu přímo
199205
získáte token). Stačí jít do [nastavení] a vyrobit nový token
200206
(zatím není třeba zaškrtávat žádná oprávnění).
201207
Token je opět třeba patřičně chránit.
@@ -217,7 +223,7 @@ Tímto kódem lze například získat popis přihlášeného uživatele, tedy se
217223
```
218224

219225
> [note]
220-
> Všimněte si hlavičky `User-Agent`. Ta je potřeba při komunikaci s GitHub API
226+
> Všimněte si hlavičky `User-Agent`. Ta je potřeba při komunikaci s GitHub API
221227
> explicitně nastavit. Nastavení na objektu session zajistí, že tato hlavička
222228
> bude ve všech požadavcích.
223229
@@ -256,6 +262,7 @@ My ale věříme, že ji odebrat nechcete :)
256262

257263
[nastavení]: https://github.com/settings/tokens
258264
[Dokumentace]: https://developer.github.com/v3/
265+
[GitHub API]: https://developer.github.com/v3
259266

260267

261268
### Chraňte své tokeny
@@ -279,7 +286,8 @@ A následně konfiguraci načtete pomocí modulu
279286
```pycon
280287
>>> import configparser
281288
>>> config = configparser.ConfigParser()
282-
>>> config.read('auth.cfg')
289+
>>> with open('auth.cfg') as f:
290+
... config.read_file(f)
283291
>>> config['twitter']['key']
284292
D4HJp6PKmpon9eya1b2c3d4e5
285293
```
@@ -288,6 +296,9 @@ Do souboru `.gitignore` pak musíte přidat název ignorovaného souboru, např.
288296

289297
auth.cfg
290298

299+
Ověřte si, že git soubor `auth.cfg` opravdu ignoruje, t.j. soubor se neukáže
300+
ve výstupu `git status`.
301+
291302
Jelikož ostatní tento konfigurační soubor neuvidí,
292303
je vhodné jim vysvětlit, jak takový soubor (s jejich údaji) vytvořit.
293304
Můžete například vložit do gitu soubor `auth.cfg.sample`

0 commit comments

Comments
 (0)