Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Errno 110] Connection timed out #146

Open
gabivaleriano opened this issue Aug 2, 2023 · 8 comments
Open

[Errno 110] Connection timed out #146

gabivaleriano opened this issue Aug 2, 2023 · 8 comments

Comments

@gabivaleriano
Copy link

Oi,

não consigo importar a biblioteca:

TimeoutError Traceback (most recent call last)
Cell In[1], line 1
----> 1 from pysus.online_data import SINAN
2 import pandas as pd

File ~/env1/lib/python3.11/site-packages/pysus/online_data/init.py:139
135 df = df.convert_dtypes()
136 return df
--> 139 class FTP_Inspect:
140 """
141 Databases: "SINAN", "SIM", "SINASC", "SIH", "SIA", "PNI", "CNES", "CIHA"
142 FTP_Inspect will focus mainly on enter in DataSUS ftp server
(...)
154 for the Database. Groups may be also required.
155 """
157 database: str

File ~/env1/lib/python3.11/site-packages/pysus/online_data/init.py:159, in FTP_Inspect()
157 database: str
158 _ds_paths: list
--> 159 ftp_server: FTP = FTP('ftp.datasus.gov.br')
160 available_dbs: list = list(DB_PATHS.keys())
162 def init(self, database: str) -> None:

File /usr/lib/python3.11/ftplib.py:121, in FTP.init(self, host, user, passwd, acct, timeout, source_address, encoding)
119 self.timeout = timeout
120 if host:
--> 121 self.connect(host)
122 if user:
123 self.login(user, passwd, acct)

File /usr/lib/python3.11/ftplib.py:158, in FTP.connect(self, host, port, timeout, source_address)
156 self.source_address = source_address
157 sys.audit("ftplib.connect", self, self.host, self.port)
--> 158 self.sock = socket.create_connection((self.host, self.port), self.timeout,
159 source_address=self.source_address)
160 self.af = self.sock.family
161 self.file = self.sock.makefile('r', encoding=self.encoding)

File /usr/lib/python3.11/socket.py:850, in create_connection(address, timeout, source_address, all_errors)
848 try:
849 if not all_errors:
--> 850 raise exceptions[0]
851 raise ExceptionGroup("create_connection failed", exceptions)
852 finally:
853 # Break explicitly a reference cycle

File /usr/lib/python3.11/socket.py:835, in create_connection(address, timeout, source_address, all_errors)
833 if source_address:
834 sock.bind(source_address)
--> 835 sock.connect(sa)
836 # Break explicitly a reference cycle
837 exceptions.clear()

TimeoutError: [Errno 110] Connection timed out

Alguma experiência parecida?

Muito obrigada!!

@fccoelho
Copy link
Collaborator

fccoelho commented Aug 2, 2023

Pela mensagem de erro, é problema de conexão, pois o PySUS tenta se conectar com o servidor do DATASUS.

Verifique se você tem uma conexão de rede ativa e tenta de novo.

@gabivaleriano
Copy link
Author

Agradeço a resposta! Sim, tenho conexão de rede e mesmo assim continuo com o mesmo erro.

@MarceloDuarteCunha
Copy link

MarceloDuarteCunha commented Oct 20, 2023

Boa tarde. Eu também não consigo desde ontem.

!sudo apt install python3.9 python3.9-dev python3.9-venv
!python3.9 -m venv .env
!source .env/bin/activate
!pip install pysus

Tentei todas as seguintes formas de import:

from pysus.online_data.CNES import download
from pysus.online_data.SIA import download
from pysus.ftp.databases.cnes import CNES
from pysus.online_data import SIM, CNES, IBGE, parquets_to_dataframe, search_string, download

Estou tentando conectar desde ontem, mas eu consigo fazer o download via FTP com outra bibliotecas.

Será mesmo conexão?

Outra coisa é que ao tentar abrir o arquivo .DBC, agora tem dado este erro:

