-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Replace use of sweet_pickle in naming, and delete sweet_pickle subpac…
…kage (#199) * delete sweet_pickle subpackage and references to it. Update its use in apptools.naming to use apptools.persistence or pickle from the standard library instead * adding news fragment * remove @classmethod on load_build * finish merge * add roundtrip test for object serializer * rewrite test_two_stage_unpickler to use persistence instead of sweet pickle and remove test_global registry * flake8 * convert test_class_mapping to use persistence * flake8 * update test_state_function to use persistence * delete apptools.sweet_pickle * flake8 * remove/update any references to sweet_pickle in the comments * apply suggestions from code review
- Loading branch information
1 parent
632a4bf
commit 4d71eb5
Showing
21 changed files
with
196 additions
and
1,879 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# (C) Copyright 2005-2020 Enthought, Inc., Austin, TX | ||
# All rights reserved. | ||
# | ||
# This software is provided without warranty under the terms of the BSD | ||
# license included in LICENSE.txt and may be redistributed only under | ||
# the conditions described in the aforementioned license. The license | ||
# is also available online at http://www.enthought.com/licenses/BSD.txt | ||
# | ||
# Thanks for using Enthought open source! | ||
import os | ||
import shutil | ||
import tempfile | ||
import unittest | ||
|
||
from traits.api import cached_property, HasTraits, Property, Str, Event | ||
|
||
from apptools.naming.api import ObjectSerializer | ||
|
||
|
||
class FooWithTraits(HasTraits): | ||
"""Dummy HasTraits class for testing ObjectSerizalizer.""" | ||
|
||
full_name = Str() | ||
|
||
last_name = Property(depends_on="full_name") | ||
|
||
event = Event() | ||
|
||
@cached_property | ||
def _get_last_name(self): | ||
return self.full_name.split(" ")[-1] | ||
|
||
class TestObjectSerializer(unittest.TestCase): | ||
|
||
def setUp(self): | ||
self.tmpdir = tempfile.mkdtemp() | ||
self.addCleanup(shutil.rmtree, self.tmpdir) | ||
self.tmp_file = os.path.join(self.tmpdir, "tmp.pickle") | ||
|
||
def test_save_load_roundtrip(self): | ||
# Test HasTraits objects can be serialized and deserialized as expected | ||
obj = FooWithTraits(full_name="John Doe") | ||
|
||
serializer = ObjectSerializer() | ||
serializer.save(self.tmp_file, obj) | ||
|
||
self.assertTrue(serializer.can_load(self.tmp_file)) | ||
deserialized = serializer.load(self.tmp_file) | ||
|
||
self.assertIsInstance(deserialized, FooWithTraits) | ||
self.assertEqual(deserialized.full_name, "John Doe") | ||
self.assertEqual(deserialized.last_name, "Doe") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
# ----------------------------------------------------------------------------- | ||
# | ||
# Copyright (c) 2006 by Enthought, Inc. | ||
# All rights reserved. | ||
# | ||
# Author: Dave Peterson <dpeterson@enthought.com> | ||
# | ||
# ----------------------------------------------------------------------------- | ||
|
||
""" Tests the class mapping functionality of the enthought.pickle | ||
framework. | ||
""" | ||
|
||
# Standard library imports. | ||
import io | ||
import pickle | ||
import unittest | ||
|
||
# Enthought library imports | ||
from apptools.persistence.versioned_unpickler import VersionedUnpickler | ||
from apptools.persistence.updater import Updater | ||
|
||
|
||
############################################################################## | ||
# Classes to use within the tests | ||
############################################################################## | ||
|
||
|
||
class Foo: | ||
pass | ||
|
||
|
||
class Bar: | ||
pass | ||
|
||
|
||
class Baz: | ||
pass | ||
|
||
|
||
############################################################################## | ||
# class 'ClassMappingTestCase' | ||
############################################################################## | ||
|
||
|
||
class ClassMappingTestCase(unittest.TestCase): | ||
"""Originally tests for the class mapping functionality of the now deleted | ||
apptools.sweet_pickle framework, converted to use apptools.persistence. | ||
""" | ||
|
||
########################################################################## | ||
# 'TestCase' interface | ||
########################################################################## | ||
|
||
### public interface ##################################################### | ||
|
||
def test_unpickled_class_mapping(self): | ||
|
||
class TestUpdater(Updater): | ||
def __init__(self): | ||
self.refactorings = { | ||
(Foo.__module__, Foo.__name__): | ||
(Bar.__module__, Bar.__name__), | ||
(Bar.__module__, Bar.__name__): | ||
(Baz.__module__, Baz.__name__), | ||
} | ||
self.setstates = {} | ||
|
||
# Validate that unpickling the first class gives us an instance of | ||
# the second class. | ||
start = Foo() | ||
test_file = io.BytesIO(pickle.dumps(start, 2)) | ||
end = VersionedUnpickler(test_file, updater=TestUpdater()).load() | ||
self.assertIsInstance(end, Bar) | ||
|
||
# Validate that unpickling the second class gives us an instance of | ||
# the third class. | ||
start = Bar() | ||
test_file = io.BytesIO(pickle.dumps(start, 2)) | ||
end = VersionedUnpickler(test_file, updater=TestUpdater()).load() | ||
self.assertIsInstance(end, Baz) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.