Skip to content

Instantly share code, notes, and snippets.

@danilobellini
Created July 26, 2016 06:36
Show Gist options
  • Save danilobellini/b76a36c4fcc946ecb1d6cb92987f30d3 to your computer and use it in GitHub Desktop.
Save danilobellini/b76a36c4fcc946ecb1d6cb92987f30d3 to your computer and use it in GitHub Desktop.
[Proposta/ementa de apresentação] Plugin pytest-doctest-custom (2016, PtBr)
#!/usr/bin/env python
# coding: utf-8
"""
>>> "Apresentação sobre doctest e py.test" is "nice"
True
>>> "O.o heeey, como assim?"
HUAHUAHUAHUA
>>> "Apresentação sobre doctest e py.test" is "a bad idea"
False
>>> # Ok, ¬¬ chega de strings
>>> 2 ** 3 # Matemática! Isso vai dar certo!
8, mas você não me engana!
>>> e ** (i * pi) # Bah! Duvido você fazer essa!
-1
"Bah!" pra você =P
>>> # !!! Exponencial complexa é com o Sympy! Mas...
>>> sin(t) ** 2 - cos(t) ** 2
-cos(2⋅t)
>>> # ¬¬ chega de matemática
>>> como("isso pode ser útil?")
'Com uma documentação limpa e sendo testada, por exemplo.'
>>> como(isso_seria + "limpa?")
'Tenta com um conjunto ou um dicionário...'
>>> set("23784230a4981235as4351209737484") # Quero ver!
{'0', '1', '2', '3', '4', '5', '7', '8', '9', 'a', 's'}
>>> ordenado # !?
'Sim!'
>>> "A palestra é sobre doctest" # ?
'A palestra é sobre doctest'
>>> mais_info("?")
{1: 'doctest (documentação + testes, standard library)',
2: 'py.test',
3: 'representação de objetos em strings',
4: 'novo plugin pytest-doctest-custom',
5: 'IPython.lib.pretty',
6: 'pprint (standard library)',
7: 'representação em diferentes versões do Python',
8: 'e muito mais (tox, Sympy, PyPy, etc.)'}
>>> type(mais_info("?")) # ?
dict
>>> explique(4)
É um plugin que o autor da palestra criou.
>>> quero_mais_info
'Então assista!'
>>> # ¬¬ Ok, eu assisto!
"""
import sympy, pytest
from sympy import pi, sin, cos, I as i, Expr
from IPython.lib.pretty import pretty
sympy.pprint_use_unicode(True)
e = sympy.exp(1)
t = sympy.Symbol("t")
isso_seria = "01234"
ordenado = "Sim!"
quero_mais_info = "Então assista!"
assuntos = [
"doctest (documentação + testes, standard library)",
"py.test", "representação de objetos em strings",
"novo plugin pytest-doctest-custom",
"IPython.lib.pretty", "pprint (standard library)",
"representação em diferentes versões do Python",
"e muito mais (tox, Sympy, PyPy, etc.)"]
fakes = {
False: "True",
8: "8, mas você não me engana!",
None: '"Bah!" pra você =P',
}
def custom_pretty(value):
if value is not None:
return pretty(value, max_width=60)
def my_repr(value):
if fakes and isinstance(value, str):
return "HUA" * len(value.split())
if isinstance(value, Expr):
sympy.pprint(value.simplify())
value = None
return fakes.pop(value, custom_pretty(value))
def como(value):
return (
"Tenta com um conjunto ou um dicionário..."
if value.startswith(isso_seria) else
"Com uma documentação limpa e sendo testada, por exemplo."
)
def mais_info(value):
return dict(enumerate(assuntos, 1))
def explique(n):
print("É um plugin que o autor da palestra criou.")
if __name__ == "__main__":
pytest.main(["--verbose", "--doctest-modules",
"--doctest-repr=__main__:my_repr"])
# [danilo@archenemy grupy]$ python3.5 -m venv ~/venv
# [danilo@archenemy grupy]$ . ~/venv/bin/activate
# (venv) [danilo@archenemy grupy]$ pip install ipython sympy \
# pytest-doctest-custom
# [...]
# Successfully installed [...]
# (venv) [danilo@archenemy grupy]$ ./plugin_talk_ptbr_2016.py
# ==================== test session starts =====================
# platform linux -- Python 3.5.2, pytest-2.9.2, py-1.4.31, plugg
# y-0.3.1 -- /home/danilo/venv/bin/python
# cachedir: .cache
# rootdir: /home/danilo/code/grupy, inifile:
# plugins: doctest-custom-1.0.0
# collected 1 items
#
# plugin_talk_ptbr_2016.py::plugin_talk_ptbr_2016 PASSED
#
# ================== 1 passed in 0.14 seconds ==================
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment