Source code for arx.sources.core

import py.path
import uritools

from ..decorators import signature
from ..inner.uritools import uridisplay


[docs]class Source(object): """ABC for sources."""
[docs] def cache(self, cache): """Generates a filesystem local source from this source. The :class:`~arx.sources.files.File` thus returned can be used in place of the original source. The method is passed a created, temporary directory which is cleared by the implementation. The :class:`~arx.sources.files.File` source should be stored somewhere under this directory, but it is allowed to store metadata, like checksums, alongside it. It is advisable that this method reuse data when it is already present in the cache; but this is not a requirement. An implementation that clears the cache and pulls the data anew each time will not break clients. For :class:`~arx.sources.files.File` and its subclasses, ``cache`` returns ``self``. """ raise NotImplementedError()
def place(self, cache, path): raise NotImplementedError() def run(self, cache, args=[]): raise NotImplementedError() def externalize(self): """Provide a representation of a source in terms of simple data types: strings, lists and dictionaries. For most sources, this will be a string representing a URL. For :class:`arx.sources.inline.Inline` sources, this will be a dictionary with one K/V pair, where both K and V are strings. """ raise NotImplementedError()
class DiskLocal(Source): """Sources that are on local disk.""" pass class SourceURL(Source): def __str__(self): return uridisplay(self.url) def __repr__(self): return '%s(%r)' % (type(self).__name__, str(self)) def __getattr__(self, name): return getattr(self.url, name) def externalize(self): return uritools.uriunsplit(self.url) def dataname(self, cache): """Default name for data stored in the cache.""" return cache.join('data') class SignableURL(SourceURL): """URLs that can be signed to allow privileged access without granting credentials. For example, signing S3 URLs to get HTTP URLs.""" def sign(self): """Returns a new signed ``Source``.""" raise NotImplementedError() """Convert the first argument to a URL.""" oneurl = signature((uritools.SplitResult, uritools.urisplit)) """Convert the first argument to a parsed path.""" onepath = signature(py.path.local) """Convert the first two arguments to parsed paths.""" twopaths = signature(py.path.local, py.path.local)