def test_delete(self): magazine, created = Magazine.from_dict({"name": "Cool"}) self.assertTrue(created) self.assertIsNotNone(magazine.id) deleted = magazine.delete() self.assertIsNone(magazine.id) self.assertEquals((1, {"magazines.Magazine": 1}), deleted) magazine, created = Magazine.from_dict({ "name": "Example", "feed": { "url": "https://example.com/feed" }, "links": [{ "url": "https://example.com" }], }) self.assertTrue(created) self.assertIsNotNone(magazine.id) deleted = magazine.delete() self.assertIsNone(magazine.id) self.assertEquals( ( 4, { "magazines.Magazine": 1, "magazines.Magazine_links": 1, "links.Link": 2, }, ), deleted, ) magazine, created = Magazine.from_dict({"name": "Cool"}) self.assertTrue(created) self.assertIsNotNone(magazine.id) issue, created = Issue.from_dict({"issue": "1"}, magazine) self.assertTrue(created) self.assertIsNotNone(issue.id) issue, created = Issue.from_dict({"issue": "2"}, magazine) self.assertTrue(created) self.assertIsNotNone(issue.id) deleted = magazine.delete() self.assertIsNone(magazine.id) self.assertEquals( ( 3, { "magazines.Magazine": 1, "magazines.Issue": 2, }, ), deleted, )
def test_get(self): magazine, created = Magazine.from_dict({"name": "Stuff"}) self.assertTrue(created) self.assertIsNotNone(magazine.id) magazine2 = Magazine.get("stuff") self.assertIsNotNone(magazine) self.assertEquals(magazine, magazine2) magazine2 = Magazine.get(str(magazine.id)) self.assertIsNotNone(magazine) self.assertEquals(magazine, magazine2)
def test_save(self): magazine = Magazine(name="Green Garden") magazine.save() self.assertIsNotNone(magazine.id) self.assertEquals("green-garden", magazine.slug) magazine = Magazine(name="Old Garden") magazine.feed, created = Link.from_dict( {"url": "https://example.com/feed"}) magazine.save() self.assertIsNotNone(magazine.id) self.assertEquals("old-garden", magazine.slug)
def test_search(self): magazine, created = Magazine.from_dict({"name": "Stuff"}) self.assertTrue(created) self.assertIsNotNone(magazine.id) magazine, created = Magazine.from_dict({"name": "Other stuff"}) self.assertTrue(created) self.assertIsNotNone(magazine.id) magazine, created = Magazine.from_dict({"name": "New"}) self.assertTrue(created) self.assertIsNotNone(magazine.id) self.assertEquals(3, Magazine.objects.all().count()) self.assertEquals(2, Magazine.search("stuff").count()) self.assertEquals(1, Magazine.search("new").count())
def test_from_to_dict(self): magazine, created = Magazine.objects.get_or_create(name="Cool") self.assertTrue(created) self.assertIsNotNone(magazine.id) self.assertEquals( { "name": "Cool", "feed": None, "links": None, }, magazine.to_dict(), ) self.assertEquals((magazine, False), Magazine.from_dict(magazine.to_dict())) self.assertEquals((magazine, False), Magazine.from_dict({"name": "Cool"})) feed, created = Link.from_dict({"url": "https://example.com/feed"}) self.assertTrue(created) self.assertIsNotNone(feed.id) link, created = Link.from_dict({"url": "https://example.com"}) self.assertTrue(created) self.assertIsNotNone(link.id) magazine, created = Magazine.objects.get_or_create(name="Example", feed=feed) magazine.links.add(link) self.assertTrue(created) self.assertIsNotNone(magazine.id) self.assertEquals( { "name": "Example", "feed": { "url": "https://example.com/feed" }, "links": [{ "url": "https://example.com" }], }, magazine.to_dict(), ) self.assertEquals((magazine, False), Magazine.from_dict(magazine.to_dict()))
def test_edit(self): magazine, created = Magazine.from_dict({"name": "New"}) self.assertTrue(created) self.assertIsNotNone(magazine.id) self.assertIsNone(magazine.feed) magazine.edit("feed", "https://example.com") self.assertIsNotNone(magazine.feed.id) self.assertEquals("https://example.com", magazine.feed.link) self.assertEquals(0, magazine.links.count()) magazine.edit("link", "https://example.org") self.assertEquals(1, magazine.links.count()) self.assertEquals("https://example.org", magazine.links.first().link)
def setUp(self): self.paper, created = Paper.from_dict({"title": "Really cool stuff"}) self.assertTrue(created) self.assertIsNotNone(self.paper.id) magazine, created = Magazine.from_dict({"name": "Example"}) self.assertTrue(created) self.assertIsNotNone(magazine.pk) self.issue, created = Issue.from_dict({"issue": "1/2021"}, magazine) self.assertTrue(created) self.assertIsNotNone(self.issue.pk) book, created = Book.from_dict({"title": "Example"}) self.assertTrue(created) self.assertIsNotNone(book.pk) self.edition, created = Edition.from_dict( {"publishing_date": "2021-02-01"}, book) self.assertTrue(created) self.assertIsNotNone(self.edition.pk)
def _magazine(args: Namespace, file: TextIO = sys.stdout): magazine: Optional[Magazine] = None if args.subparser == "add": magazine, created = Magazine.from_dict({ "name": args.name, "feed": Link.get_or_create(args.feed).to_dict() if args.feed else None, "links": [Link.get_or_create(link).to_dict() for link in args.link], }) if created: stdout.write( _('Successfully added magazine "%(name)s" with id "%(pk)d".') % { "name": magazine.name, "pk": magazine.pk }, "=", file=file, ) else: stdout.write( _('The magazine "%(name)s" already exists with id "%(pk)d", ' + "aborting...") % { "name": magazine.name, "pk": magazine.pk }, "", file=file, ) magazine.print(file) elif args.subparser == "delete": magazine = Magazine.get(args.magazine) if magazine: magazine.delete() stdout.write( _('Successfully deleted magazine "%(name)s".') % {"name": magazine.name}, "", file=file, ) else: stdout.write(_("No magazine found."), "", file=file) elif args.subparser == "edit": magazine = Magazine.get(args.magazine) if magazine: magazine.edit(args.field, args.value) stdout.write( _('Successfully edited magazine "%(name)s" with id "%(pk)d".') % { "name": magazine.name, "pk": magazine.pk }, "", file=file, ) else: stdout.write(_("No magazine found."), "", file=file) elif args.subparser == "info": magazine = Magazine.get(args.magazine) if magazine: magazine.print(file) else: stdout.write(_("No magazine found."), "", file=file) elif args.subparser == "issue": magazine = Magazine.get(args.magazine) acquisition: Optional[Acquisition] = None if magazine: if args.issue_subparser == "acquisition" and magazine: issue = Issue.get(args.issue, magazine) if args.acquisition_subparser == "add" and issue: acquisition, created = Acquisition.from_dict( { "date": args.date, "price": args.price }, issue) if created: stdout.write( _('Successfully added acquisition with id "%(pk)d".' ) % {"pk": acquisition.pk}, "=", file=file, ) else: stdout.write( _('The acquisition already exists with id "%(pk)d".' ) % {"pk": acquisition.pk}, "", file=file, ) acquisition.print(file) elif args.acquisition_subparser == "delete" and issue: acquisition = Acquisition.get(args.acquisition, issues=issue) if acquisition: acquisition.delete(acquisition) stdout.write( _('Successfully deleted acquisition with id "%(pk)d".' ) % {"pk": acquisition.pk}, "", file=file, ) else: stdout.write(_("No acquisition found."), "", file=file) elif args.acquisition_subparser == "edit" and issue: acquisition = Acquisition.get(args.acquisition, issues=issue) if acquisition: acquisition.edit(args.field, args.value) stdout.write( _('Successfully edited acquisition with id "%(pk)d".' ) % {"pk": acquisition.pk}, "=", file=file, ) acquisition.print(file) else: stdout.write(_("No acquisition found."), "", file=file) else: stdout.write(_("No issue found."), "", file=file) elif args.issue_subparser == "add" and magazine: issue, created = Issue.from_dict( { "issue": args.issue, "publishing_date": args.publishing_date, "cover": args.cover, "languages": args.language, "links": [ Link.get_or_create(link).to_dict() for link in args.link ], "files": [{ "path": file } for file in args.file], }, magazine, ) if created: stdout.write( _('Successfully added issue "%(issue)s" with id "%(pk)d".' ) % { "issue": issue.issue, "pk": issue.pk }, "=", file=file, ) else: stdout.write( _('The issue "%(issue)s" already exists with id "%(pk)d".' ) % { "issue": issue.issue, "pk": issue.pk }, "", file=file, ) issue.print(file) elif args.subparser == "delete" and magazine: issue = Issue.get(args.issue) if issue: issue.delete() stdout.write( _('Successfully deleted issue with id "%(pk)s".') % {"pk": issue.pk}, "", file=file, ) else: stdout.write(_("No issue found."), "", file=file) elif args.issue_subparser == "edit" and magazine: issue = Issue.get(args.issue, magazine) if issue: issue.edit(args.edit_subparser, args.value) stdout.write( _('Successfully edited issue "%(issue)s" with id "%(pk)d".' ) % { "issue": issue.issue, "pk": issue.pk }, "", file=file, ) issue.print(file) else: stdout.write(_("No issue found."), "", file=file) elif args.issue_subparser == "info" and magazine: issue = Issue.get(args.issue, magazine) if issue: issue.print(file) else: stdout.write(_("No issue found."), "", file=file) elif args.issue_subparser == "list" and magazine: if args.search: issues = Issue.search(args.search) elif args.shelf: issues = Issue.by_shelf(args.shelf) else: issues = Issue.objects.filter(magazine=magazine) stdout.write( [_("Id"), _("Magazine"), _("Issue"), _("Publishing date")], "=", [0.05, 0.40, 0.85], file=file, ) for i, has_next in lookahead(issues): stdout.write( [i.pk, i.magazine.name, i.issue, i.publishing_date], "_" if has_next else "=", [0.05, 0.40, 0.85], file=file, ) elif args.issue_subparser == "open" and magazine: issue = Issue.get(args.issue, magazine) if issue: issue_file = issue.files.get(pk=args.file) path = settings.MEDIA_ROOT / issue_file.file.path if sys.platform == "linux": os.system(f'xdg-open "{path}"') else: os.system(f'open "{path}"') else: stdout.write(_("No issue found."), "", file=file) elif args.issue_subparser == "read" and magazine: issue = Issue.get(args.issue, magazine) read: Optional[Read] = None if args.read_subparser == "add" and issue: read, created = Read.from_dict( { "started": args.started, "finished": args.finished }, issue) if created: stdout.write( _('Successfully added read with id "%(pk)s".') % {"pk": read.pk}, "=", file=file, ) else: stdout.write( _('The read already exists with id "%(pk)s".') % {"pk": read.pk}, "", file=file, ) read.print(file) elif args.read_subparser == "delete" and issue: read = Read.get(args.read, issues=issue) if read: read.delete() stdout.write( _('Successfully deleted read with id "%(pk)s".') % {"pk": read.pk}, "", file=file, ) else: stdout.write(_("No read found."), "", file=file) elif args.read_subparser == "edit" and issue: read = Read.get(args.read, issues=issue) if read: read.edit(args.field, args.value) stdout.write( _('Successfully edited read with id "%(pk)s".') % {"pk": read.pk}, "=", file=file, ) read.info(file) else: stdout.write(_("No read found."), "", file=file) else: stdout.write(_("No issue found."), "", file=file) else: stdout.write(_("No magazine found."), "", file=file) elif args.subparser == "list": if args.search: magazines = Magazine.search(args.search) else: magazines = Magazine.objects.all() stdout.write( [_("Id"), _("Name"), _("Number of issues")], "=", [0.05, 0.8], file=file, ) for i, has_next in lookahead(magazines): stdout.write( [i.pk, i.name, i.issues.count()], "_" if has_next else "=", [0.05, 0.8], file=file, )
def setUp(self): self.magazine, created = Magazine.from_dict({"name": "Stuff"}) self.assertTrue(created) self.assertIsNotNone(self.magazine.id)
def test_print(self): magazine, created = Magazine.from_dict({"name": "Stuff"}) self.assertTrue(created) self.assertIsNotNone(magazine.id) with StringIO() as cout: magazine.print(cout) self.assertEquals( "Field Value " + " \n==================================" + "==================================================================\n" + "Id 1 " + " \n__________________________________" + "__________________________________________________________________\n" + "Name Stuff " + " \n__________________________________" + "__________________________________________________________________\n" + "Feed " + " \n__________________________________" + "__________________________________________________________________\n" + "Links " + " \n__________________________________" + "__________________________________________________________________\n" + "Issue " + " \n__________________________________" + "__________________________________________________________________\n", cout.getvalue(), ) magazine, created = Magazine.from_dict({ "name": "New", "feed": { "url": "https://example.com/feed" }, "links": [{ "url": "https://example.com" }], }) self.assertTrue(created) self.assertIsNotNone(magazine.id) with StringIO() as cout: magazine.print(cout) self.assertEquals( "Field Value " + " \n==================================" + "==================================================================\n" + "Id 2 " + " \n__________________________________" + "__________________________________________________________________\n" + "Name New " + " \n__________________________________" + "__________________________________________________________________\n" + "Feed 1: https://example.com/feed " + " \n__________________________________" + "__________________________________________________________________\n" + "Links 2: https://example.com " + " \n__________________________________" + "__________________________________________________________________\n" + "Issue " + " \n__________________________________" + "__________________________________________________________________\n", cout.getvalue(), )