You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "Leonardo de Campos Almeida (JIRA)" <ji...@apache.org> on 2018/08/27 09:38:00 UTC
[jira] [Created] (AIRFLOW-2963) Error parsing AIRFLOW_CONN_ URI
Leonardo de Campos Almeida created AIRFLOW-2963:
---------------------------------------------------
Summary: Error parsing AIRFLOW_CONN_ URI
Key: AIRFLOW-2963
URL: https://issues.apache.org/jira/browse/AIRFLOW-2963
Project: Apache Airflow
Issue Type: Bug
Components: boto3, configuration
Affects Versions: 1.9.0
Reporter: Leonardo de Campos Almeida
Fix For: 1.9.0
I'm using the environment variable AIRFLOW_CONN_ to define my connection to AWS, but my AWS secret access key has a slash on it.
e.g.:
{code:java}
s3://login:pass/word@bucket
{code}
The problem is that the method *BaseHook._get_connection_from_env* doesn't accept this URI as a valid URI. When it finds the / it is assuming that the path starts there, so it is returning:
* host: login
* port: pass
* path: word
And ignoring the rest, so I get an error, because pass is not a valid port number.
So, I tried to pass the URI quoted
{code:java}
s3://login:pass%2Fword@bucker
{code}
But them, the values are not being unquoted correctly, and the AwsHook is trying to use pass%2Fword as the secret access key.
I took a look at the method that parses the URI, and it is only unquoting the host, manually.
{code:java}
def parse_from_uri(self, uri):
temp_uri = urlparse(uri)
hostname = temp_uri.hostname or ''
if '%2f' in hostname:
hostname = hostname.replace('%2f', '/').replace('%2F', '/')
conn_type = temp_uri.scheme
if conn_type == 'postgresql':
conn_type = 'postgres'
self.conn_type = conn_type
self.host = hostname
self.schema = temp_uri.path[1:]
self.login = temp_uri.username
self.password = temp_uri.password
self.port = temp_uri.port
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)