debian-skyfield/skyfield/tests/test_io.py

90 lines
2.7 KiB
Python
Raw Normal View History

"""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:
2016-03-19 21:57:35 +01:00
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)