Esempio n. 1
0
File: url.py Progetto: pybus/pybus
def decode(a):
	return decodestr(a.decode('ascii'))
Esempio n. 2
0
File: url.py Progetto: pybus/pybus
def parse(s):
	s=str(s)
	self=URL()

	schB=0
	schE=s.find(':', schB)
	if schE == -1:
		raise InvalidURL(s)
	self.protocol=s[schB:schE]
	if s[schE+1:schE+3] == '//':
		authB=schE+3
		authE=s.find('/', authB)
		if authE == -1:
			authE=len(s)
		auth=s[authB:authE]
		usrB=0
		usrE=auth.find('@', usrB)
		if usrE != -1:
			pwdB=usrB
			pwdE=auth.find(':', pwdB)
			if pwdE != -1:
				self.passwotd=decodestr(auth[pwdB:pwdE])
				usrB=pwdE+1
			self.userinfo=decodestr(auth[usrB:usrE])
		domB=usrE+1
		domE=auth.rfind(':', domB)
		if domE != -1:
			portB=domE+1
			portE=len(auth)
			port=auth[portB:portE]
			if ']' in port:
				domE=len(auth)
			else:
				self.port=int(port)
		else:
			domE=len(auth)
		self.host=auth[domB:domE]
		if self.host[:4] == 'xn--':
			self.host=self.host[4:].encode('ascii').decode('punycode')
	else:
		authE=schE
	if authE == len(s):
		self.path='/'
	else:
		pathB=authE
		qpE=s.find('#', pathB)
		if qpE != -1:
			fB=qpE+1
			fE=len(s)
			self.fragment=decodestr(s[fB:fE])
		else:
			qpE=len(s)

		pathE=s.find('?', pathB, qpE)
		if pathE != -1:
			qB=pathE+1
			qE=qpE
			self.query=decodestr(s[qB:qE])
		else:
			pathE=qpE
		self.path=decodestr(s[pathB:pathE])
	return self