From ca93529b1e8921acc673d09b1ce13d3ab01894d9 Mon Sep 17 00:00:00 2001 From: Josh Marlow Date: Fri, 17 Apr 2015 10:41:14 -0400 Subject: [PATCH 1/3] Added six to the test requires --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 0a839e3..7077825 100755 --- a/setup.py +++ b/setup.py @@ -54,6 +54,7 @@ def get_version(): 'mock>=1.0.1', 'ipdb>=0.8', 'ipdbplugin>=1.4', + 'six>=1.8.0', ], test_suite='run_tests.run_tests', include_package_data=True, From 1328b7eab6c7e8aa9220c9c1f6cd225fc9053801 Mon Sep 17 00:00:00 2001 From: Josh Marlow Date: Fri, 17 Apr 2015 10:41:49 -0400 Subject: [PATCH 2/3] Added a helper method, maybe_open_issue, to the IssueManager class --- issue/models.py | 20 +++++++++++++------- issue/tests/model_tests.py | 22 ++++++++++++++++++++++ 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/issue/models.py b/issue/models.py index bf68a88..8409fe9 100644 --- a/issue/models.py +++ b/issue/models.py @@ -78,6 +78,18 @@ def resolve_issue(self, **kwargs): """ self.filter(**kwargs).update(status=IssueStatus.Resolved.value) + def maybe_open_issue(self, name, **kwargs): + """ + Open the specified Issue unless: + 1) It is already open + 2) It already exists and is marked as Wont_fix + """ + if not self.issue_exists(name=name, **kwargs): + return self.create(name=name, **kwargs) + elif not self.is_wont_fix(name=name, **kwargs): + return self.reopen_issue(name=name, **kwargs) + return None + @six.python_2_unicode_compatible class BaseIssue(models.Model): @@ -340,13 +352,7 @@ def _open_or_update_issue(self, details, **kwargs): """ Open (or re-open) an issue with the name unless one exists with a status of Wont_fix. """ - obj_man = self.issue_class.objects - - if not obj_man.issue_exists(name=self.name, **kwargs): - return obj_man.create(name=self.name, **kwargs) - - elif not obj_man.is_wont_fix(name=self.name, **kwargs): - return obj_man.reopen_issue(name=self.name, **kwargs) + return self.issue_class.objects.maybe_open_issue(self.name, **kwargs) def _resolve_open_issue(self, **kwargs): """ diff --git a/issue/tests/model_tests.py b/issue/tests/model_tests.py index 9b0cef8..90a86a5 100644 --- a/issue/tests/model_tests.py +++ b/issue/tests/model_tests.py @@ -60,6 +60,28 @@ def test_is_wont_fix(self): self.assertTrue(Issue.objects.is_wont_fix(name=mi.name)) + def test_maybe_open_issue_when_none_exists(self): + issue = Issue.objects.maybe_open_issue(name='falafel') + self.assertEqual(IssueStatus.Open.value, Issue.objects.get(name=issue.name).status) + + def test_maybe_open_issue_when_it_is_marked_as_wont_fix(self): + issue = G(Issue, status=IssueStatus.Wont_fix.value) + self.assertIsNone(Issue.objects.maybe_open_issue(name=issue.name)) + self.assertEqual(IssueStatus.Wont_fix.value, Issue.objects.get(pk=issue.pk).status) + self.assertEqual(1, Issue.objects.filter(name=issue.name).count()) + + def maybe_open_issue_when_it_is_marked_as_resolved(self): + issue = G(Issue, status=IssueStatus.Resolved.value) + Issue.objects.maybe_open_issue(name=issue.name) + self.assertEqual(IssueStatus.Open.value, Issue.objects.get(pk=issue.pk).status) + self.assertEqual(1, Issue.objects.get(name=issue.name)) + + def test_resolve_open_issue(self): + a = G(Assertion) + issue = G(Issue, name=a.name, status=IssueStatus.Open.value) + a._resolve_open_issue() + self.assertEqual(IssueStatus.Resolved.value, Issue.objects.get(pk=issue.pk).status) + class ModelIssueManagerTests(TestCase): def test_replace_record_with_content_type(self): From 0fc0a5f552fcd4dc2944dd23a26fbac5a8ef2df7 Mon Sep 17 00:00:00 2001 From: Josh Marlow Date: Fri, 17 Apr 2015 10:42:59 -0400 Subject: [PATCH 3/3] Updated version and release notes --- docs/release_notes.rst | 5 +++++ issue/version.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/release_notes.rst b/docs/release_notes.rst index 28b466d..f15abac 100644 --- a/docs/release_notes.rst +++ b/docs/release_notes.rst @@ -1,6 +1,11 @@ Release Notes ============= +v1.0.0 +------ +* Added a helper method, maybe_open_issue, to the IssueManager class +* This implements logic that's begun to repeat in my Issue use cases + v1.0.0 ------ * Added Django 1.7 compatability diff --git a/issue/version.py b/issue/version.py index 1f356cc..cd7ca49 100644 --- a/issue/version.py +++ b/issue/version.py @@ -1 +1 @@ -__version__ = '1.0.0' +__version__ = '1.0.1'