def build(self, **kwargs): """ Build an url with the given arguments from URL's regexps. :rtype: :class:`str` :raises: :class:`UrlNotResolvable` if unable to resolve a correct url with the given arguments. """ browser = kwargs.pop('browser', self.browser) patterns = [] for url in self.urls: patterns += normalize(url) for pattern, _ in patterns: url = pattern # only use full-name substitutions, to allow % in URLs for kwkey in kwargs.keys(): # need to use keys() because of pop() search = '%%(%s)s' % kwkey if search in pattern: url = url.replace(search, unicode(kwargs.pop(kwkey))) # if there are named substitutions left, ignore pattern if re.search('%\([A-z_]+\)s', url): continue # if not all kwargs were used if len(kwargs): continue return browser.absurl(url, base=True) raise UrlNotResolvable('Unable to resolve URL with %r. Available are %s' % (kwargs, ', '.join([pattern for pattern, _ in patterns])))
def go(self, **kwargs): """ Request to go on this url. Arguments are optional parameters for url. >>> url = URL('http://exawple.org/(?P<pagename>).html') >>> url.stay_or_go(pagename='index') """ patterns = [] for url in self.urls: patterns += normalize(url) for pattern, args in patterns: url = pattern % kwargs return self.browser.location(url)
def build(self, **kwargs): """ Build an url with the given arguments from URL's regexps. :param param: Query string parameters :rtype: :class:`str` :raises: :class:`UrlNotResolvable` if unable to resolve a correct url with the given arguments. """ browser = kwargs.pop('browser', self.browser) params = kwargs.pop('params', None) patterns = [] for url in self.urls: patterns += normalize(url) for pattern, _ in patterns: url = pattern # only use full-name substitutions, to allow % in URLs args = kwargs.copy() for key in list( args.keys()): # need to use keys() because of pop() search = '%%(%s)s' % key if search in pattern: url = url.replace(search, to_unicode(args.pop(key))) # if there are named substitutions left, ignore pattern if re.search('%\([A-z_]+\)s', url): continue # if not all args were used if len(args): continue url = browser.absurl(url, base=True) if params: p = requests.models.PreparedRequest() p.prepare_url(url, params) url = p.url return url raise UrlNotResolvable( 'Unable to resolve URL with %r. Available are %s' % (kwargs, ', '.join([pattern for pattern, _ in patterns])))
def build(self, **kwargs): """ Build an url with the given arguments from URL's regexps. :param param: Query string parameters :rtype: :class:`str` :raises: :class:`UrlNotResolvable` if unable to resolve a correct url with the given arguments. """ browser = kwargs.pop('browser', self.browser) params = kwargs.pop('params', None) patterns = [] for url in self.urls: patterns += normalize(url) for pattern, _ in patterns: url = pattern # only use full-name substitutions, to allow % in URLs args = kwargs.copy() for key in list(args.keys()): # need to use keys() because of pop() search = '%%(%s)s' % key if search in pattern: url = url.replace(search, to_unicode(args.pop(key))) # if there are named substitutions left, ignore pattern if re.search('%\([A-z_]+\)s', url): continue # if not all args were used if len(args): continue url = browser.absurl(url, base=True) if params: p = requests.models.PreparedRequest() p.prepare_url(url, params) url = p.url return url raise UrlNotResolvable('Unable to resolve URL with %r. Available are %s' % (kwargs, ', '.join([pattern for pattern, _ in patterns])))