class Segments(object): def __init__(self, base, path, segments, defaults): self.base = PURL(base, path=path) self.segments = OrderedDict(zip(segments, defaults)) def build(self): segments = self.base.path_segments() + tuple(self.segments.values()) url = self.base.path_segments(segments) return url def __str__(self): return self.build().as_string() def _get_segment(self, segment): return self.segments[segment] def _set_segment(self, segment, value): self.segments[segment] = value @classmethod def _segment(cls, segment): return property( fget=lambda x: cls._get_segment(x, segment), fset=lambda x, v: cls._set_segment(x, segment, v), )
def cached_path(args, url, rel): if url.startswith('/'): return url url_ = URL(url) cached = args.data_file('edmond', url_.path_segments()[-1]) if not cached.exists(): fname, headers = urlretrieve(url, '%s' % cached) return str(cached)
def info(self, url): """Interface method to be called when processing new images. This method ties together the DataProvider workflow. """ url = URL(url) return self.postprocess( self.info_for_id(self.id_from_url(url, url.host(), url.path_segments())))
class Segments(object): """ URL segment handler, not intended for direct use. The URL is constructed by joining base, path and segments. """ def __init__(self, base, path, segments, defaults): # Preserve the base URL self.base = PURL(base, path=path) # Map the segments and defaults lists to an ordered dict self.segments = OrderedDict(zip(segments, defaults)) def build(self): # Join base segments and segments segments = self.base.path_segments() + tuple(self.segments.values()) # Create a new URL with the segments replaced url = self.base.path_segments(segments) return url def full_path(self): full_path = self.build().as_string() full_path = full_path.replace(self.base.host(), '') full_path = full_path.replace(self.base.scheme(), '') return full_path[4:] def __str__(self): return self.build().as_string() def _get_segment(self, segment): return self.segments[segment] def _set_segment(self, segment, value): self.segments[segment] = value @classmethod def _segment(cls, segment): """ Returns a property capable of setting and getting a segment. """ return property( fget=lambda x: cls._get_segment(x, segment), fset=lambda x, v: cls._set_segment(x, segment, v), )
def get_links(instr): """ Given a link-value, generate individual links as dict. """ if instr: for link in [h.strip() for h in link_splitter.findall(instr)]: url, params = link.split(">", 1) url = URL(url[1:]) fname = url.path_segments()[-1] if url.path_segments() else '' info = { 'url': url.as_string(), 'ext': fname.split('.', 1)[1] if '.' in fname else None, 'rel': 'related', 'type': 'application/octet-stream'} for param in _splitstring(params, PARAMETER, "\s*;\s*"): try: a, v = param.split("=", 1) info[a.lower()] = _unquotestring(v) except ValueError: # pragma: no cover info[param.lower()] = None yield info
def get(self, url, **kw): url = URL(url) content = get_resource( url.path_segment(-1) if url.path_segments() else 'dataset', self.prefix) if content: return MagicMock( mimetype='application/rdf+xml', content=content, links=[dict( url='{0}.html'.format(url.as_string), ext='.html', rel='alternate', type='text/html')], canonical_url=url.as_string())
class Segments(object): """ URL segment handler, not intended for direct use. The URL is constructed by joining base, path and segments. """ def __init__(self, base, path, segments, defaults): # Preserve the base URL self.base = PURL(base, path=path) # Map the segments and defaults lists to an ordered dict self.segments = OrderedDict(zip(segments, defaults)) def build(self): # Join base segments and segments segments = self.base.path_segments() + tuple(self.segments.values()) # Create a new URL with the segments replaced url = self.base.path_segments(segments) return url def __str__(self): return self.build().as_string() def _get_segment(self, segment): return self.segments[segment] def _set_segment(self, segment, value): self.segments[segment] = value @classmethod def _segment(cls, segment): """ Returns a property capable of setting and getting a segment. """ return property( fget=lambda x: cls._get_segment(x, segment), fset=lambda x, v: cls._set_segment(x, segment, v), )
def __call__(self, index, row): if index == 0: self.cols = {col: i for i, col in enumerate(row)} return row url = URL(row[self.cols['src']]) try: for filename in url.path_segments(): if filename in self.md: if self.md[filename].get('source_url'): row[self.cols['source']] = self.md[filename]['source_url'] self.count += 1 break except IndexError: pass return row
def url_parts(self, url): url = URL(url) return url, url.host(), url.path_segments()
def get_image_info(img): for field in ['source', 'source_url', 'id']: for provider in PROVIDERS: url = URL(img[field]) if provider.id_from_url(url, url.host(), url.path_segments()): return provider.info(img[field])
inline_url = URL().scheme('https').domain('www.google.com').path( 'search').query_param('q', 'google') print(inline_url) print(inline_url.as_string()) u = URL('postgres://*****:*****@localhost:1234/test?ssl=true') print(u.scheme()) print(u.host()) print(u.domain()) print(u.username()) print(u.password()) print(u.netloc()) print(u.port()) print(u.path()) print(u.query()) print(u.path_segments()) print(u.query_param('ssl')) print(u.query_param('ssl', as_list=True)) print(u.query_params()) print(u.has_query_param('ssl')) print(u.subdomains()) u = URL.from_string('https://github.com/minwook-shin') print(u.path_segment(0)) new_url = u.add_path_segment('minwook-shin.github.com') print(new_url.as_string()) from purl import expand print(expand(u"{/path*}", {'path': ['sub', 'index']}))