diff --git a/apps/categories/models.py b/apps/categories/models.py index 97d05a979..18a33aaed 100644 --- a/apps/categories/models.py +++ b/apps/categories/models.py @@ -57,12 +57,12 @@ class MCategory(mongo.Document): for category_title, sites in category_groups: try: category = cls.objects.get(title=category_title) - except cls.DoesNotExist, e: - print " ***> Missing category: %s" % category_title + except cls.DoesNotExist as e: + print(" ***> Missing category: %s" % category_title) continue category.feed_ids = [site.feed_id for site in sites] category.save() - print " ---> Reloaded category: %s" % category + print(" ---> Reloaded category: %s" % category) @classmethod def subscribe(cls, user_id, category_title): @@ -111,6 +111,6 @@ class MCategorySite(mongo.Document): feed_id=feed_id) if not created: - print " ---> Site is already in category: %s" % category_site + print(" ---> Site is already in category: %s" % category_site) else: MCategory.reload_sites(category_title) \ No newline at end of file diff --git a/apps/feed_import/models.py b/apps/feed_import/models.py index 30df379e5..5004d1fab 100644 --- a/apps/feed_import/models.py +++ b/apps/feed_import/models.py @@ -3,7 +3,7 @@ import mongoengine as mongo import httplib2 import pickle import base64 -from StringIO import StringIO +from io import StringIO from oauth2client.client import Error as OAuthError from xml.etree.ElementTree import Element, SubElement, Comment, tostring from lxml import etree @@ -76,14 +76,14 @@ class OPMLExporter(Importer): if isinstance(obj, int) and obj in self.feeds: feed = self.feeds[obj] if verbose: - print " ---> Adding feed: %s - %s" % (feed['id'], - feed['feed_title'][:30]) + print(" ---> Adding feed: %s - %s" % (feed['id'], + feed['feed_title'][:30])) feed_attrs = self.make_feed_row(feed) body.append(Element('outline', feed_attrs)) elif isinstance(obj, dict): - for folder_title, folder_objs in obj.items(): + for folder_title, folder_objs in list(obj.items()): if verbose: - print " ---> Adding folder: %s" % folder_title + print(" ---> Adding folder: %s" % folder_title) folder_element = Element('outline', {'text': folder_title, 'title': folder_title}) body.append(self.process_outline(folder_element, folder_objs, verbose=verbose)) return body @@ -349,7 +349,7 @@ class GoogleReaderImporter(Importer): folders = add_object_to_folder(feed_db.pk, category, folders) # if feed_db.pk not in folders[category]: # folders[category].append(feed_db.pk) - except Exception, e: + except Exception as e: logging.info(' *** -> Exception: %s: %s' % (e, item)) return folders diff --git a/apps/newsletters/models.py b/apps/newsletters/models.py index 10b09d53f..1b8200c4a 100644 --- a/apps/newsletters/models.py +++ b/apps/newsletters/models.py @@ -3,7 +3,7 @@ import re import redis from django.contrib.sites.models import Site from django.core.mail import EmailMultiAlternatives -from django.core.urlresolvers import reverse +from django.urls import reverse from django.conf import settings from django.template.loader import render_to_string from django.utils.html import linebreaks diff --git a/apps/notifications/models.py b/apps/notifications/models.py index ba9442e7d..ca709a82e 100644 --- a/apps/notifications/models.py +++ b/apps/notifications/models.py @@ -16,11 +16,11 @@ from apps.analyzer.models import compute_story_score from utils.story_functions import truncate_chars from utils import log as logging from utils import mongoengine_fields -from HTMLParser import HTMLParser +from html.parser import HTMLParser from vendor.apns import APNs, Payload from bs4 import BeautifulSoup, Tag import types -import urlparse +import urllib.parse class NotificationFrequency(enum.Enum): immediately = 1 @@ -177,7 +177,7 @@ class MUserFeedNotification(mongo.Document): def replace_with_newlines(element): text = '' for elem in element.recursiveChildGenerator(): - if isinstance(elem, types.StringTypes): + if isinstance(elem, (str,)): text += elem elif elem.name == 'br': text += '\n' @@ -289,7 +289,7 @@ class MUserFeedNotification(mongo.Document): msg.attach_alternative(html, "text/html") try: msg.send() - except BotoServerError, e: + except BotoServerError as e: logging.user(usersub.user, '~BMStory notification by email error: ~FR%s' % e) return logging.user(usersub.user, '~BMStory notification by email: ~FY~SB%s~SN~BM~FY/~SB%s' % @@ -310,13 +310,13 @@ class MUserFeedNotification(mongo.Document): else: iframe.extract() - return unicode(soup) + return str(soup) def extract_youtube_id(self, url): youtube_id = None if 'youtube.com' in url: - youtube_parts = urlparse.urlparse(url) + youtube_parts = urllib.parse.urlparse(url) if '/embed/' in youtube_parts.path: youtube_id = youtube_parts.path.replace('/embed/', '') diff --git a/apps/profile/models.py b/apps/profile/models.py index 48b2209b4..d56bd5d26 100644 --- a/apps/profile/models.py +++ b/apps/profile/models.py @@ -16,7 +16,7 @@ from django.conf import settings from django.contrib.auth import authenticate from django.contrib.auth.models import User from django.core.mail import EmailMultiAlternatives -from django.core.urlresolvers import reverse +from django.urls import reverse from django.template.loader import render_to_string from apps.rss_feeds.models import Feed, MStory, MStarredStory from apps.rss_feeds.tasks import SchedulePremiumSetup @@ -91,11 +91,11 @@ class Profile(models.Model): try: super(Profile, self).save(*args, **kwargs) except DatabaseError: - print " ---> Profile not saved. Table isn't there yet." + print(" ---> Profile not saved. Table isn't there yet.") def delete_user(self, confirm=False, fast=False): if not confirm: - print " ---> You must pass confirm=True to delete this user." + print(" ---> You must pass confirm=True to delete this user.") return logging.user(self.user, "Deleting user: %s / %s" % (self.user.email, self.user.profile.last_seen_ip)) @@ -340,7 +340,7 @@ class Profile(models.Model): customers = [c['customer'] for c in charges if 'customer' in c] for customer in customers: if not customer: - print " ***> No customer!" + print(" ***> No customer!") continue try: profile = Profile.objects.get(stripe_id=customer) @@ -530,15 +530,15 @@ class Profile(models.Model): has_profile = user.profile.last_seen_ip except Profile.DoesNotExist: usernames.add(user.username) - print " ---> Missing profile: %-20s %-30s %-6s %-6s" % (user.username, user.email, opens, reads) + print(" ---> Missing profile: %-20s %-30s %-6s %-6s" % (user.username, user.email, opens, reads)) continue if opens is None and not reads and has_numbers: usernames.add(user.username) - print " ---> Numerics: %-20s %-30s %-6s %-6s" % (user.username, user.email, opens, reads) + print(" ---> Numerics: %-20s %-30s %-6s %-6s" % (user.username, user.email, opens, reads)) elif not has_profile: usernames.add(user.username) - print " ---> No IP: %-20s %-30s %-6s %-6s" % (user.username, user.email, opens, reads) + print(" ---> No IP: %-20s %-30s %-6s %-6s" % (user.username, user.email, opens, reads)) if not confirm: return usernames @@ -586,7 +586,7 @@ class Profile(models.Model): else: user_ids = dict([(us.user_id, us.active) for us in UserSubscription.objects.filter(feed_id=feed_id).only('user', 'active')]) - profiles = Profile.objects.filter(user_id__in=user_ids.keys()).values('user_id', 'last_seen_on', 'is_premium') + profiles = Profile.objects.filter(user_id__in=list(user_ids.keys())).values('user_id', 'last_seen_on', 'is_premium') feed = Feed.get_by_id(feed_id) if entire_feed_counted: @@ -776,7 +776,7 @@ class Profile(models.Model): def send_forgot_password_email(self, email=None): if not self.user.email and not email: - print "Please provide an email address." + print("Please provide an email address.") return if not self.user.email and email: @@ -797,7 +797,7 @@ class Profile(models.Model): def send_new_user_queue_email(self, force=False): if not self.user.email: - print "Please provide an email address." + print("Please provide an email address.") return params = dict(receiver_user_id=self.user.pk, email_type='new_user_queue') @@ -823,7 +823,7 @@ class Profile(models.Model): def send_upload_opml_finished_email(self, feed_count): if not self.user.email: - print "Please provide an email address." + print("Please provide an email address.") return user = self.user @@ -840,7 +840,7 @@ class Profile(models.Model): def send_import_reader_finished_email(self, feed_count): if not self.user.email: - print "Please provide an email address." + print("Please provide an email address.") return user = self.user @@ -857,7 +857,7 @@ class Profile(models.Model): def send_import_reader_starred_finished_email(self, feed_count, starred_count): if not self.user.email: - print "Please provide an email address." + print("Please provide an email address.") return user = self.user @@ -1270,7 +1270,7 @@ class PaymentHistory(models.Model): return payments, output output += "\nMonthly Totals:\n" - for m in reversed(range(months)): + for m in reversed(list(range(months))): now = datetime.datetime.now() start_date = datetime.datetime(now.year, now.month, 1) - dateutil.relativedelta.relativedelta(months=m) end_time = start_date + datetime.timedelta(days=31) @@ -1286,7 +1286,7 @@ class PaymentHistory(models.Model): this_mtd_sum = 0 last_mtd_count = 0 this_mtd_count = 0 - for y in reversed(range(years)): + for y in reversed(list(range(years))): now = datetime.datetime.now() start_date = datetime.datetime(now.year, now.month, 1) - dateutil.relativedelta.relativedelta(years=y) end_date = now - dateutil.relativedelta.relativedelta(years=y) @@ -1306,7 +1306,7 @@ class PaymentHistory(models.Model): last_month_avg = 0 last_month_sum = 0 last_month_count = 0 - for y in reversed(range(years)): + for y in reversed(list(range(years))): now = datetime.datetime.now() start_date = datetime.datetime(now.year, now.month, 1) - dateutil.relativedelta.relativedelta(years=y) end_time = start_date + datetime.timedelta(days=31) @@ -1330,7 +1330,7 @@ class PaymentHistory(models.Model): last_ytd_sum = 0 this_ytd_count = 0 last_ytd_count = 0 - for y in reversed(range(years)): + for y in reversed(list(range(years))): now = datetime.datetime.now() start_date = datetime.datetime(now.year, 1, 1) - dateutil.relativedelta.relativedelta(years=y) end_date = now - dateutil.relativedelta.relativedelta(years=y) @@ -1350,7 +1350,7 @@ class PaymentHistory(models.Model): last_year_sum = 0 last_year_count = 0 annual = 0 - for y in reversed(range(years)): + for y in reversed(list(range(years))): now = datetime.datetime.now() start_date = datetime.datetime(now.year, 1, 1) - dateutil.relativedelta.relativedelta(years=y) end_date = datetime.datetime(now.year, 1, 1) - dateutil.relativedelta.relativedelta(years=y-1) - datetime.timedelta(seconds=1) @@ -1370,7 +1370,7 @@ class PaymentHistory(models.Model): total = cls.objects.all().aggregate(sum=Sum('payment_amount')) output += "\nTotal: $%s\n" % total['sum'] - print output + print(output) return {'annual': annual, 'output': output} @@ -1399,7 +1399,7 @@ class MGiftCode(mongo.Document): @staticmethod def create_code(gift_code=None): - u = unicode(uuid.uuid4()) + u = str(uuid.uuid4()) code = u[:8] + u[9:13] if gift_code: code = gift_code + code[len(gift_code):] diff --git a/apps/recommendations/models.py b/apps/recommendations/models.py index 3249ce8e8..9d03895c9 100644 --- a/apps/recommendations/models.py +++ b/apps/recommendations/models.py @@ -24,8 +24,8 @@ class RecommendedFeed(models.Model): class RecommendedFeedUserFeedback(models.Model): - recommendation = models.ForeignKey(RecommendedFeed, related_name='feedback') - user = models.ForeignKey(User, related_name='feed_feedback') + recommendation = models.ForeignKey(RecommendedFeed, related_name='feedback', on_delete=models.CASCADE) + user = models.ForeignKey(User, related_name='feed_feedback', on_delete=models.CASCADE) score = models.IntegerField(default=0) created_date = models.DateField(auto_now_add=True) @@ -47,7 +47,7 @@ class MFeedFolder(mongo.Document): @classmethod def count_feed(cls, feed_id): feed = Feed.get_by_id(feed_id) - print feed + print(feed) found_folders = defaultdict(int) user_ids = [sub['user_id'] for sub in UserSubscription.objects.filter(feed=feed).values('user_id')] usf = UserSubscriptionFolders.objects.filter(user_id__in=user_ids) @@ -57,7 +57,7 @@ class MFeedFolder(mongo.Document): if not folder_title: continue found_folders[folder_title.lower()] += 1 # print "%-20s - %s" % (folder_title if folder_title != '' else '[Top]', sub.user_id) - print sorted(found_folders.items(), key=lambda f: f[1], reverse=True) + print(sorted(list(found_folders.items()), key=lambda f: f[1], reverse=True)) @classmethod @@ -66,7 +66,7 @@ class MFeedFolder(mongo.Document): if isinstance(item, int) and item == feed_id: return folder_title elif isinstance(item, dict): - for f_k, f_v in item.items(): + for f_k, f_v in list(item.items()): sub_folder_title = cls.feed_folder_parent(f_v, feed_id, f_k) if sub_folder_title: return sub_folder_title diff --git a/apps/rss_feeds/models.py b/apps/rss_feeds/models.py index 10bab0ad6..8a8a6f4de 100644 --- a/apps/rss_feeds/models.py +++ b/apps/rss_feeds/models.py @@ -2286,7 +2286,7 @@ class Feed(models.Model): # phrase = models.CharField(max_length=500) class FeedData(models.Model): - feed = AutoOneToOneField(Feed, related_name='data') + feed = AutoOneToOneField(Feed, related_name='data', on_delete=models.CASCADE) feed_tagline = models.CharField(max_length=1024, blank=True, null=True) story_count_history = models.TextField(blank=True, null=True) feed_classifier_counts = models.TextField(blank=True, null=True) @@ -3251,7 +3251,7 @@ class DuplicateFeed(models.Model): duplicate_address = models.CharField(max_length=764, db_index=True) duplicate_link = models.CharField(max_length=764, null=True, db_index=True) duplicate_feed_id = models.CharField(max_length=255, null=True, db_index=True) - feed = models.ForeignKey(Feed, related_name='duplicate_addresses') + feed = models.ForeignKey(Feed, related_name='duplicate_addresses', on_delete=models.CASCADE) def __unicode__(self): return "%s: %s / %s" % (self.feed, self.duplicate_address, self.duplicate_link) diff --git a/apps/social/models.py b/apps/social/models.py index 6e79d64e3..a078b32c0 100644 --- a/apps/social/models.py +++ b/apps/social/models.py @@ -1,5 +1,5 @@ import os -import urlparse +import urllib.parse import datetime import time import zlib @@ -9,15 +9,15 @@ import re import mongoengine as mongo import random import requests -import HTMLParser +import html.parser import tweepy from collections import defaultdict -from BeautifulSoup import BeautifulSoup +from bs4 import BeautifulSoup from mongoengine.queryset import Q from django.conf import settings from django.contrib.auth.models import User from django.contrib.sites.models import Site -from django.core.urlresolvers import reverse +from django.urls import reverse from django.template.loader import render_to_string from django.template.defaultfilters import slugify from django.core.mail import EmailMultiAlternatives @@ -38,7 +38,7 @@ from utils.story_functions import truncate_chars, strip_tags, linkify, image_siz from utils.image_functions import ImageOps from utils.scrubber import SelectiveScriptScrubber from utils import s3_utils -from StringIO import StringIO +from io import StringIO try: from apps.social.spam import detect_spammers @@ -68,13 +68,13 @@ class MRequestInvite(mongo.Document): @classmethod def blast(cls): invites = cls.objects.filter(email_sent=None) - print ' ---> Found %s invites...' % invites.count() + print(' ---> Found %s invites...' % invites.count()) for invite in invites: try: invite.send_email() except: - print ' ***> Could not send invite to: %s. Deleting.' % invite.username + print(' ***> Could not send invite to: %s. Deleting.' % invite.username) invite.delete() def send_email(self): @@ -261,9 +261,9 @@ class MSocialProfile(mongo.Document): for story in MSharedStory.objects(user_id=self.user_id).only('story_feed_id')[:500]: publishers[story.story_feed_id] += 1 feed_titles = dict((f.id, f.feed_title) - for f in Feed.objects.filter(pk__in=publishers.keys()).only('id', 'feed_title')) + for f in Feed.objects.filter(pk__in=list(publishers.keys())).only('id', 'feed_title')) feed_publishers = sorted([{'id': k, 'feed_title': feed_titles[k], 'story_count': v} - for k, v in publishers.items() + for k, v in list(publishers.items()) if k in feed_titles], key=lambda f: f['story_count'], reverse=True)[:20] @@ -723,7 +723,7 @@ class MSocialProfile(mongo.Document): for year in range(min_year, now.year+1): for month in range(1, 12+1): if datetime.datetime(year, month, 1) < now: - key = u'%s-%s' % (year, month) + key = '%s-%s' % (year, month) if dates.get(key) or start: start = True months.append((key, dates.get(key, 0))) @@ -760,7 +760,7 @@ class MSocialProfile(mongo.Document): scores = [] res = cls.objects(social_user_id=self.user_id).map_reduce(map_f, reduce_f, output='inline') for r in res: - facet_values = dict([(k, int(v)) for k,v in r.value.iteritems()]) + facet_values = dict([(k, int(v)) for k,v in r.value.items()]) facet_values[facet] = r.key scores.append(facet_values) scores = sorted(scores, key=lambda v: v['neg'] - v['pos']) @@ -863,7 +863,7 @@ class MSocialSubscription(mongo.Document): social_sub.calculate_feed_scores() # Combine subscription read counts with feed/user info - feed = dict(social_sub.canonical().items() + social_profiles[user_id].items()) + feed = dict(list(social_sub.canonical().items()) + list(social_profiles[user_id].items())) social_feeds.append(feed) return social_feeds @@ -1087,7 +1087,7 @@ class MSocialSubscription(mongo.Document): story_hashes_and_dates = range_func(ranked_stories_keys, offset, limit, withscores=True) if not story_hashes_and_dates: return [], [], [] - story_hashes, story_dates = zip(*story_hashes_and_dates) + story_hashes, story_dates = list(zip(*story_hashes_and_dates)) if read_filter == "unread": unread_story_hashes = story_hashes else: @@ -1114,7 +1114,7 @@ class MSocialSubscription(mongo.Document): story_hashes_and_dates = range_func(ranked_stories_keys, offset, limit, withscores=True) if not story_hashes_and_dates: return [], [], [] - story_hashes, story_dates = zip(*story_hashes_and_dates) + story_hashes, story_dates = list(zip(*story_hashes_and_dates)) if read_filter == "unread": unread_feed_story_hashes = story_hashes @@ -1493,7 +1493,7 @@ class MSharedStory(mongo.DynamicDocument): @property def decoded_story_title(self): - h = HTMLParser.HTMLParser() + h = html.parser.HTMLParser() return h.unescape(self.story_title) def canonical(self): @@ -1550,7 +1550,7 @@ class MSharedStory(mongo.DynamicDocument): @classmethod def trim_old_stories(cls, stories=10, days=90, dryrun=False): - print " ---> Fetching shared story counts..." + print(" ---> Fetching shared story counts...") stats = settings.MONGODB.newsblur.shared_stories.aggregate([{ "$group": { "_id": "$user_id", @@ -1564,7 +1564,7 @@ class MSharedStory(mongo.DynamicDocument): month_ago = datetime.datetime.now() - datetime.timedelta(days=days) user_ids = list(stats) user_ids = sorted(user_ids, key=lambda x:x['stories'], reverse=True) - print " ---> Found %s users with more than %s starred stories" % (len(user_ids), stories) + print(" ---> Found %s users with more than %s starred stories" % (len(user_ids), stories)) total = 0 for stat in user_ids: @@ -1578,17 +1578,17 @@ class MSharedStory(mongo.DynamicDocument): total += stat['stories'] username = "%s (%s)" % (user and user.username or " - ", stat['_id']) - print " ---> %19.19s: %-20.20s %s stories" % (user and user.profile.last_seen_on or "Deleted", + print(" ---> %19.19s: %-20.20s %s stories" % (user and user.profile.last_seen_on or "Deleted", username, - stat['stories']) + stat['stories'])) if not dryrun and stat['_id']: cls.objects.filter(user_id=stat['_id']).delete() elif not dryrun and stat['_id'] == 0: - print " ---> Deleting unshared stories (user_id = 0)" + print(" ---> Deleting unshared stories (user_id = 0)") cls.objects.filter(user_id=stat['_id']).delete() - print " ---> Deleted %s stories in total." % total + print(" ---> Deleted %s stories in total." % total) def unshare_story(self): socialsubs = MSocialSubscription.objects.filter(subscription_user_id=self.user_id, @@ -1763,7 +1763,7 @@ class MSharedStory(mongo.DynamicDocument): shared_feed_ids=shared_feed_ids) shared = 0 - for story_hash, story_info in shared_stories_today.items(): + for story_hash, story_info in list(shared_stories_today.items()): story, _ = MStory.find_story(story_info['feed_id'], story_info['story_hash']) if not story: logging.user(popular_user, "~FRPopular stories, story not found: %s" % story_info) @@ -1774,10 +1774,10 @@ class MSharedStory(mongo.DynamicDocument): if interactive: feed = Feed.get_by_id(story.story_feed_id) - accept_story = raw_input("%s / %s [Y/n]: " % (story.decoded_story_title, feed.title)) + accept_story = input("%s / %s [Y/n]: " % (story.decoded_story_title, feed.title)) if accept_story in ['n', 'N']: continue - story_db = dict([(k, v) for k, v in story._data.items() + story_db = dict([(k, v) for k, v in list(story._data.items()) if k is not None and v is not None]) story_db.pop('user_id', None) story_db.pop('id', None) @@ -1835,7 +1835,7 @@ class MSharedStory(mongo.DynamicDocument): if drop: for key_name in ["C", "S"]: keys = r.keys("%s:*" % key_name) - print " ---> Removing %s keys named %s:*" % (len(keys), key_name) + print(" ---> Removing %s keys named %s:*" % (len(keys), key_name)) for key in keys: r.delete(key) for story in cls.objects.all(): @@ -1947,7 +1947,7 @@ class MSharedStory(mongo.DynamicDocument): 'story_hash': story['story_hash'], 'user_id__in': sharer_user_ids, } - if params.has_key('story_db_id'): + if 'story_db_id' in params: params.pop('story_db_id') shared_stories = cls.objects.filter(**params)\ .hint([('story_hash', 1)]) @@ -2331,7 +2331,7 @@ class MSharedStory(mongo.DynamicDocument): try: datastream = StringIO(req.content) width, height = ImageOps.image_size(datastream) - except IOError, e: + except IOError as e: logging.debug(" ***> Couldn't read image: %s / %s" % (e, image_source)) datastream = StringIO(req.content[:100]) _, width, height = image_size(datastream) @@ -2502,7 +2502,7 @@ class MSocialServices(mongo.Document): api = self.twitter_api() try: twitter_user = api.me() - except tweepy.TweepError, e: + except tweepy.TweepError as e: api = None if not api: @@ -2528,8 +2528,8 @@ class MSocialServices(mongo.Document): self.set_photo('twitter') try: - friend_ids = list(unicode(friend.id) for friend in tweepy.Cursor(api.friends).items()) - except tweepy.TweepError, e: + friend_ids = list(str(friend.id) for friend in list(tweepy.Cursor(api.friends).items())) + except tweepy.TweepError as e: logging.user(user, "~BG~FMTwitter import ~SBfailed~SN: %s" % e) return if not friend_ids: @@ -2589,7 +2589,7 @@ class MSocialServices(mongo.Document): self.save() return - facebook_friend_ids = [unicode(friend["id"]) for friend in friends["data"]] + facebook_friend_ids = [str(friend["id"]) for friend in friends["data"]] self.facebook_friend_ids = facebook_friend_ids self.facebook_refresh_date = datetime.datetime.utcnow() self.facebook_picture_url = "https://graph.facebook.com/%s/picture" % self.facebook_uid @@ -2760,7 +2760,7 @@ class MSocialServices(mongo.Document): week_ago = datetime.datetime.now() - datetime.timedelta(days=days) shares = MSharedStory.objects.filter(shared_date__gte=week_ago) sharers = sorted(set([s.user_id for s in shares])) - print " ---> %s sharing user_ids" % len(sorted(sharers)) + print(" ---> %s sharing user_ids" % len(sorted(sharers))) for user_id in sharers: try: @@ -2771,9 +2771,9 @@ class MSocialServices(mongo.Document): ss = MSocialServices.objects.get(user_id=user_id) try: ss.sync_twitter_photo() - print " ---> Syncing %s" % user_id - except Exception, e: - print " ***> Exception on %s: %s" % (user_id, e) + print(" ---> Syncing %s" % user_id) + except Exception as e: + print(" ***> Exception on %s: %s" % (user_id, e)) def sync_twitter_photo(self): profile = MSocialProfile.get_user(self.user_id) @@ -2787,7 +2787,7 @@ class MSocialServices(mongo.Document): try: api = self.twitter_api() me = api.me() - except (tweepy.TweepError, TypeError), e: + except (tweepy.TweepError, TypeError) as e: logging.user(user, "~FRException (%s): ~FCsetting to blank profile photo" % e) self.twitter_picture_url = None self.set_photo("nothing") @@ -2809,7 +2809,7 @@ class MSocialServices(mongo.Document): os.remove(filename) else: api.update_status(status=message) - except tweepy.TweepError, e: + except tweepy.TweepError as e: user = User.objects.get(pk=self.user_id) logging.user(user, "~FRTwitter error: ~SB%s" % e) return @@ -2823,7 +2823,7 @@ class MSocialServices(mongo.Document): logging.user(user, "~FCFetching image for twitter: ~SB%s" % shared_story.image_urls[0]) url = shared_story.image_urls[0] - image_filename = os.path.basename(urlparse.urlparse(url).path) + image_filename = os.path.basename(urllib.parse.urlparse(url).path) req = requests.get(url, stream=True) filename = "/tmp/%s-%s" % (shared_story.story_hash, image_filename) @@ -2851,7 +2851,7 @@ class MSocialServices(mongo.Document): website=shared_story.blurblog_permalink(), message=message, ) - except facebook.GraphAPIError, e: + except facebook.GraphAPIError as e: logging.debug("---> ~SN~FMFacebook posting error, disconnecting: ~SB~FR%s" % e) self.disconnect_facebook() return @@ -2867,8 +2867,8 @@ class MSocialServices(mongo.Document): 'text': shared_story.decoded_story_title, 'url': shared_story.blurblog_permalink() }]) - except Exception, e: - print e + except Exception as e: + print(e) return return True diff --git a/vendor/paypal/standard/ipn/models.py b/vendor/paypal/standard/ipn/models.py index 1d1b67bd9..40c569ff1 100755 --- a/vendor/paypal/standard/ipn/models.py +++ b/vendor/paypal/standard/ipn/models.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from __future__ import unicode_literals + from six import b from six.moves.urllib.request import urlopen @@ -11,7 +11,7 @@ from vendor.paypal.standard.ipn.signals import payment_was_flagged, payment_was_ class PayPalIPN(PayPalStandardBase): """Logs PayPal IPN interactions.""" - format = u"" + format = "" class Meta: db_table = "paypal_ipn" diff --git a/vendor/paypal/standard/pdt/models.py b/vendor/paypal/standard/pdt/models.py index 599f91a92..84ecc42bc 100755 --- a/vendor/paypal/standard/pdt/models.py +++ b/vendor/paypal/standard/pdt/models.py @@ -26,7 +26,7 @@ except: class PayPalPDT(PayPalStandardBase): - format = u"" + format = "" amt = models.DecimalField(max_digits=64, decimal_places=2, default=0, blank=True, null=True) cm = models.CharField(max_length=255, blank=True) diff --git a/vendor/zebra/models.py b/vendor/zebra/models.py index fbc15d80d..6610538ca 100755 --- a/vendor/zebra/models.py +++ b/vendor/zebra/models.py @@ -11,7 +11,7 @@ class StripeCustomer(models.Model, mixins.StripeMixin, mixins.StripeCustomerMixi abstract = True def __unicode__(self): - return u"%s" % self.stripe_customer_id + return "%s" % self.stripe_customer_id class StripePlan(models.Model, mixins.StripeMixin, mixins.StripePlanMixin): @@ -21,7 +21,7 @@ class StripePlan(models.Model, mixins.StripeMixin, mixins.StripePlanMixin): abstract = True def __unicode__(self): - return u"%s" % self.stripe_plan_id + return "%s" % self.stripe_plan_id class StripeSubscription(models.Model, mixins.StripeMixin, mixins.StripeSubscriptionMixin): @@ -53,7 +53,7 @@ if options.ZEBRA_ENABLE_APP: plan = models.ForeignKey(Plan, on_delete=models.CASCADE) def __unicode__(self): - return u"%s: %s" % (self.customer, self.plan) + return "%s: %s" % (self.customer, self.plan) @property def stripe_customer(self):