def test_build_reference_title_from_url(self): ref_title = build_reference_title_from_url("http://mif/maf/mouf") self.assertEqual("mif/maf/mouf",ref_title) ref_title = build_reference_title_from_url("http://mif/maf/mouf.php") self.assertEqual("mif/maf/mouf.php",ref_title) ref_title = build_reference_title_from_url("http://glop.mif/maf/mouf.php") self.assertEqual("glop.mif/maf/mouf.php",ref_title) ref_title = build_reference_title_from_url("http://glop.mif/") self.assertEqual("glop.mif",ref_title) ref_title = build_reference_title_from_url("internal://glop.mif/maf/mouf.php") self.assertEqual("glop.mif/maf/mouf.php",ref_title) ref_title = build_reference_title_from_url("/glop.mif/maf/mouf.php") self.assertEqual("/glop.mif/maf/mouf.php",ref_title) ref_title = build_reference_title_from_url("http://") self.assertEqual("",ref_title)
def test_build_reference_title_from_url(self): ref_title = build_reference_title_from_url("http://mif/maf/mouf") self.assertEqual("mif/maf/mouf", ref_title) ref_title = build_reference_title_from_url("http://mif/maf/mouf.php") self.assertEqual("mif/maf/mouf.php", ref_title) ref_title = build_reference_title_from_url( "http://glop.mif/maf/mouf.php") self.assertEqual("glop.mif/maf/mouf.php", ref_title) ref_title = build_reference_title_from_url("http://glop.mif/") self.assertEqual("glop.mif", ref_title) ref_title = build_reference_title_from_url( "internal://glop.mif/maf/mouf.php") self.assertEqual("glop.mif/maf/mouf.php", ref_title) ref_title = build_reference_title_from_url("/glop.mif/maf/mouf.php") self.assertEqual("/glop.mif/maf/mouf.php", ref_title) ref_title = build_reference_title_from_url("http://") self.assertEqual("", ref_title)
def save(self): """Warning: the source will be saved as well as the related objects (no commit options). Returns the source. """ form_url,_ = sanitize_url(self.cleaned_data["url"]) form_title = self.cleaned_data["title"] form_feed_url,_ = sanitize_url(self.cleaned_data["feed_url"]) if self.user.userprofile.web_feeds.filter(source__url=form_url).exists(): # nothing to do return # try a bigger look-up anyway same_sources = WebFeed.objects.filter(source__url=form_url).all() # url are unique for sources if same_sources: new_feed = same_sources[0] else: if form_title: source_title = form_title else: source_title = build_reference_title_from_url(form_url) try: source_ref = Reference.objects.get(url=form_url) except ObjectDoesNotExist: source_ref = Reference(url=form_url,title=source_title, pub_date=datetime.now(timezone.utc)) source_ref.save() new_feed = WebFeed(source=source_ref) # assume that either form_feed_url or form_url have been # validated as a valid feed url new_feed.xmlURL = form_feed_url or form_url new_feed.last_update_check = datetime.utcfromtimestamp(0)\ .replace(tzinfo=timezone.utc) new_feed.save() with transaction.atomic(): source_ref.add_pin() source_ref.save() self.user.userprofile.sources.add(source_ref) self.user.userprofile.public_sources.add(source_ref) self.user.userprofile.web_feeds.add(new_feed) self.user.userprofile.save() return new_feed
def save(self): """Warning: the source will be saved as well as the related objects (no commit options). Returns the source. """ form_url, _ = sanitize_url(self.cleaned_data["url"]) form_title = self.cleaned_data["title"] form_feed_url, _ = sanitize_url(self.cleaned_data["feed_url"]) if self.user.userprofile.web_feeds.filter( source__url=form_url).exists(): # nothing to do return # try a bigger look-up anyway same_sources = WebFeed.objects.filter(source__url=form_url).all() # url are unique for sources if same_sources: new_feed = same_sources[0] else: if form_title: source_title = form_title else: source_title = build_reference_title_from_url(form_url) try: source_ref = Reference.objects.get(url=form_url) except ObjectDoesNotExist: source_ref = Reference(url=form_url, title=source_title, pub_date=datetime.now(timezone.utc)) source_ref.save() new_feed = WebFeed(source=source_ref) # assume that either form_feed_url or form_url have been # validated as a valid feed url new_feed.xmlURL = form_feed_url or form_url new_feed.last_update_check = datetime.utcfromtimestamp(0)\ .replace(tzinfo=timezone.utc) new_feed.save() self.user.userprofile.sources.add(source_ref) self.user.userprofile.public_sources.add(source_ref) self.user.userprofile.web_feeds.add(new_feed) return new_feed
def save(self): """Warning: the bookmark will be saved as well as the related objects (no commit options). Returns the bookmark. """ url,_ = sanitize_url(self.cleaned_data["url"]) title = self.cleaned_data["title"] \ or build_reference_title_from_url(url) comment = self.cleaned_data["comment"] pub_date = self.cleaned_data["pub_date"] \ or datetime.now(timezone.utc) src_url,_ = sanitize_url(self.cleaned_data["source_url"] \ or build_source_url_from_reference_url(url)) src_title = self.cleaned_data["source_title"] \ or build_reference_title_from_url(src_url) # Find or create a matching reference try: bookmarked_ref = Reference.objects.get(url=url) # Arbitrarily chose one of the possible sources src_query = bookmarked_ref.sources if src_query.count() > 1: ref_src = src_query.all()[0] else: ref_src = src_query.get() except ObjectDoesNotExist: try: ref_src = Reference.objects.get(url=src_url) except ObjectDoesNotExist: ref_src = Reference(url=src_url,title=src_title,pub_date=pub_date) ref_src.save() if src_url == url: bookmarked_ref = ref_src else: bookmarked_ref = Reference(url=url, title=title, pub_date=pub_date) bookmarked_ref.save() bookmarked_ref.sources.add(ref_src) with transaction.commit_on_success(): try: bmk = UserBookmark.objects.get(owner=self.user,reference=bookmarked_ref) except ObjectDoesNotExist: bmk = UserBookmark(owner=self.user,reference=bookmarked_ref, saved_date=datetime.now(timezone.utc)) bookmarked_ref.save_count += 1 bmk.save() bookmarked_ref.save() # allow the user-specific comment to be changed and also prefix # it with the user specified title if it differs from the # existing reference title. if comment: new_comment = comment else: new_comment = bmk.comment if self.cleaned_data["title"] and title!=bookmarked_ref.title \ and not new_comment.startswith(title): new_comment = "%s: %s" % (title,new_comment) if new_comment!=bmk.comment: bmk.comment = new_comment bmk.save() with transaction.commit_on_success(): if ref_src not in self.user.userprofile.sources.all(): self.user.userprofile.sources.add(ref_src) with transaction.commit_on_success(): for rust in ReferenceUserStatus\ .objects.filter(owner=self.user, reference=bookmarked_ref).all(): rust.has_been_saved = True rust.save() return bmk
def save(self): """Warning: the bookmark will be saved as well as the related objects (no commit options). Returns the bookmark. """ url, _ = sanitize_url(self.cleaned_data["url"]) title = self.cleaned_data["title"] \ or build_reference_title_from_url(url) comment = self.cleaned_data["comment"] pub_date = self.cleaned_data["pub_date"] \ or datetime.now(timezone.utc) src_url,_ = sanitize_url(self.cleaned_data["source_url"] \ or build_source_url_from_reference_url(url)) src_title = self.cleaned_data["source_title"] \ or build_reference_title_from_url(src_url) # Find or create a matching reference try: bookmarked_ref = Reference.objects.get(url=url) # Arbitrarily chose one of the possible sources src_query = bookmarked_ref.sources if src_query.count() > 1: ref_src = src_query.all()[0] else: ref_src = src_query.get() except ObjectDoesNotExist: try: ref_src = Reference.objects.get(url=src_url) except ObjectDoesNotExist: ref_src = Reference(url=src_url, title=src_title, pub_date=pub_date) ref_src.save() if src_url == url: bookmarked_ref = ref_src else: bookmarked_ref = Reference(url=url, title=title, pub_date=pub_date) bookmarked_ref.save() bookmarked_ref.sources.add(ref_src) with transaction.commit_on_success(): try: bmk = UserBookmark.objects.get(owner=self.user, reference=bookmarked_ref) except ObjectDoesNotExist: bmk = UserBookmark(owner=self.user, reference=bookmarked_ref, saved_date=datetime.now(timezone.utc)) bookmarked_ref.save_count += 1 bmk.save() bookmarked_ref.save() # allow the user-specific comment to be changed and also prefix # it with the user specified title if it differs from the # existing reference title. if comment: new_comment = comment else: new_comment = bmk.comment if self.cleaned_data["title"] and title!=bookmarked_ref.title \ and not new_comment.startswith(title): new_comment = "%s: %s" % (title, new_comment) if new_comment != bmk.comment: bmk.comment = new_comment bmk.save() with transaction.commit_on_success(): if ref_src not in self.user.userprofile.sources.all(): self.user.userprofile.sources.add(ref_src) with transaction.commit_on_success(): for rust in ReferenceUserStatus\ .objects.filter(owner=self.user, reference=bookmarked_ref).all(): rust.has_been_saved = True rust.save() return bmk