From 4b6f0c579a48967195369015d8faa2dda526ffe6 Mon Sep 17 00:00:00 2001 From: palewire Date: Thu, 26 May 2022 05:23:38 -0700 Subject: [PATCH] Precommit fixes --- .pre-commit-config.yaml | 42 +++++++++++++++ Pipfile | 1 + Pipfile.lock | 113 ++++++++++++++++++++++++++++++++++++++- README.md | 1 - docs/index.md | 1 + setup.cfg | 3 ++ setup.py | 54 +++++++++---------- yamlfield/__init__.py | 2 +- yamlfield/apps.py | 2 +- yamlfield/fields.py | 16 ++---- yamlfield/serializers.py | 9 ++-- yamlfield/tests.py | 63 ++++++++++------------ 12 files changed, 224 insertions(+), 83 deletions(-) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..2a7b244 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,42 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.1.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files + args: ['--maxkb=10000'] + - id: check-case-conflict + - id: check-json + - id: mixed-line-ending + +- repo: https://github.com/psf/black + rev: 22.3.0 + hooks: + - id: black + +- repo: https://github.com/asottile/blacken-docs + rev: v1.12.1 + hooks: + - id: blacken-docs + additional_dependencies: [black] + +- repo: https://github.com/timothycrosley/isort + rev: 5.10.1 + hooks: + - id: isort + args: ["--profile", "black", "--filter-files"] + +- repo: https://gitlab.com/pycqa/flake8 + rev: 3.9.2 + hooks: + - id: flake8 + +- repo: https://github.com/asottile/pyupgrade + rev: v2.31.0 + hooks: + - id: pyupgrade + args: [--py37-plus] diff --git a/Pipfile b/Pipfile index cd92201..a080d35 100644 --- a/Pipfile +++ b/Pipfile @@ -11,6 +11,7 @@ django = "==4.0.*" flake8 = "*" twine = "*" setuptools-scm = "*" +pre-commit = "*" [requires] python_version = "3.9" diff --git a/Pipfile.lock b/Pipfile.lock index f2bcc15..f7f592b 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "7e05d455af491ebb2f3dc1499905c5d3246b646a1c45e0be86c9b728b3591a31" + "sha256": "a684de3cf948509964b51bcd63a95456717cc7ee9d76626e7e6b9f6de29aff8c" }, "pipfile-spec": 6, "requires": { @@ -152,6 +152,14 @@ ], "version": "==1.15.0" }, + "cfgv": { + "hashes": [ + "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426", + "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736" + ], + "markers": "python_full_version >= '3.6.1'", + "version": "==3.3.1" + }, "charset-normalizer": { "hashes": [ "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", @@ -195,6 +203,13 @@ "markers": "python_version >= '3.6'", "version": "==37.0.2" }, + "distlib": { + "hashes": [ + "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b", + "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579" + ], + "version": "==0.3.4" + }, "docutils": { "hashes": [ "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c", @@ -203,6 +218,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==0.18.1" }, + "filelock": { + "hashes": [ + "sha256:b795f1b42a61bbf8ec7113c341dad679d772567b936fbd1bf43c9a238e673e20", + "sha256:c7b5fdb219b398a5b28c8e4c1893ef5f98ece6a38c6ab2c22e26ec161556fed6" + ], + "markers": "python_version >= '3.7'", + "version": "==3.7.0" + }, "flake8": { "hashes": [ "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d", @@ -211,6 +234,14 @@ "index": "pypi", "version": "==4.0.1" }, + "identify": { + "hashes": [ + "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa", + "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82" + ], + "markers": "python_version >= '3.7'", + "version": "==2.5.1" + }, "idna": { "hashes": [ "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", @@ -250,6 +281,13 @@ ], "version": "==0.6.1" }, + "nodeenv": { + "hashes": [ + "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b", + "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7" + ], + "version": "==1.6.0" + }, "packaging": { "hashes": [ "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", @@ -265,6 +303,22 @@ ], "version": "==1.8.2" }, + "platformdirs": { + "hashes": [ + "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", + "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19" + ], + "markers": "python_version >= '3.7'", + "version": "==2.5.2" + }, + "pre-commit": { + "hashes": [ + "sha256:10c62741aa5704faea2ad69cb550ca78082efe5697d6f04e5710c3c229afdd10", + "sha256:4233a1e38621c87d9dda9808c6606d7e7ba0e087cd56d3fe03202a01d2919615" + ], + "index": "pypi", + "version": "==2.19.0" + }, "pycodestyle": { "hashes": [ "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20", @@ -304,6 +358,45 @@ "markers": "python_full_version >= '3.6.8'", "version": "==3.0.9" }, + "pyyaml": { + "hashes": [ + "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", + "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", + "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", + "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", + "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", + "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", + "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", + "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", + "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", + "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", + "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", + "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", + "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", + "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", + "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", + "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", + "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", + "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", + "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", + "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", + "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", + "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", + "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", + "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", + "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", + "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", + "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", + "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", + "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", + "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", + "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", + "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", + "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" + ], + "index": "pypi", + "version": "==6.0" + }, "readme-renderer": { "hashes": [ "sha256:73b84905d091c31f36e50b4ae05ae2acead661f6a09a9abb4df7d2ddcdb6a698", @@ -372,9 +465,17 @@ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, + "toml": { + "hashes": [ + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.10.2" + }, "tomli": { "hashes": [ "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", @@ -399,6 +500,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_full_version < '4.0.0'", "version": "==1.26.9" }, + "virtualenv": { + "hashes": [ + "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a", + "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==20.14.1" + }, "webencodings": { "hashes": [ "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", diff --git a/README.md b/README.md index 670fbb8..3a9e7a5 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,3 @@ * Issues: [github.com/datadesk/django-yamlfield/issues](https://github.com/datadesk/django-yamlfield/issues) * Packaging: [pypi.python.org/pypi/django-yamlfield](https://pypi.python.org/pypi/django-yamlfield) * Testing: [github.com/datadesk/django-yamlfield/actions](https://github.com/datadesk/django-yamlfield/actions) - diff --git a/docs/index.md b/docs/index.md index 4ae944c..b62abde 100644 --- a/docs/index.md +++ b/docs/index.md @@ -16,6 +16,7 @@ Add it to one of your models. from django.db import models from yamlfield.fields import YAMLField + class YourModel(models.Model): yaml = YAMLField() ``` diff --git a/setup.cfg b/setup.cfg index 2a9acf1..1f17bf2 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,5 @@ [bdist_wheel] universal = 1 + +[flake8] +max-line-length=121 diff --git a/setup.py b/setup.py index 839a7c1..d23972b 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,8 @@ import os -from setuptools import setup, find_packages from distutils.core import Command +from setuptools import find_packages, setup + def read(fname): with open(os.path.join(os.path.dirname(__file__), fname)) as f: @@ -50,50 +51,49 @@ def finalize_options(self): def run(self): from django.conf import settings + settings.configure( DATABASES={ - 'default': { - 'NAME': ':memory:', - 'ENGINE': 'django.db.backends.sqlite3' - } + "default": {"NAME": ":memory:", "ENGINE": "django.db.backends.sqlite3"} }, MIDDLEWARE_CLASSES=(), - INSTALLED_APPS=('yamlfield',) + INSTALLED_APPS=("yamlfield",), ) - from django.core.management import call_command import django + from django.core.management import call_command + django.setup() - call_command('test', 'yamlfield') + call_command("test", "yamlfield") setup( - name='django-yamlfield', - author='Ben Welsh', - author_email='b@palewi.re', + name="django-yamlfield", + author="Ben Welsh", + author_email="b@palewi.re", url="http://django-yamlfield.readthedocs.io/", - description='A Django database field for storing YAML data', + description="A Django database field for storing YAML data", long_description=read("README.md"), long_description_content_type="text/markdown", packages=find_packages(), include_package_data=True, license="MIT", - install_requires=( - 'PyYAML>=3.10' - ), + install_requires=("PyYAML>=3.10"), classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Framework :: Django', - 'Framework :: Django :: 3.1', - 'Framework :: Django :: 4.0', - 'License :: OSI Approved :: MIT License', + "Development Status :: 5 - Production/Stable", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Framework :: Django", + "Framework :: Django :: 3.1", + "Framework :: Django :: 4.0", + "License :: OSI Approved :: MIT License", ], - cmdclass={'test': TestCommand,}, + cmdclass={ + "test": TestCommand, + }, setup_requires=["setuptools_scm"], use_scm_version={"version_scheme": version_scheme, "local_scheme": local_version}, ) diff --git a/yamlfield/__init__.py b/yamlfield/__init__.py index 82fe346..efab7ea 100644 --- a/yamlfield/__init__.py +++ b/yamlfield/__init__.py @@ -1 +1 @@ -default_app_config = 'yamlfield.apps.YAMLFieldAppConfig' +default_app_config = "yamlfield.apps.YAMLFieldAppConfig" diff --git a/yamlfield/apps.py b/yamlfield/apps.py index 7ef1916..6e9a29f 100644 --- a/yamlfield/apps.py +++ b/yamlfield/apps.py @@ -2,5 +2,5 @@ class YAMLFieldAppConfig(AppConfig): - name = 'yamlfield' + name = "yamlfield" verbose_name = "YAML field" diff --git a/yamlfield/fields.py b/yamlfield/fields.py index 2d28515..b8d5382 100644 --- a/yamlfield/fields.py +++ b/yamlfield/fields.py @@ -1,11 +1,11 @@ import yaml -from django.db import models from django.core.exceptions import ValidationError +from django.db import models + from .serializers import OrderedDumper, OrderedLoader class YAMLField(models.TextField): - def from_db_value(self, value, expression, connection, context=None): return self.to_python(value) @@ -30,11 +30,7 @@ def get_prep_value(self, value): if not value or value == "": return "" if isinstance(value, (dict, list)): - value = yaml.dump( - value, - Dumper=OrderedDumper, - default_flow_style=False - ) + value = yaml.dump(value, Dumper=OrderedDumper, default_flow_style=False) return value def value_from_object(self, obj): @@ -47,8 +43,4 @@ def value_from_object(self, obj): value = getattr(obj, self.attname) if not value or value == "": return value - return yaml.dump( - value, - Dumper=OrderedDumper, - default_flow_style=False - ) + return yaml.dump(value, Dumper=OrderedDumper, default_flow_style=False) diff --git a/yamlfield/serializers.py b/yamlfield/serializers.py index 46b6aec..4e2f0b5 100644 --- a/yamlfield/serializers.py +++ b/yamlfield/serializers.py @@ -1,8 +1,9 @@ """ Custom YAML serializers that maintain their order """ -import yaml from collections import OrderedDict + +import yaml from django.core.serializers.pyyaml import DjangoSafeDumper @@ -16,8 +17,7 @@ def construct_mapping(loader, node): OrderedLoader.add_constructor( - yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, - construct_mapping + yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, construct_mapping ) @@ -27,8 +27,7 @@ class OrderedDumper(DjangoSafeDumper): def _dict_representer(dumper, data): return dumper.represent_mapping( - yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, - data.items() + yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, data.items() ) diff --git a/yamlfield/tests.py b/yamlfield/tests.py index 12d365c..2aa5b92 100644 --- a/yamlfield/tests.py +++ b/yamlfield/tests.py @@ -1,11 +1,11 @@ -import json import collections +import json from django.core.exceptions import ValidationError -from django.db import models -from .fields import YAMLField +from django.db import connection, models from django.test import TestCase -from django.db import connection + +from .fields import YAMLField class YAMLModel(models.Model): @@ -16,40 +16,38 @@ class YAMLFieldTest(TestCase): """ YAMLField Wrapper Tests """ + def test_yaml_field_create(self): """ Test saving a YAML object in our YAMLField """ - yaml_obj = { - "item_1": "this is a yaml blah", - "blergh": "hey, hey, hey" - } + yaml_obj = {"item_1": "this is a yaml blah", "blergh": "hey, hey, hey"} obj = YAMLModel.objects.create(yaml=yaml_obj) new_obj = YAMLModel.objects.get(id=obj.id) - self.failUnlessEqual(new_obj.yaml, yaml_obj) + self.assertEqual(new_obj.yaml, yaml_obj) def test_yaml_field_modify(self): """ Test modifying a YAML object in our YAMLField """ - yaml_obj_1 = {'a': 1, 'b': 2} - yaml_obj_2 = {'a': 3, 'b': 4} + yaml_obj_1 = {"a": 1, "b": 2} + yaml_obj_2 = {"a": 3, "b": 4} obj = YAMLModel.objects.create(yaml=yaml_obj_1) - self.failUnlessEqual(obj.yaml, yaml_obj_1) + self.assertEqual(obj.yaml, yaml_obj_1) obj.yaml = yaml_obj_2 - self.failUnlessEqual(obj.yaml, yaml_obj_2) + self.assertEqual(obj.yaml, yaml_obj_2) obj.save() - self.failUnlessEqual(obj.yaml, yaml_obj_2) - self.assert_(obj) + self.assertEqual(obj.yaml, yaml_obj_2) + self.assertTrue(obj) def test_yaml_field_load(self): """ Test loading a YAML object from the DB """ - yaml_obj_1 = {'a': 1, 'b': 2} + yaml_obj_1 = {"a": 1, "b": 2} obj = YAMLModel.objects.create(yaml=yaml_obj_1) new_obj = YAMLModel.objects.get(id=obj.id) - self.failUnlessEqual(new_obj.yaml, yaml_obj_1) + self.assertEqual(new_obj.yaml, yaml_obj_1) def test_yaml_list(self): """ @@ -58,50 +56,47 @@ def test_yaml_list(self): yaml_obj = ["my", "list", "of", 1, "objs", {"hello": "there"}] obj = YAMLModel.objects.create(yaml=yaml_obj) new_obj = YAMLModel.objects.get(id=obj.id) - self.failUnlessEqual(new_obj.yaml, yaml_obj) + self.assertEqual(new_obj.yaml, yaml_obj) def test_blank_yaml_field(self): # When there's no yaml... obj = YAMLModel.objects.create() # It should come out to python as None new_obj = YAMLModel.objects.get(id=obj.id) - self.failUnlessEqual(new_obj.yaml, None) + self.assertEqual(new_obj.yaml, None) # But be stored as an empty string in the database cursor = connection.cursor() cursor.execute("SELECT * FROM yamlfield_yamlmodel;") row = cursor.fetchone() - self.failUnlessEqual(row[1], "") + self.assertEqual(row[1], "") def test_bad_yaml_to_python(self): with self.assertRaises(ValidationError) as exc: - YAMLField().to_python('2013-01-65') + YAMLField().to_python("2013-01-65") self.assertEqual("Enter valid YAML", exc.exception.message) def test_value_from_object(self): - yaml_obj = { - "item_1": "this is a yaml blah", - "blergh": "hey, hey, hey" - } + yaml_obj = {"item_1": "this is a yaml blah", "blergh": "hey, hey, hey"} obj = YAMLModel.objects.create(yaml=yaml_obj) - YAMLModel._meta.get_field('yaml').value_from_object(obj) + YAMLModel._meta.get_field("yaml").value_from_object(obj) - obj2 = YAMLModel.objects.create(yaml='') - YAMLModel._meta.get_field('yaml').value_from_object(obj2) + obj2 = YAMLModel.objects.create(yaml="") + YAMLModel._meta.get_field("yaml").value_from_object(obj2) def test_ordereddict(self): """ Test storing an OrderedDict """ ordered_data = collections.OrderedDict( - [('one', 1), ('two', 2), ('five', 5), ('seven', 7), ('ten', 10)] + [("one", 1), ("two", 2), ("five", 5), ("seven", 7), ("ten", 10)] ) obj = YAMLModel.objects.create(yaml=[ordered_data]) new_obj = YAMLModel.objects.get(id=obj.id) - self.failUnlessEqual(new_obj.yaml, [ordered_data]) - ordered_data.pop('seven') - ordered_data['seven'] = 7 + self.assertEqual(new_obj.yaml, [ordered_data]) + ordered_data.pop("seven") + ordered_data["seven"] = 7 self.assertEqual(dict(ordered_data), dict(new_obj.yaml[0])) - self.failIfEqual(new_obj.yaml, [ordered_data]) + self.assertNotEqual(new_obj.yaml, [ordered_data]) def test_nested_ordereddict(self): """ @@ -134,4 +129,4 @@ def test_nested_ordereddict(self): data = json.loads(data) obj = YAMLModel.objects.create(yaml=data) obj = YAMLModel.objects.get(id=obj.id) - self.failUnlessEqual(obj.yaml, data) + self.assertEqual(obj.yaml, data)