90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
"""Test whether Skyfield handles file download and file age correctly."""
|
|
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
from contextlib import contextmanager
|
|
from datetime import date
|
|
try:
|
|
from unittest.mock import patch
|
|
except ImportError:
|
|
from mock import patch
|
|
|
|
from skyfield import api
|
|
|
|
old_content = (b' 2015 10 1 67.9546\n'
|
|
b' 2015 11 1 68.0055\n'
|
|
b' 2015 12 1 68.0514\n'
|
|
b' 2016 1 1 68.1024\n')
|
|
new_content = (old_content +
|
|
b' 2016 2 1 68.1577\n')
|
|
|
|
def load():
|
|
path = tempfile.mkdtemp()
|
|
try:
|
|
yield api.Loader(path)
|
|
finally:
|
|
shutil.rmtree(path)
|
|
|
|
def save_file(load, content=old_content):
|
|
with open(load.path_to('deltat.data'), 'wb') as f:
|
|
f.write(content)
|
|
|
|
def file_contents(load):
|
|
with open(load.path_to('deltat.data'), 'rb') as f:
|
|
return f.read()
|
|
|
|
@contextmanager
|
|
def on(load, year, month, day):
|
|
fake_date = date(year, month, day)
|
|
download = lambda *args, **kw: save_file(load, new_content)
|
|
with patch('skyfield.iokit.download', download):
|
|
# Python 2.6 does not support the comma "with" statement, so:
|
|
with patch('skyfield.iokit.today', lambda *args: fake_date):
|
|
yield
|
|
|
|
# The tests.
|
|
|
|
def test_build_url(load):
|
|
url = 'ftp://ssd.jpl.nasa.gov/pub/eph/planets/bsp/de421.bsp'
|
|
assert load.build_url('de421.bsp') == url
|
|
assert load.build_url('unknown.kind.of.file') is None
|
|
|
|
def test_open_in_main_directory(load):
|
|
with open(os.path.join(load.directory, 'file.tle'), 'wb') as f:
|
|
f.write(b'example text\n')
|
|
data = load.open('file.tle').read()
|
|
print(repr(data))
|
|
assert data == b'example text\n'
|
|
|
|
def test_open_in_subdirectory(load):
|
|
os.mkdir(os.path.join(load.directory, 'folder'))
|
|
with open(os.path.join(load.directory, 'folder', 'file.tle'), 'wb') as f:
|
|
f.write(b'example text\n')
|
|
data = load.open('folder/file.tle').read()
|
|
assert data == b'example text\n'
|
|
|
|
def test_missing_file_gets_downloaded(load):
|
|
with on(load, 2016, 1, 15):
|
|
data = load('deltat.data')
|
|
assert file_contents(load).endswith(b' 68.1577\n')
|
|
assert data[1][-1] == 68.1577
|
|
|
|
def test_11_month_old_file_gets_reused(load):
|
|
save_file(load)
|
|
with on(load, 2016, 12, 15):
|
|
data = load('deltat.data')
|
|
assert file_contents(load).endswith(b' 68.1024\n')
|
|
assert data[1][-1] == 68.1024
|
|
|
|
def test_12_month_old_file_gets_redownloaded(load):
|
|
save_file(load)
|
|
with on(load, 2017, 1, 15):
|
|
data = load('deltat.data')
|
|
assert file_contents(load).endswith(b' 68.1577\n')
|
|
assert data[1][-1] == 68.1577
|
|
|
|
def test_builtin_timescale(load):
|
|
ts = load.timescale(builtin=True)
|
|
ts.utc(2019, 7, 21, 11, 11)
|