Accepting request 708982 from devel:languages:python
OBS-URL: https://build.opensuse.org/request/show/708982 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-ana?expand=0&rev=4
This commit is contained in:
24
LICENSE
24
LICENSE
@@ -1,24 +0,0 @@
|
||||
Copyright (c) 2015, The Regents of the University of California
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:463e69cb3079fabf1e952893e89d211736512ffe13ca7b320f743050cf2a1ac5
|
||||
size 3132
|
3
ana-0.06.tar.gz
Normal file
3
ana-0.06.tar.gz
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5fa16e511773a0efc6ac9294f93eee583612ffb580859737eed07e703947d6f8
|
||||
size 5876
|
@@ -1,3 +1,27 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Jun 10 14:19:34 UTC 2019 - Andreas Färber <afaerber@suse.de>
|
||||
|
||||
- Update to v0.06
|
||||
* LICENSE and README.md files are now included in the tarball
|
||||
* Repo URL is deprecated but no new one known (gh#zardus/ana#13)
|
||||
- Don't overwrite tarball files with local copies
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jun 6 12:58:58 UTC 2019 - pgajdos@suse.com
|
||||
|
||||
- revert to previous behaviour: in case LICENSE, test.py or
|
||||
test_pickle.p are shipped in future upstream version, do not
|
||||
abort build (but also do not overwrite them)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jun 6 07:33:30 UTC 2019 - pgajdos@suse.com
|
||||
|
||||
- run tests
|
||||
- added sources
|
||||
https://github.com/zardus/ana/issues/13
|
||||
+ test.py
|
||||
+ test_pickle.p
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Dec 4 12:45:32 UTC 2018 - Matej Cepl <mcepl@suse.com>
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package python-ana
|
||||
#
|
||||
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@@ -18,15 +18,18 @@
|
||||
|
||||
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
|
||||
Name: python-ana
|
||||
Version: 0.05
|
||||
Version: 0.06
|
||||
Release: 0
|
||||
Summary: The Python "ana" module
|
||||
License: BSD-2-Clause
|
||||
Group: Development/Languages/Python
|
||||
Url: https://github.com/zardus/ana
|
||||
Source: https://files.pythonhosted.org/packages/source/a/ana/ana-%{version}.tar.gz
|
||||
Source1: https://github.com/zardus/ana/raw/master/LICENSE
|
||||
# https://github.com/zardus/ana/issues/13
|
||||
Source2: https://raw.githubusercontent.com/zardus/ana/master/test.py
|
||||
Source3: https://raw.githubusercontent.com/zardus/ana/master/test_pickle.p
|
||||
BuildRequires: %{python_module future}
|
||||
BuildRequires: %{python_module nose}
|
||||
BuildRequires: %{python_module setuptools}
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: python-rpm-macros
|
||||
@@ -41,7 +44,8 @@ A Python module that provides an undocumented data layer for Python objects.
|
||||
|
||||
%prep
|
||||
%setup -q -n ana-%{version}
|
||||
[ -e LICENSE ] || cp %{SOURCE1} LICENSE
|
||||
[ -e test.py ] || cp %{SOURCE2} test.py
|
||||
[ -e test_pickle.p ] || cp %{SOURCE3} test_pickle.p
|
||||
|
||||
%build
|
||||
%python_build
|
||||
@@ -50,9 +54,13 @@ A Python module that provides an undocumented data layer for Python objects.
|
||||
%python_install
|
||||
%python_expand %fdupes %{buildroot}%{$python_sitelib}
|
||||
|
||||
%check
|
||||
%python_expand nosetests-%{$python_bin_suffix} -v
|
||||
|
||||
%files %{python_files}
|
||||
%defattr(-,root,root,-)
|
||||
%license LICENSE
|
||||
%doc README.md
|
||||
%{python_sitelib}/*
|
||||
|
||||
%changelog
|
||||
|
140
test.py
Normal file
140
test.py
Normal file
@@ -0,0 +1,140 @@
|
||||
import os
|
||||
import gc
|
||||
import ana
|
||||
import nose
|
||||
import pickle
|
||||
|
||||
import logging
|
||||
l = logging.getLogger("ana.test")
|
||||
|
||||
class A(ana.Storable):
|
||||
def __init__(self, n):
|
||||
nose.tools.assert_false(hasattr(self, 'n'))
|
||||
|
||||
self.n = n
|
||||
l.debug("%s.__init__", self)
|
||||
|
||||
def __repr__(self):
|
||||
return "<A %s>" % str(self.n)
|
||||
|
||||
def _ana_getstate(self):
|
||||
l.debug("%s._ana_getstate", self)
|
||||
return (self.n,)
|
||||
|
||||
def _ana_setstate(self, s):
|
||||
self.n = s[0]
|
||||
l.debug("%s._ana_setstate", self)
|
||||
|
||||
def _ana_getliteral(self):
|
||||
return { 'n': self.n }
|
||||
|
||||
def test_simple():
|
||||
ana.set_dl(ana.SimpleDataLayer())
|
||||
one = A(1)
|
||||
one.make_uuid()
|
||||
o = pickle.dumps(one)
|
||||
one_copy = pickle.loads(o)
|
||||
assert one is one_copy
|
||||
|
||||
two = A(1)
|
||||
t = pickle.dumps(one)
|
||||
two_copy = pickle.loads(t)
|
||||
assert two_copy is not two
|
||||
|
||||
assert pickle.load(open(os.path.join(os.path.dirname(__file__), 'test_pickle.p'), 'rb')).n == 1337
|
||||
|
||||
def write_a1337():
|
||||
a1337 = A(1337)
|
||||
a1337.make_uuid()
|
||||
pickle.dump(a1337, open(os.path.join(os.path.dirname(__file__), 'test_pickle.p'), 'w'))
|
||||
|
||||
def test_dict():
|
||||
ana.set_dl(ana.DictDataLayer())
|
||||
l.debug("Initializing 1")
|
||||
one = A(1)
|
||||
l.debug("Initializing 2")
|
||||
two = A(2)
|
||||
|
||||
one.make_uuid()
|
||||
|
||||
l.debug("Copying 1")
|
||||
one_p = pickle.dumps(one)
|
||||
one_copy = pickle.loads(one_p)
|
||||
l.debug("Copying 2")
|
||||
two_p = pickle.dumps(two)
|
||||
two_copy = pickle.loads(two_p)
|
||||
|
||||
nose.tools.assert_is(one_copy, one)
|
||||
nose.tools.assert_is_not(two_copy, two)
|
||||
nose.tools.assert_equal(str(two_copy), str(two))
|
||||
|
||||
nose.tools.assert_is(one, A.ana_load(one.ana_store()))
|
||||
nose.tools.assert_is(two, A.ana_load(two.ana_store()))
|
||||
|
||||
two_copy2 = pickle.loads(pickle.dumps(two))
|
||||
nose.tools.assert_equal(str(two_copy2), str(two))
|
||||
|
||||
l.debug("Initializing 3")
|
||||
three = A(3)
|
||||
three_str = str(three)
|
||||
l.debug("Storing 3")
|
||||
three_uuid = three.ana_store()
|
||||
l.debug("Deleting 3")
|
||||
del three
|
||||
gc.collect()
|
||||
nose.tools.assert_false(three_uuid in ana.get_dl().uuid_cache)
|
||||
l.debug("Loading 3")
|
||||
three_copy = A.ana_load(three_uuid)
|
||||
nose.tools.assert_equal(three_copy.ana_uuid, three_uuid) #pylint:disable=no-member
|
||||
nose.tools.assert_equal(str(three_copy), three_str)
|
||||
|
||||
known = set()
|
||||
first_json = three_copy.to_literal(known)
|
||||
nose.tools.assert_true(three_copy.ana_uuid in first_json['objects'])
|
||||
nose.tools.assert_equal(first_json['objects'][three_copy.ana_uuid]['object']['n'], three_copy.n)
|
||||
nose.tools.assert_equal(first_json['value']['ana_uuid'], three_copy.ana_uuid)
|
||||
|
||||
second_json = three_copy.to_literal(known)
|
||||
nose.tools.assert_false(three_copy.ana_uuid in second_json['objects'])
|
||||
nose.tools.assert_equal(second_json['value']['ana_uuid'], three_copy.ana_uuid)
|
||||
|
||||
def test_dir():
|
||||
ana.dl = ana.DirDataLayer(pickle_dir="/tmp/test_ana")
|
||||
one = A(1)
|
||||
nose.tools.assert_is(one, A.ana_load(one.ana_store()))
|
||||
nose.tools.assert_true(os.path.exists("/tmp/test_ana/%s.p" % one.ana_uuid))
|
||||
|
||||
uuid = one.ana_uuid
|
||||
old_id = id(one)
|
||||
del one
|
||||
gc.collect()
|
||||
ana.dl = ana.DirDataLayer(pickle_dir="/tmp/test_ana")
|
||||
two = A.ana_load(uuid)
|
||||
nose.tools.assert_equals(uuid, two.ana_uuid)
|
||||
nose.tools.assert_not_equals(old_id, id(two))
|
||||
|
||||
# reset the datalayer to make sure we handle it properly
|
||||
ana.set_dl(ana.DictDataLayer())
|
||||
try:
|
||||
two = A.ana_load(uuid)
|
||||
assert False
|
||||
except KeyError:
|
||||
pass
|
||||
two.ana_store()
|
||||
del two
|
||||
three = A.ana_load(uuid)
|
||||
assert uuid, three.ana_uuid
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
logging.getLogger("ana.test").setLevel(logging.DEBUG)
|
||||
logging.getLogger("ana.storable").setLevel(logging.DEBUG)
|
||||
logging.getLogger("ana.datalayer").setLevel(logging.DEBUG)
|
||||
logging.getLogger("ana.d").setLevel(logging.DEBUG)
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
globals()['test_%s' % sys.argv[1]]()
|
||||
else:
|
||||
test_simple()
|
||||
test_dict()
|
||||
test_dir()
|
13
test_pickle.p
Normal file
13
test_pickle.p
Normal file
@@ -0,0 +1,13 @@
|
||||
cana.d
|
||||
D
|
||||
p0
|
||||
(S'bcf9e574-7901-4292-8873-5423edb1ca1c'
|
||||
p1
|
||||
ctest
|
||||
A
|
||||
p2
|
||||
(I1337
|
||||
tp3
|
||||
tp4
|
||||
Rp5
|
||||
.
|
Reference in New Issue
Block a user