anos = [23]
meses = ['08']
estados =["AC","AL","AP","AM","BA","CE","DF","ES","GO","MA","MT", "MS","MG","PA","PB","PR","PE","PI","RJ","RN","RS","RO","RR","SC","SP","SE","TO"]
nomesgrupos = {
        "Dados Complementares": "DC" ,
        "Estabelecimento de Ensino": "EE",
        "Estabelecimento Filantrópico": "EF",
        "Equipes": "EP",
        "Equipamentos": "EQ",
        "Gestão e Metas": "GM",
        "Habilitação": "HB",
        "Incentivos": "IN",
        "Leitos": "LT",
        "Profissional": "PF",
        "Regra Contratual": "RC",
        "Serviço Especializado": "SR",
        "Estabelecimentos": "ST"
    }

grupos = [nomesgrupos['Estabelecimentos']]

banco={}

ftp = FTP(f'ftp.datasus.gov.br')
ftp.login() # Login sem necessidade de usuário e senha

for y in anos:
    for m in meses:
        for uf in estados:
            for gp in grupos:

                dir = 'dissemin/publicos/CNES/200508_/Dados/' + gp
  
                ftp.cwd(dir) #Diretório para os arquivos do CNES

                file=gp+uf+str(y)+m+".dbc"

                # Download dos dados
                with open(file, 'wb') as fp:
                    ftp.retrbinary('RETR ' + file, fp.write, 1024)
                    print("Banco de " + file + " baixado!")

ftp.quit() # Fecha a conexão com o FTP 

df = read_dbc('/content/STTO2308.dbc', encoding='iso-8859-1')

ERROR: Failed to read DBF: unpack requires a buffer of 32 bytes

Podem me ajudar?

Muito Obrigado

@aldemirfilho
Copy link

Olá! Alguma novidade acerca desse problema?

Ao tentar acessar usando:

SPa = download('AL', 2023, 4, group='PA')[0] # Some large datasets are split in more than one DBC
dfSPa = parquets_to_dataframe(SPa)

Recebo o Erro:

---------------------------------------------------------------------------
TimeoutError                              Traceback (most recent call last)
[<ipython-input-6-ca3a8d608464>](https://localhost:8080/#) in <cell line: 1>()
----> 1 SPa = download('AL', 2023, 4, group='PA')[0] # Some large datasets are split in more than one DBC
      2 dfSPa = parquets_to_dataframe(SPa)

7 frames
[/usr/lib/python3.10/socket.py](https://localhost:8080/#) in create_connection(address, timeout, source_address)
    831             if source_address:
    832                 sock.bind(source_address)
--> 833             sock.connect(sa)
    834             # Break explicitly a reference cycle
    835             err = None

TimeoutError: [Errno 110] Connection timed out

Alguem poderia me ajudar, por favor?

@anapaulagomes
Copy link

Sobre o Connection timed out, é um problema de indisponibilidade do FTP do Datasus mesmo. Pra testar basta ir no https://datasus.saude.gov.br/transferencia-de-arquivos/# e tentar fazer acesso usando a ferramenta FTP de sua escolha.

Embora não seja culpa do PySUS, acho que dá pra melhorar a mensagem de erro e torná-la mais amigável. Posso abrir um PR pra isso.

@fccoelho
Copy link
Collaborator

Sobre o Connection timed out, é um problema de indisponibilidade do FTP do Datasus mesmo. Pra testar basta ir no https://datasus.saude.gov.br/transferencia-de-arquivos/# e tentar fazer acesso usando a ferramenta FTP de sua escolha.

Embora não seja culpa do PySUS, acho que dá pra melhorar a mensagem de erro e torná-la mais amigável. Posso abrir um PR pra isso.

Obrigado @anapaulagomes fique à vontade para abrir este PR!

@anapaulagomes
Copy link

Descobri que o mesmo erro acontece para quem está fora do Brasil também. Vou abrir uma reclamação (e abrir um PR com uma mensagem melhorada).

@anapaulagomes
Copy link

Olhando o código, percebi que não faz sentido essa pequena mensagem de erro sem a #59.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants