{ "info": { "author": "Daniel Gon\u00e7alves", "author_email": "daniel@base4.com.br", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Other Environment", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "License :: OSI Approved :: Apache Software License", "Natural Language :: Portuguese (Brazilian)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Topic :: Office/Business :: Financial :: Point-Of-Sale", "Topic :: Printing", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "Projeto Extratos CF-e-SAT\n=========================\n\n.. image:: https://img.shields.io/pypi/status/satextrato.svg\n :target: https://pypi.python.org/pypi/satextrato/\n :alt: Development status\n\n.. image:: https://img.shields.io/badge/python%20version-2.7-blue.svg\n :target: https://pypi.python.org/pypi/satextrato/\n :alt: Supported Python versions\n\n.. image:: https://img.shields.io/pypi/l/satextrato.svg\n :target: https://pypi.python.org/pypi/satextrato/\n :alt: License\n\n.. image:: https://img.shields.io/pypi/v/satextrato.svg\n :target: https://pypi.python.org/pypi/satextrato/\n :alt: Latest version\n\n.. image:: https://badges.gitter.im/Join%20Chat.svg\n :alt: Join the chat at https://gitter.im/base4sistemas/satcfe\n :target: https://gitter.im/base4sistemas/satcfe?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n\n-------\n\nThis project prints receipts for fiscal electronic documents called \"CF-e\".\nThose documents are created through a system called `SAT-CF-e`_ which is a\nsystem for autorization and transmission of fiscal documents, developed by\nFinance Secretary of state of S\u00e3o Paulo, Brazil. The entire project, variables,\nmethods and class names, as well as documentation, are written in brazillian\nportuguese.\n\n-------\n\nEste projeto realiza a impress\u00e3o dos **Extratos do CF-e-SAT** em impressoras\nESC/POS |reg| e s\u00e3o normalmente impressos em mini-impressoras de cupons,\nt\u00e9rmicas ou de impacto, mas n\u00e3o limitado \u00e0 elas. As impressoras, marcas e\nmodelos suportados dependem dos modelos suportados no projeto `PyESCPOS`_.\n\nPara autorizar e transmitir documentos eletr\u00f4nicos atrav\u00e9s da tecnologia\n`SAT-CF-e`_ \u00e9 preciso comunicar-se com os equipamentos SAT. Para isso, d\u00ea uma\nolhada no `Projeto SATCFe`_. **Este projeto lida apenas com a quest\u00e3o da\nimpress\u00e3o do extrato para documentos CF-e.**\n\n.. warning::\n\n A **Base4 Sistemas** e os desenvolvedores envolvidos neste projeto, N\u00c3O\n ASSUMEM NEM TEM QUALQUER RESPONSABILIDADE sobre os \"Extratos do CF-e-SAT\"\n gerados por esta biblioteca de c\u00f3digo, nem diretamente nem atrav\u00e9s de uma\n APLICA\u00c7\u00c3O USU\u00c1RIA. Use por sua pr\u00f3pria conta e risco.\n\n\nExemplos de Uso\n===============\n\nH\u00e1 dois tipos de documentos CF-e-SAT: de **venda** e de **cancelamento** de uma\nvenda anteriormente autorizada.\n\n\nExtratos do CF-e de Venda\n-------------------------\n\nPara emitir um extrato de um CF-e de venda, voc\u00ea ir\u00e1 precisar do `XML`_ do\nCF-e-SAT de venda, que \u00e9 o documento fiscal, e uma impressora ESC/POS |reg|\n(veja as implementa\u00e7\u00f5es dispon\u00edveis no projeto `PyESCPOS`_):\n\n.. sourcecode:: python\n\n from escpos import SerialConnection\n from escpos.impl.daruma import DR700\n from satextrato import ExtratoCFeVenda\n\n conn = SerialConnection.create('COM1:9600,8,1,N')\n impressora = DR700(conn)\n impressora.init()\n\n with open(r'C:\\CFe351702.xml', 'r') as fp:\n extrato = ExtratoCFeVenda(fp, impressora)\n extrato.imprimir()\n\n\nExtratos do CF-e de Cancelamento\n--------------------------------\n\nPara emitir um extrato do CF-e-SAT de cancelamento, al\u00e9m do documento de\ncancelamento voc\u00ea tamb\u00e9m ir\u00e1 precisar do documento da venda, ao qual o documento\nde cancelamento se refere. Seguindo a mesma linha do exemplo anterior:\n\n.. sourcecode:: python\n\n with open('CFe_1.xml', 'r') as fvenda, open('CFeCanc_1.xml', 'r') as fcanc:\n extrato = ExtratoCFeCancelamento(fvenda, fcanc, impressora)\n extrato.imprimir()\n\n\nOutros Exemplos\n---------------\n\nEventualmente, voc\u00ea poder\u00e1 encontrar outros exemplos no `Wiki`_ do projeto.\n\n\nConfigura\u00e7\u00f5es do Extrato\n========================\n\nV\u00e1rios detalhes da impress\u00e3o dos extratos podem ser configurados. A aplica\u00e7\u00e3o\npoder\u00e1 indicar onde o arquivo de configura\u00e7\u00f5es pode ser encontrado invocando a\nfun\u00e7\u00e3o ``satextrato.config.configurar()`` antes de comandar a impress\u00e3o:\n\n.. sourcecode:: python\n\n from satextrato import config\n config.configurar(arquivo='/caminho/para/arquivo.cfg')\n\n.. note::\n\n Invocar a fun\u00e7\u00e3o ``configurar()`` uma segunda vez n\u00e3o ter\u00e1 qualquer efeito.\n Se a aplica\u00e7\u00e3o precisar recarregar as configura\u00e7\u00f5es invoque a fun\u00e7\u00e3o\n ``satextrato.config.reconfigurar()``.\n\nSe um caminho n\u00e3o for especificado o arquivo de configura\u00e7\u00f5es ser\u00e1 gravado no\ndiret\u00f3rio do usu\u00e1rio, normalmente em ``~/.satcfe/extrato.cfg``. O formato do\narquivo de configura\u00e7\u00f5es \u00e9 simples, como em um arquivo *INI*, cujo conte\u00fado\npadr\u00e3o \u00e9:\n\n.. sourcecode:: ini\n\n [cupom]\n avancar_linhas = 7\n cortar_documento = no\n cortar_parcialmente = no\n exibir_nome_consumidor = no\n itens_modo_condensado = yes\n\n [qrcode]\n tamanho_modulo = 4\n nivel_correcao = L\n nome_aplicativo = De Olho Na Nota\n mensagem = Consulte o QRCode pelo aplicativo %(nome_aplicativo)s, disponivel na AppStore (Apple) e PlayStore (Android)\n mensagem_modo_condensado = yes\n\n [code128]\n ignorar = no\n altura = 56\n quebrar = yes\n quebrar_partes = 14,14,14,2\n truncar = yes\n truncar_tamanho = 22\n\n [rodape]\n direita = http://git.io/vJRRk\n esquerda = Extrato CF-e-SAT\n\nPara saber quais valores usar dependendo do tipo de dados de cada op\u00e7\u00e3o,\nconsulte a documenta\u00e7\u00e3o do m\u00f3dulo `ConfigParser`_ da biblioteca padr\u00e3o do\nPython.\n\n.. note::\n\n **Note que algumas op\u00e7\u00f5es podem fazer com que o extrato n\u00e3o seja impresso\n em conformidade com a legisla\u00e7\u00e3o.** Algumas op\u00e7\u00f5es s\u00e3o \u00fateis quando estiver\n **em desenvolvimento**. No entanto, tenha certeza de consultar o \"Manual de\n Orienta\u00e7\u00e3o\" do SAT, **item 4**, \"Leiaute de Impress\u00e3o\" antes de modificar\n certas op\u00e7\u00f5es de impress\u00e3o, ou de permitir que o usu\u00e1rio as modifique,\n quando estiver imprimindo extratos SAT **em produ\u00e7\u00e3o**.\n\n\nSe\u00e7\u00e3o ``cupom``\n---------------\n\nCorpo do extrato e op\u00e7\u00f5es para finaliza\u00e7\u00e3o do cupom.\n\n+---------------------------------+------+----------------------------------------------+\n| Op\u00e7\u00e3o | Tipo | Coment\u00e1rios |\n+=================================+======+==============================================+\n| ``avancar_linhas`` | int | N\u00famero de linhas a avan\u00e7ar no final do |\n| | | documento, antes de guilhotinar (se for o |\n| | | caso). |\n+---------------------------------+------+----------------------------------------------+\n| ``cortar_documento`` | bool | Indica se ao final do documento a guilhotina |\n| | | dever\u00e1 ser acionada (se dispon\u00edvel). |\n+---------------------------------+------+----------------------------------------------+\n| ``cortar_parcialmente`` | bool | Indica se o documento dever\u00e1 ser apenas |\n| | | parcialmente guilhotinado. Esta op\u00e7\u00e3o ter\u00e1 |\n| | | efeito apenas se ``cortar_documento`` |\n| | | estiver ligada. |\n+---------------------------------+------+----------------------------------------------+\n| ``exibir_nome_consumidor`` | bool | Indica se o nome do consumidor (se houver) |\n| | | dever\u00e1 ser impresso no extrato. Normalmente, |\n| | | apenas o n\u00famero do documento \u00e9 impresso. |\n+---------------------------------+------+----------------------------------------------+\n| ``itens_modo_condensado`` | bool | Indica se os itens dever\u00e3o ser impressos em |\n| | | modo condensado. Sen\u00e3o, ser\u00e3o impressos no |\n| | | modo normal. |\n+---------------------------------+------+----------------------------------------------+\n\nO ava\u00e7o de linhas ser\u00e1 honrado mesmo que a op\u00e7\u00e3o para cortar o documento esteja\nligada e a impressora possuir uma guilhotina. Isso \u00e9 \u00fatil devido ao fato de que\na posi\u00e7\u00e3o do cabe\u00e7ote de impress\u00e3o (e isso depende de cada modelo de impressora)\npode requerer que o documento avan\u00e7e um pouco antes da guilhotina ser acionada,\npara evitar que o documento seja cortado com dados abaixo da guilhotina.\n\n\nSe\u00e7\u00e3o ``qrcode``\n----------------\n\nC\u00f3digo bidimensional `QRCode`_ e a mensagem logo ap\u00f3s, sobre o aplicativo para\nautentica\u00e7\u00e3o/valida\u00e7\u00e3o do documento emitido. O c\u00f3digo QR cont\u00e9m diversas\ninforma\u00e7\u00f5es \u00e0 respeito do documento fiscal. Para detalhes, consulte a\n\"Especifica\u00e7\u00e3o de Requisitos\" do SAT-CF-e e/ou o \"Manual de Orienta\u00e7\u00e3o\".\n\n+---------------------------------+------+----------------------------------------------+\n| Op\u00e7\u00e3o | Tipo | Coment\u00e1rios |\n+=================================+======+==============================================+\n| ``tamanho_modulo`` | int | Tamanho do m\u00f3dulo QRCode. |\n| | | Consulte a documenta\u00e7\u00e3o da `PyESCPOS`_ para |\n| | | mais detalhes sobre esta op\u00e7\u00e3o. |\n+---------------------------------+------+----------------------------------------------+\n| ``nivel_correcao`` | str | N\u00edvel de corre\u00e7\u00e3o de erros. |\n| | | Consulte a documenta\u00e7\u00e3o da `PyESCPOS`_ para |\n| | | mais detalhes sobre esta op\u00e7\u00e3o. |\n+---------------------------------+------+----------------------------------------------+\n| ``nome_aplicativo`` | str | Nome do aplicativo capaz de consultar a |\n| | | validade do documento fiscal atrav\u00e9s do |\n| | | QRCode impresso no extrato. Veja mais sobre |\n| | | isso mais adiante. |\n+---------------------------------+------+----------------------------------------------+\n| ``mensagem`` | str | Mensagem a ser impressa logo ap\u00f3s o QRCode. |\n| | | Veja mais sobre isso mais adiante. |\n+---------------------------------+------+----------------------------------------------+\n| ``mensagem_modo_condensado`` | bool | Se a mensagem dever\u00e1 ser impressa em modo |\n| | | condensado ou em modo normal de impress\u00e3o. |\n+---------------------------------+------+----------------------------------------------+\n\nA mensagem a ser impressa logo ap\u00f3s o QRCode normalmente ir\u00e1 instruir o\nconsumidor a utilizar um certo aplicativo que, em tese, \u00e9 capaz de verificar a\nautenticidade do documento fiscal que aquele extrato representa. O nome do\naplicativo \u00e9 configurado separado da mensagem e, embora a mensagem possa incluir\no nome do aplicativo diretamente (*hardcoded*), voc\u00ea poder\u00e1 optar por usar o\nrecurso de interpola\u00e7\u00e3o para facilitar a configura\u00e7\u00e3o da mensagem, caso esta\nprecise conter o nome do aplicativo, por exemplo:\n\n.. sourcecode:: ini\n\n nome_aplicativo = Super Validador\n mensagem = Utilize o app %(nome_aplicativo)s para validar este extrato.\n\nMais sobre interpola\u00e7\u00e3o na documenta\u00e7\u00e3o do m\u00f3dulo `ConfigParser`_ da biblioteca\npadr\u00e3o do Python.\n\n\nSe\u00e7\u00e3o ``code128``\n-----------------\n\nOp\u00e7\u00f5es para impress\u00e3o do c\u00f3digo de barras `Code128`_ (*em ingl\u00eas*). Este c\u00f3digo\ncont\u00e9m os quarenta e quatro d\u00edgitos da \"Chave de Acesso\" que identifica o\ndocumento fiscal.\n\n+---------------------------------+------+----------------------------------------------+\n| Op\u00e7\u00e3o | Tipo | Coment\u00e1rios |\n+=================================+======+==============================================+\n| ``ignorar`` | bool | Ignora a impress\u00e3o do c\u00f3digo de barras. |\n+---------------------------------+------+----------------------------------------------+\n| ``altura`` | int | Determina a altura das barras. Para saber o |\n| | | significado desse valor, consulte a |\n| | | documenta\u00e7\u00e3o da `PyESCPOS`_. |\n+---------------------------------+------+----------------------------------------------+\n| ``quebrar`` | bool | Indica se o c\u00f3digo de barras dever\u00e1 ser |\n| | | quebrado em partes. Mais detalhes abaixo. |\n+---------------------------------+------+----------------------------------------------+\n| ``quebrar_partes`` | str | Lista de tamanhos para quebra do c\u00f3digo de |\n| | | barras. Mais detalhes abaixo. |\n+---------------------------------+------+----------------------------------------------+\n| ``truncar`` | bool | Indica se o c\u00f3digo de barras dever\u00e1 ser |\n| | | truncado ao inv\u00e9s de ser quebrado. Um c\u00f3digo |\n| | | truncado ir\u00e1 renderizar apenas um n\u00famero |\n| | | especificado de d\u00edgitos da chave de acesso. |\n+---------------------------------+------+----------------------------------------------+\n| ``truncar_tamanho`` | int | Se for para truncar, esta propriedade indica |\n| | | quantos digitos da chave de acesso ser\u00e3o |\n| | | considerados na impress\u00e3o do c\u00f3digo. |\n+---------------------------------+------+----------------------------------------------+\n\nAs op\u00e7\u00f5es para **truncar** e **quebrar** o c\u00f3digo de barras s\u00e3o mutuamente\nexclusivas e **truncar** possui preced\u00eancia sobre **quebrar**. Veja os detalhes\nsobre estas op\u00e7\u00f5es, a seguir.\n\nA motiva\u00e7\u00e3o para **quebrar** o c\u00f3digo de barras \u00e9 devido a uma limita\u00e7\u00e3o em que\ncertos modelos de impressoras podem n\u00e3o ser capazes de imprimir todos os 44\nd\u00edgitos da chave de acesso em uma \u00fanica linha. Assim, o c\u00f3digo de 44 d\u00edgitos\npode ser quebrado em partes para tornar a impress\u00e3o poss\u00edvel. Por exemplo, para\nquebrar o c\u00f3digo em duas partes, voc\u00ea poder\u00e1 especificar ``quebrar_partes = 22,22``,\nou seja, duas partes com 22 d\u00edgitos cada. Certas impressoras com bobinas muito\nestreitas podem ter uma quebra especificada em mais partes com menos d\u00edgitos em\ncada parte. A regra \u00e9 que a lista em ``quebrar_partes`` dever\u00e1 especificar\napenas n\u00fameros inteiros, pares, maiores que zero, cuja soma seja igual a 44.\n\nTruncar \u00e9 uma op\u00e7\u00e3o que lhe permitir\u00e1 imprimir o c\u00f3digo de barras contendo\napenas parte dos d\u00edgitos da chave de acesso. Truncar tem preced\u00eancia sobre a\nquebra, o que significa que, se a op\u00e7\u00e3o ``truncar`` estiver ligada, ent\u00e3o a\nop\u00e7\u00e3o para quebra ser\u00e1 ignorada.\n\n\nSe\u00e7\u00e3o ``rodape``\n----------------\n\nOp\u00e7\u00f5es para configura\u00e7\u00e3o do rodap\u00e9.\n\n+---------------------------------+------+----------------------------------------------+\n| Op\u00e7\u00e3o | Tipo | Coment\u00e1rios |\n+=================================+======+==============================================+\n| ``esquerda`` | str | Texto (curto) para ser exibido no rodap\u00e9 do |\n| | | extrato, \u00e0 esquerda da borda do cupom. |\n+---------------------------------+------+----------------------------------------------+\n| ``direita`` | str | Texto (curto) para ser exibido no rodap\u00e9 do |\n| | | extrato, \u00e0 direita da borda do cupom. |\n+---------------------------------+------+----------------------------------------------+\n\n\nExecutando Testes\n=================\n\nPara executar os testes de emiss\u00e3o dos extratos em impressoras conectadas\n\u00e0 portas seriais, ou em impressoras USB a partir de virtualizadores de portas\nseriais:\n\n.. sourcecode:: shell-session\n\n $ python setup.py test -a \\\n \"--escpos-impl=escpos.impl.daruma.DR700 \"\\\n \"--escpos-if=serial \"\\\n \"--escpos-if-settings=\\\"/dev/ttyS7:9600,8,1,N\\\"\"\n\nPara executar os testes em uma impressora conectada \u00e0 rede, via TCP/IP no\nendere\u00e7o ``192.168.1.200`` porta ``9100``:\n\n.. sourcecode:: shell-session\n\n $ python setup.py test -a \\\n \"--escpos-impl=escpos.impl.epson.TMT20 \"\\\n \"--escpos-if=network \"\\\n \"--escpos-if-settings=\\\"192.168.1.200:9100\\\"\"\n\nPara mais op\u00e7\u00f5es sobre testes invoque a ajuda e procure por \"custom options\":\n\n.. sourcecode:: shell-session\n\n $ python setup.py test -a --help\n\n..\n Sphinx Documentation: Substitutions at\n http://sphinx-doc.org/rest.html#substitutions\n Codes copied from reStructuredText Standard Definition Files at\n http://docutils.sourceforge.net/docutils/parsers/rst/include/isonum.txt\n\n\n.. |reg| unicode:: U+00AE .. REGISTERED SIGN\n :ltrim:\n\n\n.. _`SAT-CF-e`: https://portal.fazenda.sp.gov.br/servicos/sat/Paginas/Sobre.aspx\n.. _`PyESCPOS`: https://github.com/base4sistemas/pyescpos\n.. _`Projeto SATCFe`: https://github.com/base4sistemas/satcfe\n.. _`XML`: http://www.w3.org/XML/\n.. _`Wiki`: https://github.com/base4sistemas/satextrato/wiki\n.. _`QRCode`: https://pt.wikipedia.org/wiki/C%C3%B3digo_QR\n.. _`Code128`: https://en.wikipedia.org/wiki/Code_128\n.. _`ConfigParser`: https://docs.python.org/2.7/library/configparser.html", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/base4sistemas/satextrato/", "keywords": "", "license": "Apache Software License", "maintainer": "", "maintainer_email": "", "name": "satextrato", "package_url": "https://pypi.org/project/satextrato/", "platform": "any", "project_url": "https://pypi.org/project/satextrato/", "project_urls": { "Homepage": "http://github.com/base4sistemas/satextrato/" }, "release_url": "https://pypi.org/project/satextrato/0.2/", "requires_dist": null, "requires_python": "", "summary": "Impress\u00e3o dos Extratos do CF-e-SAT", "version": "0.2" }, "last_serial": 3652020, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "e3509ae0382c3dcc0f472ab25fa24f25", "sha256": "714bd052d37cfb9478a44c872ebe67cdbd40afb77d09211d63397a53ced77d63" }, "downloads": -1, "filename": "satextrato-0.0.1.tar.gz", "has_sig": false, "md5_digest": "e3509ae0382c3dcc0f472ab25fa24f25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13315, "upload_time": "2015-05-02T14:03:09", "url": "https://files.pythonhosted.org/packages/04/cd/75fa4dddd46340b6cd067bfdd8bfb2540380f3186272e02e72a5524eb6e1/satextrato-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "a3ecfef9ce88b63a11ef6c6a84f5714b", "sha256": "0274a63cedfd84780efd8be271e282d9228f35809d05dc96668a1b618a35df4b" }, "downloads": -1, "filename": "satextrato-0.0.2.tar.gz", "has_sig": false, "md5_digest": "a3ecfef9ce88b63a11ef6c6a84f5714b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14335, "upload_time": "2015-05-02T16:55:51", "url": "https://files.pythonhosted.org/packages/23/fe/8fa1e1856942c9b5c0f8fac8b76d240391a25042647ddcdc19da5301dc7b/satextrato-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "99f6ef4519b14a4fd191dcf9a4f817cb", "sha256": "69464af583feea6f48309ceb4f2cc57610802a9b8f4cd4d20749b43135432a41" }, "downloads": -1, "filename": "satextrato-0.0.3.tar.gz", "has_sig": false, "md5_digest": "99f6ef4519b14a4fd191dcf9a4f817cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18137, "upload_time": "2015-05-06T13:00:39", "url": "https://files.pythonhosted.org/packages/35/0e/6078fc5bb0df1429b0a735a5933f2f1759589dd804f8e54db70fa7182068/satextrato-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "d64df9ef585cea07e8668a427b547750", "sha256": "7ac9860da42c5edd436d79fd985a7b90701c515795361e392fdcd0d1d979be9d" }, "downloads": -1, "filename": "satextrato-0.0.4.tar.gz", "has_sig": false, "md5_digest": "d64df9ef585cea07e8668a427b547750", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19105, "upload_time": "2015-05-19T23:18:39", "url": "https://files.pythonhosted.org/packages/84/d8/61e97a7917ecfe669f9d79916641d56f20dcb8358c5c173a2bb979a50ce0/satextrato-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "4950c5113ce98f89d882a9015b50d844", "sha256": "85ca10684446d25cf5918562d8b31578ca198c3a0020250131e7542fbdd5004c" }, "downloads": -1, "filename": "satextrato-0.0.5.tar.gz", "has_sig": false, "md5_digest": "4950c5113ce98f89d882a9015b50d844", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19140, "upload_time": "2015-07-18T21:05:43", "url": "https://files.pythonhosted.org/packages/da/f3/995552b5c8aea47ec32d5fa8288357e563d42bf5d1319f97afd57f262464/satextrato-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "833c3ecd3a296c201daa4380784f676a", "sha256": "c793808abc13df6a981149ed432dc9f066d4127f4018c31f7e44fa742b162b6c" }, "downloads": -1, "filename": "satextrato-0.0.6.tar.gz", "has_sig": false, "md5_digest": "833c3ecd3a296c201daa4380784f676a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19224, "upload_time": "2015-07-31T22:00:04", "url": "https://files.pythonhosted.org/packages/0e/b8/d1965f9dc104ed36fa6e46d6dc5f06983651d27e918c7ab8a66dcad064d1/satextrato-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "14f3afdb48b9f67d272dfca25a911764", "sha256": "295301b20423c535c4116b205e17eb3339e716636cd4d20e4e589c0e39042418" }, "downloads": -1, "filename": "satextrato-0.0.7.tar.gz", "has_sig": false, "md5_digest": "14f3afdb48b9f67d272dfca25a911764", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19381, "upload_time": "2015-08-07T00:17:56", "url": "https://files.pythonhosted.org/packages/86/99/2bedf5348bc490eb1c40bb367c1e6716191a6f8121ca5787aa02277d869d/satextrato-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "326c9b41954cd05f43ca5aa67aa2cf33", "sha256": "ce8a6e4f1659cb3bfa8a6edb41fbb3a7145081d5197fae3b0e950ade876faa27" }, "downloads": -1, "filename": "satextrato-0.0.8.tar.gz", "has_sig": false, "md5_digest": "326c9b41954cd05f43ca5aa67aa2cf33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19406, "upload_time": "2015-08-10T20:02:29", "url": "https://files.pythonhosted.org/packages/00/d4/7e16c04dbe4d557761cdfcadb0326eb04a20b763aa809dfd72d4cc95bff6/satextrato-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "5c88c6f0175fd70223f584966eb62afe", "sha256": "c046cda9253214f913c534c348ee92e028f8fd5bf85778f3b770d308db757056" }, "downloads": -1, "filename": "satextrato-0.0.9.tar.gz", "has_sig": false, "md5_digest": "5c88c6f0175fd70223f584966eb62afe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19628, "upload_time": "2015-08-19T19:57:42", "url": "https://files.pythonhosted.org/packages/36/55/64e46bde21fb61c816c08562bb91ca9bc512507286cbdda7071fc9d8cc9c/satextrato-0.0.9.tar.gz" } ], "0.1": [ { "comment_text": "", "digests": { "md5": "44aa253d3c3032b56e654735a08f368e", "sha256": "11eb3357a3a75d612b1d025a26740e012d81f49b99943243cefa43204394dc9e" }, "downloads": -1, "filename": "satextrato-0.1.tar.gz", "has_sig": false, "md5_digest": "44aa253d3c3032b56e654735a08f368e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20661, "upload_time": "2017-02-08T12:12:20", "url": "https://files.pythonhosted.org/packages/f0/df/911b68e0886222e65a25a5c413de1a73428bd5b974815d32fcff284363c7/satextrato-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "8b4ad46d791c068b0fd3dc92d40cc48a", "sha256": "ddd058557f55b58581954a451a3a3cf673f9278c09fe62dd31434e995868d2a8" }, "downloads": -1, "filename": "satextrato-0.2.tar.gz", "has_sig": false, "md5_digest": "8b4ad46d791c068b0fd3dc92d40cc48a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31864, "upload_time": "2018-03-08T18:47:31", "url": "https://files.pythonhosted.org/packages/e5/c7/77cab9f268c2d3dfd09f51951949273c2b283790abc7535fe1209c1fa975/satextrato-0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8b4ad46d791c068b0fd3dc92d40cc48a", "sha256": "ddd058557f55b58581954a451a3a3cf673f9278c09fe62dd31434e995868d2a8" }, "downloads": -1, "filename": "satextrato-0.2.tar.gz", "has_sig": false, "md5_digest": "8b4ad46d791c068b0fd3dc92d40cc48a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31864, "upload_time": "2018-03-08T18:47:31", "url": "https://files.pythonhosted.org/packages/e5/c7/77cab9f268c2d3dfd09f51951949273c2b283790abc7535fe1209c1fa975/satextrato-0.2.tar.gz" } ] }