Форум сайта python.su
Столкнулся с такой проблемой
Нужно распарсить урл содержащий символы
[ ]
result = urlparse.urlparse("postgresql://zerg:pass[word@server_name:5432/database_name")
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urlparse.py", line 214, in urlsplit raise ValueError("Invalid IPv6 URL") ValueError: Invalid IPv6 URL
Отредактировано ZerG (Окт. 23, 2015 09:18:37)
Офлайн
ZerG
писать свое регулярное выражение
Офлайн
rfc3986. ipv6 format
rfc3986. reserved
rfc3986. percent-encode
>>> import urllib.parse >>> >>> hex(ord('[')) '0x5b' >>> hex(ord(']')) '0x5d' >>> urllib.parse.urlparse('postgresql://zerg:pass%5Bword@server_name:5432/database_name') ParseResult(scheme='postgresql', netloc='zerg:pass%5Bword@server_name:5432', path='/database_name', params='', query='', fragment='') >>>
Отредактировано py.user.next (Окт. 23, 2015 11:25:51)
Офлайн
Так и смысл? Оно то его парсит - но как пароль не принимает
# -*- coding: utf-8 -*- import pgwrap db = pgwrap.connection(url='postgresql://zerg:pass%5Bword@server_name:5432/database_name')
class connection(object): def __init__(self,url=None,hstore=False,log=None,logf=None,min=1,max=5, default_cursor=DictCursor): params = urlparse.urlparse(url or os.environ.get('DATABASE_URL') or 'postgres://localhost/') self.pool = ThreadedConnectionPool(min,max, database=params.path[1:], user=params.username, password=params.password, host=params.hostname, port=params.port, )
pass%5Bword
Отредактировано ZerG (Окт. 23, 2015 11:56:43)
Офлайн
ZerG
создай свой connection
Офлайн
Да учитывая что pgwrap всего лишь обвес на psycopg2 без проблем. Однако не есть гуд дописывать стандартные либы.
Офлайн
ZerGЕсли она использует URI (формат адреса), то она не может передавать октеты, закодированные через процент, не раскодировав их, иначе она нарушает rfc, который и определяет формат адреса.
соответственно пароль который оно передает при коннекте к БД будет
Отредактировано py.user.next (Окт. 23, 2015 13:03:13)
Офлайн
ZerG
это не стандартная либа
Офлайн