Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-skyfield for openSUSE:Factory checked in at 2022-08-11 18:32:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-skyfield (Old) and /work/SRC/openSUSE:Factory/.python-skyfield.new.1521 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-skyfield" Thu Aug 11 18:32:55 2022 rev:16 rq:994500 version:1.43.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-skyfield/python-skyfield.changes 2022-04-20 16:57:54.174655156 +0200 +++ /work/SRC/openSUSE:Factory/.python-skyfield.new.1521/python-skyfield.changes 2022-08-11 18:33:13.374206585 +0200 @@ -1,0 +2,60 @@ +Thu Aug 11 09:14:22 UTC 2022 - Ben Greiner <c...@bnavigator.de> + +- Update to v1.43.1 + * An attempt at overly clever scripting resulted in a Skyfield + 1.43 release without a setup.py in its .tar.gz; within an hour, + a Python 2.7 user had reported that Skyfield could no longer + install. This release is identical to 1.43 but (hopefully) + installs correctly for everyone! +- Changelog v1.43 + * Fixed planetary_magnitude() so it works for Saturn even when + the time is an array rather than a single time; also, improved + its calculation slightly with respect to Uranus. #739 + * Improved load_comets_dataframe() so that parsing CometEls.txt + with the most recent version of Pandas doesn???t stumble over the + commas in the final field of (for example) Halley???s Comet and + give the error ParserError: Error tokenizing data. C error: + Expected 12 fields???saw 13. #707 +- Changelog v1.42 + * Added two new position methods phase_angle() and + fraction_illuminated() that, given an illuminator (usually the + Sun) as their argument, compute whether the observer is looking + at the bright side or the dark side of the target body. They + replace a pair of old functions in the almanac module. + * The almanac routine moon_nodes() would sometimes skip nodes + that were closer together than 14.0 days. It has been tightened + down and should now detect all lunar nodes. #662 + * Time objects now feature a to_astropy() method. + * The position method to_skycoord() now sets the frame attribute + of the sky coordinate it returns, and for now only supports + barycentric and geocentric positions. #577 +- Changelog v1.41 + * Times now support arithmetic: you can add or subtract from a + time either a number representing days of Terrestrial Time (TT) + or a Python timedelta which Skyfield interprets as TT days and + seconds. #568 + * Fixed the .itrs_xyz vector of the geographic position returned + by the subpoint_of() method. #673 + * Skyfield now uses HTTPS instead of FTP to download JPL + ephemeris files like de421.bsp. This does risk raising an error + for users whose machines have out-of-date root certificates. + But it protects the connection from outside tampering, and will + keep working if the ssd.jpl.nasa.gov FTP service is ever shut + down ??? as happened earlier this year to FTP on NASA???s + cddis.nasa.gov server. #666 +- Changelog v1.40 + * Extended the planetary_magnitude() routine to work with all the + major planets, which upgrades it from a prototype feature to a + production feature of Skyfield. + * The subpoint() method has been deprecated, because users + reported that its name was a poor match for its behavior. Four + new methods have replaced it: latlon_of(), height_of(), + geographic_position_of(), and subpoint_of(). #644 + * Added a timescale method linspace(). #617 + * The oppositions_conjunctions() routine, which was originally + designed only for planets, can now also handle the Moon (which + moves from opposition to conjunction much faster). +- Update assay to 264.bb62d1f: better pickling handling +- Update finals200A.all data + +------------------------------------------------------------------- Old: ---- assay-master-259.d61a16e.tar.gz skyfield-1.39.tar.gz New: ---- assay-master-264.bb62d1f.tar.gz skyfield-1.43.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-skyfield.spec ++++++ --- /var/tmp/diff_new_pack.9Jnn8Q/_old 2022-08-11 18:33:14.510204842 +0200 +++ /var/tmp/diff_new_pack.9Jnn8Q/_new 2022-08-11 18:33:14.518204830 +0200 @@ -17,13 +17,11 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} -%define assaycommit d61a16e060c50f9c1a97df84ad9960825031915e -%define assayver 259.d61a16e +%define assaycommit bb62d1f7d51d798b05a88045fff3a2ff92c299c3 +%define assayver 264.bb62d1f %define skip_python2 1 -# current astropy in TW requires python >= 3.7 -%define skip_python36 1 Name: python-skyfield -Version: 1.39 +Version: 1.43.1 Release: 0 Summary: Elegant astronomy for Python License: MIT @@ -33,13 +31,13 @@ Source1: https://naif.jpl.nasa.gov/pub/naif/generic_kernels/fk/satellites/moon_080317.tf Source2: https://naif.jpl.nasa.gov/pub/naif/generic_kernels/pck/moon_pa_de421_1900-2050.bpc Source3: https://naif.jpl.nasa.gov/pub/naif/generic_kernels/pck/a_old_versions/pck00008.tpc -Source4: ftp://ssd.jpl.nasa.gov/pub/eph/planets/bsp/de405.bsp -Source5: ftp://ssd.jpl.nasa.gov/pub/eph/planets/bsp/de421.bsp +Source4: https://ssd.jpl.nasa.gov/ftp/eph/planets/bsp/de405.bsp +Source5: https://ssd.jpl.nasa.gov/ftp/eph/planets/bsp/de421.bsp # use generate-hipparcos.sh to download and truncate the test data Source6: hip_main.dat.gz Source7: https://datacenter.iers.org/data/9/finals2000A.all # Original with invalid https certificate or http url: http://astro.ukho.gov.uk/nao/lvm/Table-S15.2020.txt -Source8: https://raw.githubusercontent.com/skyfielders/python-skyfield/master/Table-S15.2020.txt +Source8: https://github.com/skyfielders/python-skyfield/raw/%{version}/Table-S15.2020.txt Source97: generate-hipparcos.sh # upstreams custom test runner assay: gh#skyfielders/python-skyfield#405 Source98: https://github.com/brandon-rhodes/assay/archive/%{assaycommit}.tar.gz#/assay-master-%{assayver}.tar.gz @@ -84,20 +82,17 @@ sed -i 's/assert abs(distance.au - 1) < 1e-16/assert abs(distance.au - 1) < 1e-15/' skyfield/tests/test_positions.py %build +export SKYFIELD_USE_SETUPTOOLS=1 %python_build %install +export SKYFIELD_USE_SETUPTOOLS=1 %python_install %python_expand %fdupes %{buildroot}%{$python_sitelib} %check export PYTHONPATH="../assay-%{assaycommit}" -%{python_expand # run assay up to 3 times in case of flaky pickling errors -failed=0 -for i in {1..3}; do - $python -m assay --batch skyfield.tests && break || [ $((++failed)) -lt 3 ] -done -} +%python_exec -m assay --batch skyfield.tests %files %{python_files} %doc README.rst ++++++ assay-master-259.d61a16e.tar.gz -> assay-master-264.bb62d1f.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/.gitignore new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/.gitignore --- old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/.gitignore 2021-04-13 15:57:54.000000000 +0200 +++ new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/.gitignore 2022-01-19 11:26:53.000000000 +0100 @@ -1,2 +1,4 @@ -*.egg-info -htmlcov +/*.egg-info +/MANIFEST +/dist/ +/htmlcov/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/assertion.py new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/assertion.py --- old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/assertion.py 2021-04-13 15:57:54.000000000 +0200 +++ new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/assertion.py 2022-01-19 11:26:53.000000000 +0100 @@ -97,7 +97,7 @@ op.pop_top, # stack: ... ]) -else: +elif _python_version < (3,9): assert_pattern_text = assemble_pattern([ op.compare_op, b'(.)', @@ -105,14 +105,31 @@ op.pop_jump_if_true, b'.', op.load_global, b'(.)', op.raise_varargs, 1, - ]) + ]) replacement = assemble_replacement([ op.load_const, b'%%', # stack: ... op1 op2 function op.rot_three, 0, # stack: ... function op1 op2 op.call_function, 2, # stack: ... return_value op.pop_top, 0, # stack: ... - ]) + ]) + +else: + + assert_pattern_text = assemble_pattern([ + op.compare_op, b'(.)', + b'(?:', op.extended_arg, b'.)?', + op.pop_jump_if_true, b'.', + op.load_assertion_error, b'.', + op.raise_varargs, 1, + ]) + + replacement = assemble_replacement([ + op.load_const, b'%%', # stack: ... op1 op2 function + op.rot_three, 0, # stack: ... function op1 op2 + op.call_function, 2, # stack: ... return_value + op.pop_top, 0, # stack: ... + ]) # Note that "re.S" is crucial when compiling this pattern, as a byte we # are trying to match with "." might happen to have the numeric value of @@ -122,7 +139,8 @@ def rewrite_asserts_in(function): def replace(match): - match.group(2) # TODO: make sure this is the right symbol + # TODO: if there's a second group in the match, should we verify + # that it really loads `AssertionError`? compare_op = match.group(1) if _python_version <= (3,5): msb, lsb = divmod(offset + ord(compare_op), 256) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/fixes.py new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/fixes.py --- old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/fixes.py 1970-01-01 01:00:00.000000000 +0100 +++ new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/fixes.py 2022-01-19 11:26:53.000000000 +0100 @@ -0,0 +1,41 @@ +"""Workarounds for Python 3.""" + +import sys +_python3 = sys.version_info >= (3,) + +# We are extremely fortunate that Mercurial ran into this issue before +# assay did, as they figured out both how to reproduce the problem and +# how to fix it! + +# https://phab.mercurial-scm.org/rHG12491abf93bd87b057cb6826e36606afa1cee88a +# https://phab.mercurial-scm.org/rHGc2bf211c74bf97be0a24e2446b75867cb4f588ee + +# We are less fortunate that Mercurial's license isn't compatible with +# ours, as we must re-implement this rather than use their code. But +# requiring us to re-implement is, after all, their right under the +# current copyright regime. + +if _python3: + class _accumulating_reader: + def __init__(self, pipe): + self._read = pipe.read + self.readline = pipe.readline + self.close = pipe.close + + def read(self, size=-1): + read = self._read + if size < 0: + return read(-1) + pieces = [] + while size: + data = read(size) + n = len(data) + if not n: + break + size -= n + pieces.append(data) + return b''.join(pieces) + +else: + def _accumulating_reader(pipe): + return pipe diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/samples.py new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/samples.py --- old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/samples.py 2021-04-13 15:57:54.000000000 +0200 +++ new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/samples.py 2022-01-19 11:26:53.000000000 +0100 @@ -4,6 +4,9 @@ flags = set() +def mul(a, b): + return a * b + def test_passing(): pass diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/tests.py new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/tests.py --- old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/tests.py 2021-04-13 15:57:54.000000000 +0200 +++ new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/tests.py 2022-01-19 11:26:53.000000000 +0100 @@ -15,7 +15,10 @@ from .discovery import interpret_argument from .importation import improve_order, list_module_paths from .runner import run_tests_of, run_test +from .samples import mul +from .worker import Worker +_python3 = sys.version_info >= (3,) _python33 = sys.version_info >= (3, 3) _python38 = sys.version_info >= (3, 8) @@ -487,6 +490,45 @@ self.assertEqual(improve_order(events), ['A', 'X', 'B', 'C', 'Y', 'Z', 'D', 'E']) +PRETEND_PIPE_LIMIT = 256 + +class BlockReader(object): + """Challenge: can we survive a pipe that splits long data into blocks?""" + def __init__(self, file): + self.file = file + self.close = file.close + + def read(self, n=-1): + n = min(n, PRETEND_PIPE_LIMIT) + return self.file.read(n) + + def readline(self, n=-1): + raise NotImplementedError() + +class WorkerTests(unittest.TestCase): + def test_worker_can_call_simple_function(self): + w = Worker() + try: + answer = w.call(mul, 3, 4) + self.assertEqual(answer, 12) + finally: + w.close() + + def test_worker_survive_narrow_pipe(self): + # This simulates a difficult-to-reproduce problem: until we + # enhanced the Worker, on Python 3 on GitHub Actions the main + # process would sometimes raise "_pickle.UnpicklingError: pickle + # data was truncated". + if not _python3: + return + n = 5 * PRETEND_PIPE_LIMIT + w = Worker() + w.from_worker = BlockReader(w.from_worker) + try: + answer = w.call(mul, 'a', n) + finally: + w.close() + self.assertEqual(answer, 'a' * n) if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/unix.py new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/unix.py --- old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/unix.py 2021-04-13 15:57:54.000000000 +0200 +++ new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/unix.py 2022-01-19 11:26:53.000000000 +0100 @@ -63,7 +63,9 @@ except OSError: pass fcntl.fcntl(fd, fcntl.F_SETFL, 0) - return os.fdopen(os.dup(fd), fileobj.mode, bufsize) + new_fd = os.dup(fd) + fileobj.close() + return os.fdopen(new_fd, fileobj.mode, bufsize) def kill_dash_9(pid): """Kill a process with a signal that cannot be caught or ignored.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/worker.py new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/worker.py --- old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/assay/worker.py 2021-04-13 15:57:54.000000000 +0200 +++ new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/assay/worker.py 2022-01-19 11:26:53.000000000 +0100 @@ -3,6 +3,7 @@ import os import sys from . import unix +from .fixes import _accumulating_reader from types import GeneratorType _python3 = sys.version_info >= (3,) @@ -74,7 +75,7 @@ """Run a function in the worker process and return its result.""" pickle.dump((function, args, kw), self.to_worker) self.to_worker.flush() - return pickle.load(self.from_worker) + return pickle.load(_accumulating_reader(self.from_worker)) def start(self, generator, *args, **kw): """Start a generator in the worker process.""" @@ -83,7 +84,7 @@ def next(self): """Return the next item from the generator given to `start()`.""" - return pickle.load(self.from_worker) + return pickle.load(_accumulating_reader(self.from_worker)) def fileno(self): """Return the incoming file descriptor, for `epoll()` objects.""" @@ -108,6 +109,15 @@ def worker_process(from_parent, to_parent, sync_to_parent): """Run functions piped to us from the parent process. + This is the entire control loop of an assay worker process, which is + launched when this module is run with "-m" by the "Worker" class. + It listens to a pipe over which it is given a series of functions to + invoke, and sends back their return values. Sometimes the function + is `fork()`, in which case a worker child process is launched; in + that case, the child takes control of the conversation, with the + parent waiting idle and only resuming control of the conversation + once the child is finished. + Both `to_parent` and `from_parent` should be integer file descriptors of the pipes connecting us to the parent process. @@ -116,7 +126,7 @@ from_parent = os.fdopen(from_parent, 'rb') while True: - function, args, kw = pickle.load(from_parent) + function, args, kw = pickle.load(_accumulating_reader(from_parent)) result = function(*args, **kw) if function is os.fork: if result: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/setup.py new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/setup.py --- old/assay-d61a16e060c50f9c1a97df84ad9960825031915e/setup.py 2021-04-13 15:57:54.000000000 +0200 +++ new/assay-bb62d1f7d51d798b05a88045fff3a2ff92c299c3/setup.py 2022-01-19 11:26:53.000000000 +0100 @@ -17,7 +17,12 @@ 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', - ], + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + ], packages=['assay'], entry_points = { 'console_scripts': ['assay=assay.command:main'], ++++++ finals2000A.all ++++++ ++++ 2089 lines (skipped) ++++ between /work/SRC/openSUSE:Factory/python-skyfield/finals2000A.all ++++ and /work/SRC/openSUSE:Factory/.python-skyfield.new.1521/finals2000A.all ++++++ skyfield-1.39.tar.gz -> skyfield-1.43.1.tar.gz ++++++ ++++ 5134 lines of diff (skipped)