mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-29 01:57:31 +08:00
4265a13edf
This reverts commit3b633011c6, reversing changes made to70ac5323de.
238 lines
5.2 KiB
Python
238 lines
5.2 KiB
Python
"""
|
|
Canonical path locations for zipline data.
|
|
|
|
Paths are rooted at $ZIPLINE_ROOT if that environment variable is set.
|
|
Otherwise default to expanduser(~/.zipline)
|
|
"""
|
|
from errno import EEXIST
|
|
import os
|
|
from os.path import exists, expanduser, join
|
|
|
|
import pandas as pd
|
|
|
|
|
|
def hidden(path):
|
|
"""Check if a path is hidden.
|
|
|
|
Parameters
|
|
----------
|
|
path : str
|
|
A filepath.
|
|
"""
|
|
return os.path.split(path)[1].startswith('.')
|
|
|
|
|
|
def ensure_directory(path):
|
|
"""
|
|
Ensure that a directory named "path" exists.
|
|
"""
|
|
try:
|
|
os.makedirs(path)
|
|
except OSError as exc:
|
|
if exc.errno == EEXIST and os.path.isdir(path):
|
|
return
|
|
raise
|
|
|
|
|
|
def ensure_directory_containing(path):
|
|
"""
|
|
Ensure that the directory containing `path` exists.
|
|
|
|
This is just a convenience wrapper for doing::
|
|
|
|
ensure_directory(os.path.dirname(path))
|
|
"""
|
|
ensure_directory(os.path.dirname(path))
|
|
|
|
|
|
def ensure_file(path):
|
|
"""
|
|
Ensure that a file exists. This will create any parent directories needed
|
|
and create an empty file if it does not exists.
|
|
|
|
Parameters
|
|
----------
|
|
path : str
|
|
The file path to ensure exists.
|
|
"""
|
|
ensure_directory_containing(path)
|
|
open(path, 'a+').close() # touch the file
|
|
|
|
|
|
def last_modified_time(path):
|
|
"""
|
|
Get the last modified time of path as a Timestamp.
|
|
"""
|
|
return pd.Timestamp(os.path.getmtime(path), unit='s', tz='UTC')
|
|
|
|
|
|
def modified_since(path, dt):
|
|
"""
|
|
Check whether `path` was modified since `dt`.
|
|
|
|
Returns False if path doesn't exist.
|
|
|
|
Parameters
|
|
----------
|
|
path : str
|
|
Path to the file to be checked.
|
|
dt : pd.Timestamp
|
|
The date against which to compare last_modified_time(path).
|
|
|
|
Returns
|
|
-------
|
|
was_modified : bool
|
|
Will be ``False`` if path doesn't exists, or if its last modified date
|
|
is earlier than or equal to `dt`
|
|
"""
|
|
return exists(path) and last_modified_time(path) > dt
|
|
|
|
|
|
def zipline_root(environ=None):
|
|
"""
|
|
Get the root directory for all zipline-managed files.
|
|
|
|
For testing purposes, this accepts a dictionary to interpret as the os
|
|
environment.
|
|
|
|
Parameters
|
|
----------
|
|
environ : dict, optional
|
|
A dict to interpret as the os environment.
|
|
|
|
Returns
|
|
-------
|
|
root : string
|
|
Path to the zipline root dir.
|
|
"""
|
|
if environ is None:
|
|
environ = os.environ
|
|
|
|
root = environ.get('ZIPLINE_ROOT', None)
|
|
if root is None:
|
|
root = expanduser('~/.zipline')
|
|
|
|
return root
|
|
|
|
|
|
def zipline_path(paths, environ=None):
|
|
"""
|
|
Get a path relative to the zipline root.
|
|
|
|
Parameters
|
|
----------
|
|
paths : list[str]
|
|
List of requested path pieces.
|
|
environ : dict, optional
|
|
An environment dict to forward to zipline_root.
|
|
|
|
Returns
|
|
-------
|
|
newpath : str
|
|
The requested path joined with the zipline root.
|
|
"""
|
|
return join(zipline_root(environ=environ), *paths)
|
|
|
|
|
|
def default_extension(environ=None):
|
|
"""
|
|
Get the path to the default zipline extension file.
|
|
|
|
Parameters
|
|
----------
|
|
environ : dict, optional
|
|
An environment dict to forwart to zipline_root.
|
|
|
|
Returns
|
|
-------
|
|
default_extension_path : str
|
|
The file path to the default zipline extension file.
|
|
"""
|
|
return zipline_path(['extension.py'], environ=environ)
|
|
|
|
|
|
def data_root(environ=None):
|
|
"""
|
|
The root directory for zipline data files.
|
|
|
|
Parameters
|
|
----------
|
|
environ : dict, optional
|
|
An environment dict to forward to zipline_root.
|
|
|
|
Returns
|
|
-------
|
|
data_root : str
|
|
The zipline data root.
|
|
"""
|
|
return zipline_path(['data'], environ=environ)
|
|
|
|
|
|
def ensure_data_root(environ=None):
|
|
"""
|
|
Ensure that the data root exists.
|
|
"""
|
|
ensure_directory(data_root(environ=environ))
|
|
|
|
|
|
def data_path(paths, environ=None):
|
|
"""
|
|
Get a path relative to the zipline data directory.
|
|
|
|
Parameters
|
|
----------
|
|
paths : iterable[str]
|
|
List of requested path pieces.
|
|
environ : dict, optional
|
|
An environment dict to forward to zipline_root.
|
|
|
|
Returns
|
|
-------
|
|
newpath : str
|
|
The requested path joined with the zipline data root.
|
|
"""
|
|
return zipline_path(['data'] + list(paths), environ=environ)
|
|
|
|
|
|
def cache_root(environ=None):
|
|
"""
|
|
The root directory for zipline cache files.
|
|
|
|
Parameters
|
|
----------
|
|
environ : dict, optional
|
|
An environment dict to forward to zipline_root.
|
|
|
|
Returns
|
|
-------
|
|
cache_root : str
|
|
The zipline cache root.
|
|
"""
|
|
return zipline_path(['cache'], environ=environ)
|
|
|
|
|
|
def ensure_cache_root(environ=None):
|
|
"""
|
|
Ensure that the data root exists.
|
|
"""
|
|
ensure_directory(cache_root(environ=environ))
|
|
|
|
|
|
def cache_path(paths, environ=None):
|
|
"""
|
|
Get a path relative to the zipline cache directory.
|
|
|
|
Parameters
|
|
----------
|
|
paths : iterable[str]
|
|
List of requested path pieces.
|
|
environ : dict, optional
|
|
An environment dict to forward to zipline_root.
|
|
|
|
Returns
|
|
-------
|
|
newpath : str
|
|
The requested path joined with the zipline cache root.
|
|
"""
|
|
return zipline_path(['cache'] + list(paths), environ=environ)
|