{
"info": {
"author": "Daniel Gon\u00e7alves",
"author_email": "daniel@base4.com.br",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 1 - Planning",
"Environment :: Other Environment",
"Framework :: Flask",
"Intended Audience :: Developers",
"Intended Audience :: Information Technology",
"License :: OSI Approved :: Apache Software License",
"Natural Language :: Portuguese (Brazilian)",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Topic :: Office/Business :: Financial :: Point-Of-Sale"
],
"description": "Projeto SATHub\n==============\n\n.. image:: https://img.shields.io/badge/status-planning-red.svg\n :target: https://pypi.python.org/pypi/sathub/\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/sathub/\n :alt: Supported Python versions\n\n.. image:: https://img.shields.io/pypi/l/sathub.svg\n :target: https://pypi.python.org/pypi/sathub/\n :alt: License\n\n.. image:: https://img.shields.io/pypi/v/sathub.svg\n :target: https://pypi.python.org/pypi/sathub/\n :alt: Latest version\n\n-------\n\n This project is about `SAT-CF-e`_ which is a system for autorization and\n transmission of fiscal documents, developed by Finance Secretary of\n state of S\u00e3o Paulo, Brazil. This entire project, variables, methods and\n class names, as well as documentation, are written in brazilian\n portuguese.\n\n Refer to the `official web site `_ for\n more information (in brazilian portuguese only).\n\n\nEste projeto est\u00e1 relacionado \u00e0 tecnologia `SAT-CF-e`_ para autoriza\u00e7\u00e3o e\ntransmiss\u00e3o de documentos CF-e (*Cupons Fiscais eletr\u00f4nicos*).\n\nSATHub \u00e9 um projeto open-source baseado em `Flask`_ e `Flask-RESTful`_ para\nprover uma API que possibilita que m\u00faltiplos pontos-de-venda (PDV) possam\ncompartilhar um \u00fanico equipamento SAT. Por se tratar de uma API RESTful,\nqualquer aplica\u00e7\u00e3o de ponto-de-venda pode invocar fun\u00e7\u00f5es SAT, desde que seja\ncapaz de fazer requisi\u00e7\u00f5es HTTP simples.\n\nTamb\u00e9m fornece um *frontend* web leve para tornar poss\u00edvel o acesso \u00e0s fun\u00e7\u00f5es\ndo equipamento SAT a partir de um navegador com suporte \u00e0 HTML5.\n\n.. image:: https://raw.github.com/base4sistemas/sathub/master/doc/static/screenshots/20150919/composicao.png\n :align: center\n :alt: Capturas de tela da aplica\u00e7\u00e3o SATHub.\n\nEste projeto integra os projetos `SATCFe `_ e\n`SATcomum ` para fornecer uma API\nRESTful. Se o seu projeto j\u00e1 for baseado no projeto **SATCFe**, basta configurar\no acesso ao servidor SATHub e instanciar ``satcfe.ClienteSATHub`` ao inv\u00e9s de\ninstanciar ``satcfe.ClienteSATLocal``.\n\n\nInstalando em Modo de Desenvolvimento no Windows 8.1\n====================================================\n\nCaso queira experimentar SATHub em Windows, o roteiro n\u00e3o \u00e9 exatamente curto mas\n\u00e9 bem simples. O primeiro passo \u00e9 instalar o `Python`_ 2.7 e todas as demais\ndepend\u00eancias para que seja poss\u00edvel executar o servidor SATHub em modo de\ndesenvolvimento.\n\n#. Baixe o arquivo MSI para sua arquitetura `neste link `_.\n Procure o link *Latest Python 2 Release* e ent\u00e3o localize o link para para o\n pacote **Windows x86 MSI installer** ou **Windows x86-64 MSI installer** se\n a arquitetura do seu sistema for 64 bits. Fa\u00e7a a instala\u00e7\u00e3o normalmente como\n qualquer outro pacote MSI, aceitando as op\u00e7\u00f5es pr\u00e9-definidas.\n\n#. Para ter acesso aos bin\u00e1rios, ser\u00e1 preciso incluir o caminho em ``Path``.\n Tecle ``Win+X`` e escolha a op\u00e7\u00e3o *Sistema*.\n\n#. No di\u00e1logo *Sistema* escolha a op\u00e7\u00e3o *Configura\u00e7\u00f5es avan\u00e7adas do sistema*.\n\n#. No di\u00e1logo *Propriedades do Sistema*, guia *Avan\u00e7ado*, clique no bot\u00e3o\n *Vari\u00e1veis de Ambiente*.\n\n#. Na lista de *Vari\u00e1veis do Sistema* localize a vari\u00e1vel ``Path``, selecione-a\n e clique em *Editar* e **inclua** (n\u00e3o apague o valor j\u00e1 existente) o\n seguinte trecho no in\u00edcio do campo *Valor*::\n\n C:\\Python27;C:\\Python27\\Scripts;\n\n Se voc\u00ea instalou o Python em um caminho diferente, adapte os valores.\n\n#. Abra o Windows PowerShell: mova o cursor para o canto superior direito,\n clique na op\u00e7\u00e3o *Pesquisar* e escreva ``powershell``. A primeira op\u00e7\u00e3o\n encontrada dever\u00e1 ser *Windows PowerShell*, clique nela.\n\n#. Digite o seguinte comando no terminal:\n\n .. sourcecode:: powershell\n\n PS C:\\Users\\User> python --version\n Python 2.7.10\n\n Se obtiver um erro, revise os passos.\n\nCom o Python instalado ser\u00e1 preciso instalar as depend\u00eancias para execu\u00e7\u00e3o\ndo SATHub em modo de desenvolvimento. Ainda no Windows PowerShell:\n\n.. sourcecode:: powershell\n\n PS C:\\Users\\User> pip install virtualenv\n PS C:\\Users\\User> virtualenv sat\n PS C:\\Users\\User> .\\sat\\Scripts\\activate.ps1\n (sat) PS C:\\Users\\User> pip install flask\n (sat) PS C:\\Users\\User> pip install flask-restful\n (sat) PS C:\\Users\\User> pip install unidecode\n (sat) PS C:\\Users\\User> pip install requests\n (sat) PS C:\\Users\\User> pip install satcomum\n (sat) PS C:\\Users\\User> pip install satcfe\n\nFa\u00e7a o `download dos fontes `_\ndo projeto SATHub (ou clone o projeto se voc\u00ea possui o\n`Git `_ instalado) e descompacte o arquivo em\num diret\u00f3rio de sua prefer\u00eancia, digamos ``C:\\workdir``.\n\n.. sourcecode:: powershell\n\n (sat) PS C:\\Users\\User> cd \\workdir\\sathub-master\\\n (sat) PS C:\\workdir\\sathub-master> python runserver.py\n\nSe lhe for apresentando o di\u00e1logo de restri\u00e7\u00e3o de acesso do Firewall do Windows,\npermita o acesso para o aplicativo. Voc\u00ea dever\u00e1 ver uma sa\u00edda como essa\n(aparentemente com informa\u00e7\u00e3o duplicada, isso \u00e9 normal em desenvolvimento):\n\n.. sourcecode:: text\n\n SATHub versao 0.1\n [-] Debug esta LIGADO\n [-] Caminho para DLL: sat.dll\n [-] Convencao de chamada para DLL: Windows \"stdcall\"\n ** DLL NAO ENCONTRADA **\n\n * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)\n * Restarting with stat\n [-] Debug esta LIGADO\n [-] Caminho para DLL: sat.dll\n [-] Convencao de chamada para DLL: Windows \"stdcall\"\n ** DLL NAO ENCONTRADA **\n\nNeste ponto o servidor est\u00e1 em execu\u00e7\u00e3o, mas h\u00e1 um problema. Note a mensagem\nque diz **DLL NAO ENCONTRADA**. Interrompa o servidor teclando ``Ctrl+C``.\nNote que ap\u00f3s a primeira execu\u00e7\u00e3o foi criado um arquivo chamado ``conf.json``.\nAbra esse arquivo com um editor de textos e coloque o caminho completo para a\nDLL do seu equipamento SAT. O arquivo dever\u00e1 ficar mais ou menos assim:\n\n.. sourcecode:: json\n\n {\n \"debug\": true,\n \"codigo_ativacao\": \"123456789\",\n \"convencao_chamada\": 2,\n \"caminho_dll\": \"C:/SAT/SAT.DLL\"\n }\n\nNote que o caminho para a DLL \u00e9 especificado usando barras no padr\u00e3o Unix\n(``/`` *forward slahes*), mesmo no Windows, ao inv\u00e9s de usar contra-barras.\n\nSe o seu c\u00f3digo de ativa\u00e7\u00e3o for diferente, altere-o tamb\u00e9m. A conven\u00e7\u00e3o de\nchamada ``2`` significa *Windows Standard calls* (ou apenas *Windows StdCall*).\nSe sua DLL usar a conven\u00e7\u00e3o de chamadas de C (*Standard C calls*) altere a\npropriedade ``convencao_chamada`` para ``1``.\n\nExecute o servidor novamente com ``python runserver.py``. Voc\u00ea dever\u00e1 ver a\nseguinte sa\u00edda.\n\n.. sourcecode:: text\n\n SATHub versao 0.1\n [-] Debug esta LIGADO\n [-] Caminho para DLL: C:\\SAT\\SAT.DLL\n [-] Convencao de chamada para DLL: Windows \"stdcall\"\n\n * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)\n * Restarting with stat\n [-] Debug esta LIGADO\n [-] Caminho para DLL: C:\\SAT\\SAT.DLL\n [-] Convencao de chamada para DLL: Windows \"stdcall\"\n\n\nAcessando a API via PowerShell\n------------------------------\n\nNeste ponto o servidor est\u00e1 em execu\u00e7\u00e3o, o caminho para a DLL do equipamento\nSAT foi configurado e est\u00e1 tudo OK. Podemos ent\u00e3o fazer algumas chamadas \u00e0 API\ndo SATHub para v\u00ea-lo em a\u00e7\u00e3o. Abra outra janela do PowerShell e digite:\n\n.. sourcecode:: powershell\n\n PS C:\\Users\\User> Invoke-RestMethod -Uri http://localhost:5000/hub/v1/consultarsat -Method POST -Body \"numero_caixa=1\"\n\nNa janela do terminal PowerShell em que o servidor est\u00e1 em execu\u00e7\u00e3o voc\u00ea ver\u00e1 o\nacesso \u00e0 URI, o m\u00e9todo de acesso e o c\u00f3digo de resposta, ``200`` OK, entre\noutras informa\u00e7\u00f5es::\n\n 127.0.0.1 - - [20/Jun/2015 10:25:48] \"POST /hub/v1/consultarsat HTTP/1.1\" 200 -\n\nNo terminal em que o comando ``Invoke-RestMethod`` foi executado voc\u00ea ter\u00e1 o\nseguinte resultado (se tudo correr bem)::\n\n funcao retorno\n ------ -------\n ConsultarSAT 101341|08000|SAT em opera\u00e7\u00e3o||\n\nO equivalente em um terminal Linux, usando `curl`_, \u00e9 o seguinte (acessando a\nm\u00e1quina Windows 8.1 em que o SATHub est\u00e1 executando, como no exemplo acima):\n\n.. sourcecode:: bash\n\n $ curl --data \"numero_caixa=1\" http://10.0.0.115:5000/hub/v1/consultarsat\n {\n \"funcao\": \"ConsultarSAT\",\n \"retorno\": \"101363|08000|SAT em opera\\u00e7\\u00e3o||\"\n }\n\nSe voc\u00ea tiver outras m\u00e1quinas Windows em uma rede local, ou estiver usando\nm\u00e1quinas virtuais, voc\u00ea poder\u00e1 acessar um \u00fanico equipamento SAT a partir de\nqualquer uma delas.\n\n\nAcessando a API em C#\n---------------------\n\nOs exemplos abaixo mostram como \u00e9 simples acessar a API RESTful de SATHub\natrav\u00e9s de outras linguagens muito comumente usadas neste campo de aplica\u00e7\u00f5es.\nNeste exemplo, usando C# (testado com `MonoDevelop`_):\n\n.. sourcecode:: csharp\n\n // (!) baseado em http://stackoverflow.com/a/4015346/550237\n using System;\n using System.Collections.Specialized;\n using System.Net;\n using System.Text;\n\n public class ExemploSATHub\n {\n static public void Main()\n {\n Console.WriteLine(ConsultarSAT());\n }\n\n private static string ConsultarSAT()\n {\n var payload = new NameValueCollection();\n payload[\"numero_caixa\"] = \"1\";\n\n var client = new WebClient();\n var response = client.UploadValues(\n \"http://10.0.0.115:5000/hub/v1/consultarsat\", payload);\n\n return Encoding.Default.GetString(response);\n }\n }\n\nO resultado \u00e9 o seguinte:\n\n.. sourcecode:: bash\n\n $ msc exemplo.cs\n $ mono exemplo.exe\n {\n \"funcao\": \"ConsultarSAT\",\n \"retorno\": \"100914|08000|SAT em opera\\u00e7\\u00e3o||\"\n }\n\n\nExecutando *smoke tests*\n========================\n\nCertas fun\u00e7\u00f5es SAT s\u00e3o dif\u00edceis de serem executadas contra um equipamento SAT\nreal ou at\u00e9 mesmo contra o emulador desenvolvido pela Secret\u00e1ria da Fazenda,\ncomo por exemplo, ``AtualizarSoftwareSAT`` ou ``CancelarUltimaVenda``. Por esse\nmotivo foi desenvolvido um *mockup* da biblioteca SAT, que implementa todas as\nfun\u00e7\u00f5es que a biblioteca SAT implementa, mas n\u00e3o acessa nenhum equipamento. As\nfun\u00e7\u00f5es apenas recebem os par\u00e2metros esperados e devolvem uma resposta muito\nparecida com uma resposta de sucesso. Desse modo, o *mockup* da biblioteca SAT\ntorna trivial executar testes simples para verificar o comportamento da API.\n\nPara executar os *smoke tests* ser\u00e1 necess\u00e1rio compilar o *mockup* da\nbiblioteca SAT que est\u00e1 em ``sathub/test/mockup/``. Voc\u00ea ir\u00e1 precisar de um\ncompilador GCC ou outro capaz de compilar o c\u00f3digo. Tipicamente, em um ambiente\nLinux, basta invocar ``make`` para produzir o arquivo ``libmockupsat.so``.\n\nConfigure o SATHub apontando para o *mockup* da biblioteca SAT (normalmente, a\nconven\u00e7\u00e3o de chamada ser\u00e1 *Standard C*, equivalente a ``1``):\n\n.. sourcecode:: json\n\n {\n \"debug\": true,\n \"codigo_ativacao\": \"123456789\",\n \"convencao_chamada\": 1,\n \"caminho_dll\": \"~/sathub/test/mockup/libmockupsat.so\"\n }\n\nPara executar os testes \u00e9 necess\u00e1rio instalar o framework para testes de APIs\nRESTful **PyRestTest** e suas depend\u00eancias:\n\n.. sourcecode:: shell\n\n (sat)$ pip install pyresttest pyyaml pycurl jsonschema\n\nAbra uma janela de terminal e execute o servidor SATHub:\n\n.. sourcecode:: shell\n\n (sat)$ python runserver.py\n\nAbra uma outra janela do terminal e v\u00e1 at\u00e9 o diret\u00f3rio onde est\u00e1 o arquivo YAML\nque descreve os testes e execute-os com PyRestTest:\n\n.. sourcecode:: shell\n\n (sat)$ cd ~/sathub/test/tests\n (sat)$ resttest.py http://localhost:5000 smoke.yaml\n Test Group Metodos SAT-CF-e SUCCEEDED: 14/14 Tests Passed!\n\n\nConsidera\u00e7\u00f5es\n=============\n\nVia de regra, \u00e9 recomendado que se mantenha um olho na legisla\u00e7\u00e3o vigente a\nrespeito da tecnologia SAT-CF-e e das implica\u00e7\u00f5es dessa legisla\u00e7\u00e3o na tecnologia\nde suporte empregrada. Atualmente n\u00e3o h\u00e1 nada regulamentando o acesso\ncompartilhado ao equipamento SAT. Tudo o que se tem \u00e9 que essa possibilidade tem\nsido aventada desde os prim\u00f3rdios do projeto.\n\nSendo assim, apenas use o bom senso ao compartilhar o acesso ao equipamento SAT\ne evite compartilhar muitos pontos-de-venda em \u00fanico equipamento. Considere\nbalancear o n\u00famero de pontos-de-venda e tenha sempre uma folga para redirecionar\nem caso de pane em um equipamento, por exemplo.\n\n\n.. _`SAT-CF-e`: http://www.fazenda.sp.gov.br/sat/\n.. _`satcfe`: https://github.com/base4sistemas/satcfe\n.. _`Python`: https://www.python.org/\n.. _`Flask`: http://flask.pocoo.org/\n.. _`Flask-RESTful`: https://flask-restful.readthedocs.org/\n.. _`curl`: http://curl.haxx.se/\n.. _`MonoDevelop`: http://www.monodevelop.com/",
"description_content_type": null,
"docs_url": null,
"download_url": "UNKNOWN",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "http://github.com/base4sistemas/sathub/",
"keywords": null,
"license": "Apache Software License",
"maintainer": null,
"maintainer_email": null,
"name": "sathub",
"package_url": "https://pypi.org/project/sathub/",
"platform": "any",
"project_url": "https://pypi.org/project/sathub/",
"project_urls": {
"Download": "UNKNOWN",
"Homepage": "http://github.com/base4sistemas/sathub/"
},
"release_url": "https://pypi.org/project/sathub/0.2/",
"requires_dist": null,
"requires_python": null,
"summary": "Compartilhamento do equipamento SAT via RESTful API",
"version": "0.2"
},
"last_serial": 1729656,
"releases": {
"0.1": [
{
"comment_text": "",
"digests": {
"md5": "425749b340018b53281b6b3349a90b7f",
"sha256": "c09b9314024b35267c2c0b71505b3400ffc6426ef3f2c902a073e18db73f1d11"
},
"downloads": -1,
"filename": "sathub-0.1.tar.gz",
"has_sig": false,
"md5_digest": "425749b340018b53281b6b3349a90b7f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 24848,
"upload_time": "2015-06-22T14:40:38",
"url": "https://files.pythonhosted.org/packages/56/e6/fe4142fa1bbd9e2f39d26afa5e27b77ba8944b534ee1649ade05440fa2bc/sathub-0.1.tar.gz"
}
],
"0.2": [
{
"comment_text": "",
"digests": {
"md5": "e34d8b0fca70ff6fcb3265f7c03a7454",
"sha256": "979f6abe7a76f9319a99bd6439d2bb01242310a0980c58b8952f9fda1d77f4db"
},
"downloads": -1,
"filename": "sathub-0.2.tar.gz",
"has_sig": false,
"md5_digest": "e34d8b0fca70ff6fcb3265f7c03a7454",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 332943,
"upload_time": "2015-09-19T16:36:35",
"url": "https://files.pythonhosted.org/packages/41/f1/0ab6dcba774e954c6296b05bf911ba0072fad7686b88ea414a4f1e04e54d/sathub-0.2.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "e34d8b0fca70ff6fcb3265f7c03a7454",
"sha256": "979f6abe7a76f9319a99bd6439d2bb01242310a0980c58b8952f9fda1d77f4db"
},
"downloads": -1,
"filename": "sathub-0.2.tar.gz",
"has_sig": false,
"md5_digest": "e34d8b0fca70ff6fcb3265f7c03a7454",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 332943,
"upload_time": "2015-09-19T16:36:35",
"url": "https://files.pythonhosted.org/packages/41/f1/0ab6dcba774e954c6296b05bf911ba0072fad7686b88ea414a4f1e04e54d/sathub-0.2.tar.gz"
}
]
}