A Python CLI for obtaining emojis as files and favicons.
Usage: pycture [OPTIONS] EMOJI
Get EMOJI as a file or favicon via its CLDR short name.
Use Unicode 9.0 and Emoji 3.0 as a reference.
Options:
-o, --output-dir DIRECTORY The path to the output directory.
[default: (current directory)]
-p, --pretty Pretty-print the SVG code.
-s, --source [Twemoji|OpenMoji]
The source of the emoji to obtain.
[default: Twemoji]
--version Show the version and exit.
--help Show this message and exit.
- Click (for the interface)
- Requests (for HTTP requests)
- defusedxml (for parsing XML/SVG data)
This CLI was created with Cookiecutter and the joaopalmeiro/cookiecutter-templates/python-cli
project template.
poetry install
poetry shell
- click-contrib (a collection of third-party extensions).
- click-man package (man pages).
- click-help-colors package.
- click-didyoumean package.
- click_params package (extra types).
- OpenMoji.
- emoji package.
- demoji package.
- Twemoji.
- Inflection package.
- Unicode:
- Full Emoji List.
- Full Emoji Modifier Sequences.
- Emoji Counts.
- Emoji List, v13.0.
- unicodedata (Python 3.6 -> Unicode 9.0).
- Emoji Version 3.0 (this emoji version coincided with the release of Unicode 9.0).
- cookiecutter-poetry (only the
pyproject.toml
file and nopoetry.lock
file). cli.py
orconsole.py
.- Asyncio integration issue (Click).
- asyncclick package (fork of Click).
- XML vulnerabilities.
- Bandit:
- B405 complains about any xml.etree.ElementTree import, not just parse-related ones (open) issue.
- from xml.etree.ElementTree import Element Flagged (open) issue.
- Error message refers to "defusedxml.defuse_stdlib()" but calling that does not silence bandit (open) issue.
- defusedxml provides alternatives for parsing-related functions.
- Shell completion (for commands, options, and choice values):
- Generate the activation script:
_PYCTURE_COMPLETE=source_zsh pycture > pycture-complete.sh
. - In
.bashrc
or.zshrc
, source the script:. /path/to/pycture-complete.sh
. - Alternative:
eval "$(_PYCTURE_COMPLETE=source_zsh pycture)"
.
- Generate the activation script:
- aiohttp package (vs. Requests):
- "(...) you can picture the session object as a user starting and closing a browser: it wouldn't make sense to do that every time you want to load a new tab." (source)
# aiohttp
async with aiohttp.ClientSession() as session:
async with session.get("http://python.org") as response:
print(await response.text())
# vs.
# Requests
response = requests.get("http://python.org")
print(response.text)
# or
with requests.Session() as session:
response = session.get("http://python.org")
print(response.text)