Пример #1
0
    def convert_pms(self):
        start_time = time.time()
        self.clear_messages()

        cursor = connection.cursor()
        # cursor.execute("SELECT * FROM smf_personal_messages ORDER BY id_pm ASC")
        cursor.execute(" SELECT f.id_pm, f.deleted_by_sender, f.id_member_from, f.from_name, \
            f.msgtime, f.subject, f.body, f.from_name, t.id_member, t.is_read, t.deleted FROM \
            smf_personal_messages AS f INNER JOIN smf_pm_recipients AS t ON f.id_pm = t.id_pm;")
        rows = cursor.fetchall()
        for row in rows:
            try: 
                message = Message()
                try:
                    sender = Profile.objects.get(old_user_id=row[2])
                    message.sender = sender.user
                except Profile.DoesNotExist, e:
                    if not row[2] == 0:
                        print "Profile does not exist for %s" % (row[2])
                        sender = None
                except Exception, e:
                    print "Sender %s does not exist." % (row[2])
                    sender = None


                try:
                    recipient = Profile.objects.get(old_user_id=row[8])
                    message.recipient = recipient.user
                except Profile.DoesNotExist, e:
                    try: 
                        message.recipient = User.objects.get(username=row[7])
                    except User.DoesNotExist, e:
                        message.recipient_name = row[7]
                        message.recipient = None
                        print "Recipient %s could not be found." % row[8]
Пример #2
0
def send_message(thread_id,
                 sender_id,
                 message_text,
                 sender_name=None):
    """
    This function takes Thread object id (first argument),
    sender id (second argument), message text (third argument)
    and can also take sender's name.

    It creates a new Message object and increases the
    values stored in Redis that represent the total number
    of messages for the thread and the number of this thread's
    messages sent from this specific user.

    If a sender's name is passed, it also publishes
    the message in the thread's channel in Redis
    (otherwise it is assumed that the message was
    already published in the channel).
    """

    message = Message()
    message.text = message_text
    message.thread_id = thread_id
    message.sender_id = sender_id
    message.save()

    thread_id = str(thread_id)
    sender_id = str(sender_id)

    #r = redis.StrictRedis()
    redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
    urlparse.uses_netloc.append('redis')
    url = urlparse.urlparse(redis_url)
    r = redis.StrictRedis(host=url.hostname, port=url.port, db=0, password=url.password)
    #r = redis.StrictRedis(host='spinyfin.redistogo.com', port=10695, db=0, password='******')

    if sender_name:
        r.publish("".join(["thread_", thread_id, "_messages"]), json.dumps({
            "timestamp": dateformat.format(message.datetime, 'U'),
            "sender": sender_name,
            "text": message_text,
        }))

    for key in ("total_messages", "".join(["from_", sender_id])):
        r.hincrby(
            "".join(["thread_", thread_id, "_messages"]),
            key,
            1
        )
def send_message(thread_id, sender_id, message_text, sender_name=None):
    """
    This function takes Thread object id (first argument),
    sender id (second argument), message text (third argument)
    and can also take sender's name.

    It creates a new Message object and increases the
    values stored in Redis that represent the total number
    of messages for the thread and the number of this thread's
    messages sent from this specific user.

    If a sender's name is passed, it also publishes
    the message in the thread's channel in Redis
    (otherwise it is assumed that the message was
    already published in the channel).
    """

    message = Message()
    message.text = message_text
    message.thread_id = thread_id
    message.sender_id = sender_id
    message.save()
    if message_text == 'Средства отправлены':
        thread = Thread.objects.get(id=thread_id)
        blocked = Blocked.objects.get(id=thread.bl_id)
        user = User.objects.get(id=blocked.user_id)
        send_templated_mail(
            template_name="sended.html",
            from_email='*****@*****.**',
            recipient_list=[user.email],
            context={'username': user.username},
        )
    thread_id = str(thread_id)
    sender_id = str(sender_id)

    r = redis.StrictRedis()
    if sender_name:
        r.publish(
            "".join(["thread_", thread_id, "_messages"]),
            json.dumps({
                "sender": sender_name,
                "timestamp": dateformat.format(message.datetime, 'U'),
                "text": message_text,
            }))

    for key in ("total_messages", "".join(["from_", sender_id])):
        r.hincrby("".join(["thread_", thread_id, "_messages"]), key, 1)
Пример #4
0
def send_message(thread_id, sender_id, message_text, sender_name=None):
    """
    This function takes Thread object id (first argument),
    sender id (second argument), message text (third argument)
    and can also take sender's name.

    It creates a new Message object and increases the
    values stored in Redis that represent the total number
    of messages for the thread and the number of this thread's
    messages sent from this specific user.

    If a sender's name is passed, it also publishes
    the message in the thread's channel in Redis
    (otherwise it is assumed that the message was
    already published in the channel).
    """

    message = Message()
    message.text = message_text
    message.thread_id = thread_id
    message.sender_id = sender_id
    message.save()

    thread_id = str(thread_id)
    sender_id = str(sender_id)

    r = redis.StrictRedis()
    #assert False

    if sender_name:
        r.publish(
            "".join(["thread_id", thread_id, "_messages"]),
            json.dumps({
                "timestamp": dateformat.format(message.datetime, 'U'),
                "sender": sender_name,
                "text": message_text,
            }))

    for key in ("total_messages", "".join(["from_", sender_id])):
        r.hincrby("".join(["thread_", thread_id, "_messages"]), key, 1)
Пример #5
0
def send_message(thread_id,
                 sender_id,
                 message_text,
                 sender_name=None):
    """
    This function takes Thread object id (first argument),
    sender id (second argument), message text (third argument)
    and can also take sender's name.

    It creates a new Message object and increases the
    values stored in Redis that represent the total number
    of messages for the thread and the number of this thread's
    messages sent from this specific user.

    If a sender's name is passed, it also publishes
    the message in the thread's channel in Redis
    (otherwise it is assumed that the message was
    already published in the channel).
    """

    message = Message()
    message.text = message_text
    message.thread_id = thread_id
    message.sender_id = sender_id
    message.save()

    thread_id = str(thread_id)
    sender_id = str(sender_id)

    r = redis.StrictRedis()

    if sender_name:
        r.publish("".join(["thread_", thread_id, "_messages"]), json.dumps({
            "timestamp": dateformat.format(message.datetime, 'U'),
            "sender": sender_name,
            "text": message_text,
        }))

    for key in ("total_messages", "".join(["from_", sender_id])):
        r.hincrby(
            "".join(["thread_", thread_id, "_messages"]),
            key,
            1
        )
Пример #6
0
    def convert_pms(self):
        start_time = time.time()
        self.clear_messages()

        cursor = connection.cursor()
        # cursor.execute("SELECT * FROM smf_personal_messages ORDER BY id_pm ASC")
        cursor.execute(
            " SELECT f.id_pm, f.deleted_by_sender, f.id_member_from, f.from_name, \
            f.msgtime, f.subject, f.body, f.from_name, t.id_member, t.is_read, t.deleted FROM \
            smf_personal_messages AS f INNER JOIN smf_pm_recipients AS t ON f.id_pm = t.id_pm;"
        )
        rows = cursor.fetchall()
        for row in rows:
            try:
                message = Message()
                try:
                    sender = Profile.objects.get(old_user_id=row[2])
                    message.sender = sender.user
                except Profile.DoesNotExist, e:
                    if not row[2] == 0:
                        print "Profile does not exist for %s" % (row[2])
                        sender = None
                except Exception, e:
                    print "Sender %s does not exist." % (row[2])
                    sender = None

                try:
                    recipient = Profile.objects.get(old_user_id=row[8])
                    message.recipient = recipient.user
                except Profile.DoesNotExist, e:
                    try:
                        message.recipient = User.objects.get(username=row[7])
                    except User.DoesNotExist, e:
                        message.recipient_name = row[7]
                        message.recipient = None
                        print "Recipient %s could not be found." % row[8]
Пример #7
0
def send_message(thread_id, sender_id, message_text, sender_name=None):

    message = Message()
    message.text = message_text
    message.thread_id = thread_id
    message.sender_id = sender_id
    message.save()

    thread_id = str(thread_id)
    sender_id = str(sender_id)

    r = redis.StrictRedis()

    if sender_name:
        r.publish(
            "".join(["thread_", thread_id, "_messages"]),
            json.dumps({
                "timestamp": dateformat.format(message.datetime, 'U'),
                "sender": sender_name,
                "text": message_text,
            }))

    for key in ("total_messages", "".join(["from_", sender_id])):
        r.hincrby("".join(["thread_", thread_id, "_messages"]), key, 1)
Пример #8
0
    def handle(self, *args, **kwargs):
        try:
            LANGUAGE = 'en'

            nordic_group = user.Group.objects.get_or_create(
                name='Nordic employees',
                openness=user.Group.CLOSED,
            )

            ed_users = EfsqtDiscussUsers.objects.using('devzone').all()
            count = ed_users.count()
            message = 'Importing %i users' % count
            for ed_user in ProgressBar(ed_users.iterator(), count, message):
                jm_user = EfsqtUsers.objects.using('devzone').get(id=ed_user.id)
                jm_usergroups = EfsqtUserUsergroupMap.objects.using('devzone').filter(user_id=ed_user.id)

                ab_user = User()
                ab_user.id = ed_user.id
                ab_user.save()

                for ug in jm_usergroups:
                    if ug.group_id in [7, 8]:
                        ab_user.is_staff = True
                    if ug.group_id == 8:
                        ab_user.is_superuser = True

                if ed_user.edited == 1 and ed_user.params:
                    params = json.loads(ed_user.params)
                    if 'show_twitter' in params and params['show_twitter'] == '1':
                        ab_user.twitter_handle = params['twitter']
                    if 'show_linkedin' in params and params['show_linkedin'] == '1':
                        ab_user.linkedin_profile = params['linkedin']
                    if 'show_website' in params and params['show_website'] == '1':
                        ab_user.website = params['website']

                ab_user.username = jm_user.username
                ab_user.real_name = jm_user.name or jm_user.username
                ab_user.email = jm_user.email
                hash, salt = jm_user.password.split(':')
                ab_user.password = '******'.join(['md5', salt, hash])
                ab_user.about = ed_user.description
                ab_user.date_joined = jm_user.registerdate or datetime.now()
                ab_user.last_login = jm_user.lastvisitdate or datetime.now()
                ab_user.last_seen = jm_user.lastvisitdate or datetime.now()
                #ab_user.status
                #ab_user.last_name
                #ab_user.gold
                #ab_user.social_sharing_mode
                #ab_user.interesting_tags
                #ab_user.subscribed_tags
                #ab_user.email_key
                #ab_user.first_name
                #ab_user.email_isvalid
                #ab_user.is_fake
                #ab_user.languages
                #ab_user.date_of_birth
                #ab_user.location
                #ab_user.new_response_count
                #ab_user.company
                #ab_user.is_active
                #ab_user.consecutive_days_visit_count
                #ab_user.email_tag_filter_strategy
                #ab_user.silver
                #ab_user.bronze
                #ab_user.questions_per_page
                #ab_user.email_signature
                #ab_user.show_country
                #ab_user.show_marked_tags
                #ab_user.twitter_access_token
                #ab_user.country
                #ab_user.display_tag_filter_strategy
                #ab_user.seen_response_count
                #ab_user.ignored_tags
                #ab_user.reputation
                #ab_user.gravatar
                #ab_user.avatar_type
                ab_user.save()

                for ug in jm_usergroups:
                    if ug.group_id == 13:
                        user.GroupMembership.objects.get_or_create(
                            user=ab_user, group=nordic_group, level=user.GroupMembership.FULL
                        )

            transaction.commit()

            everyone = user.Group.objects.get_global_group()
            admin = User.objects.filter(is_staff=True)[0]

            ed_posts = EfsqtDiscussPosts.objects.using('devzone').filter(parent_id=0)
            count = ed_posts.count()
            message = 'Importing %i threads' % count
            for ed_post in ProgressBar(ed_posts.iterator(), count, message):
                ab_thread = question.Thread()
                ab_thread.id = ed_post.id
                ab_thread.title = ed_post.title
                ab_thread.view_count = ed_post.hits
                ab_thread.last_activity_at = ed_post.modified

                try:
                    author = User.objects.get(id=ed_post.user_id)
                    ab_thread.last_activity_by_id = author.id
                except:
                    if not '@' in ed_post.poster_email:
                        ed_post.poster_email = '*****@*****.**'
                    ab_thread.last_activity_by_id = get_or_create_anonymous_user(admin, ed_post.poster_name, ed_post.poster_email).id

                ab_thread.language_code = LANGUAGE
                ab_thread.closed = ed_post.islock
                ab_thread.closed_at = ed_post.lockdate
                ab_thread.added_at = ed_post.created
                ab_thread.points = ed_post.sum_totalvote
                #ab_thread.favourite_count = 0
                #ab_thread.answer_count = 0
                #ab_thread.followed_by =
                #ab_thread.favourited_by =
                #ab_thread.accepted_answer =
                #ab_thread.answer_accepted_at =
                #ab_thread.tagnames = ', '.join()
                ab_thread.save()
                ab_thread.add_to_groups([everyone])

            transaction.commit()

            ed_posts = EfsqtDiscussPosts.objects.using('devzone').filter(parent_id=0)
            count = ed_posts.count()
            message = 'Importing %i questions' % count
            for ed_post in ProgressBar(ed_posts.iterator(), count, message):
                ab_post = post.Post()
                ab_post.id = ed_post.id
                ab_post.post_type = 'question'
                ab_post.parent_id = None
                ab_post.thread_id = ed_post.id

                try:
                    author = User.objects.get(id=ed_post.user_id)
                    ab_post.author = author
                except:
                    if not '@' in ed_post.poster_email:
                        ed_post.poster_email = '*****@*****.**'
                    ab_post.author = get_or_create_anonymous_user(admin, ed_post.poster_name, ed_post.poster_email)

                ab_post.created_at = ed_post.created
                ab_post.added_at = ed_post.created
                ab_post.locked = ed_post.islock
                ab_post.locked_at = ed_post.lockdate
                ab_post.points = ed_post.sum_totalvote
                ab_post.vote_up_count = ed_post.num_likes
                ab_post.vote_down_count = ed_post.num_negvote
                ab_post.last_edited_at = ed_post.modified
                ab_post.last_edited_by_id = ed_post.user_id or None
                ab_post.text = bbcode2markdown.convert(ed_post.content)
                ab_post.html = ab_post.parse_post_text()['html']
                ab_post.summary = ab_post.get_snippet()
                ab_post.language_code = LANGUAGE
                ab_post.is_anonymous = (ed_post.user_id == 0)
                ab_post.save()
                ab_post.add_to_groups([everyone])

                if not ab_post.revisions.exists():
                    revision = ab_post.add_revision(author=ab_post.author, text=ab_post.text, revised_at=ab_post.last_edited_at)
                    revision.save()

                post_tags = EfsqtDiscussPostsTags.objects.using('devzone').filter(post_id=ab_post.id).values_list('tag_id', flat=True)
                tags = EfsqtDiscussTags.objects.using('devzone').filter(id__in=post_tags).values_list('title', flat=True)
                tagnames = ', '.join(tags)
                ab_post.thread.update_tags(tagnames.lower(), admin)

            transaction.commit()

            ed_posts = EfsqtDiscussPosts.objects.using('devzone').exclude(parent_id=0)
            count = ed_posts.count()
            message = 'Importing %i answers' % count
            for ed_post in ProgressBar(ed_posts.iterator(), count, message):
                ab_post = post.Post()
                ab_post.id = ed_post.id
                ab_post.post_type = 'answer'
                ab_post.parent_id = ed_post.parent_id
                ab_post.thread_id = ed_post.parent_id

                try:
                    author = User.objects.get(id=ed_post.user_id)
                    ab_post.author = author
                except:
                    if not '@' in ed_post.poster_email:
                        ed_post.poster_email = '*****@*****.**'
                    ab_post.author = get_or_create_anonymous_user(admin, ed_post.poster_name, ed_post.poster_email)

                ab_post.created_at = ed_post.created
                ab_post.added_at = ed_post.created
                ab_post.locked = ed_post.islock
                ab_post.locked_at = ed_post.lockdate
                ab_post.points = ed_post.sum_totalvote
                ab_post.vote_up_count = ed_post.num_likes
                ab_post.vote_down_count = ed_post.num_negvote
                ab_post.last_edited_at = ed_post.modified
                ab_post.last_edited_by_id = ed_post.user_id or ab_post.author.id
                ab_post.text = bbcode2markdown.convert(ed_post.content)
                ab_post.html = ab_post.parse_post_text()['html']
                ab_post.summary = ab_post.get_snippet()
                ab_post.language_code = LANGUAGE
                ab_post.is_anonymous = (ed_post.user_id == 0)
                ab_post.save()
                ab_post.add_to_groups([everyone])
                if ed_post.answered:
                    ab_post.thread.accepted_answer_id = ab_post.id
                    ab_post.thread.save()

                if not ab_post.revisions.exists():
                    revision = ab_post.add_revision(author=ab_post.author, text=ab_post.text, revised_at=ab_post.last_edited_at)
                    revision.save()

            transaction.commit()

            ed_comments = EfsqtDiscussComments.objects.using('devzone').all()
            count = ed_comments.count()
            message = 'Importing %i comments' % count
            for ed_comment in ProgressBar(ed_comments.iterator(), count, message):
                ab_post = post.Post()
                ab_post.id = ed_post.id
                ab_post.post_type = 'comment'
                ab_post.parent_id = ed_comment.post_id

                try:
                    ab_post.thread = post.Post.objects.get(id=ed_comment.post_id).thread
                except:
                    pass

                try:
                    author = User.objects.get(id=ed_comment.user_id)
                    ab_post.author = author
                except:
                    if not '@' in ed_comment.email:
                        ed_comment.email = '*****@*****.**'
                    ab_post.author = get_or_create_anonymous_user(admin, ed_comment.name, ed_comment.email)

                ab_post.created_at = ed_comment.created
                ab_post.added_at = ed_comment.created
                ab_post.last_edited_at = ed_comment.modified
                ab_post.text = ed_comment.comment
                ab_post.html = ab_post.parse_post_text()['html']
                ab_post.summary = ab_post.get_snippet()
                ab_post.language_code = LANGUAGE
                ab_post.is_anonymous = (ed_comment.user_id == 0)

                ab_post.save()
                ab_post.add_to_groups([everyone])

                if not ab_post.revisions.exists():
                    revision = ab_post.add_revision(author=ab_post.author, text=ab_post.text, revised_at=ab_post.last_edited_at)
                    revision.save()

            transaction.commit()

            image_exts = ['jpg', 'jepg', 'png', 'gif', 'bmp', 'svg']
            ed_attachments = EfsqtDiscussAttachments.objects.using('devzone').all()
            count = ed_attachments.count()
            message = 'Importing %i post attachments' % count
            for ed_attachment in ProgressBar(ed_attachments.iterator(), count, message):
                try:
                    ab_post = post.Post.objects.get(id=ed_attachment.uid)
                except:
                    continue

                ab_post.text = ab_post.text + '\n\n%s[%s](%s%s/%s)' % (
                    '!' if ed_attachment.title.split('.')[-1] in image_exts else '',
                    ed_attachment.title,
                    reverse('upload'),
                    ed_attachment.path,
                    ed_attachment.title,
                )

                ab_post.html = ab_post.parse_post_text()['html']
                ab_post.save()

            transaction.commit()
            WARNING = '\033[93m'
            ENDC = '\033[0m'
            print WARNING + 'You need to manually copy uploads, keeping directory structure, to <askbot media folder>/uploads/' + ENDC

            ed_conversations = EfsqtDiscussConversations.objects.using('devzone').all()
            count = ed_conversations.count()
            message = 'Importing %i message threads' % count
            for ed_conversation in ProgressBar(ed_conversations.iterator(), count, message):
                thread = Thread()
                thread.id = ed_conversation.id
                thread.save()

            transaction.commit()

            ed_messages = EfsqtDiscussConversationsMessage.objects.using('devzone').all()
            count = ed_messages.count()
            message = 'Importing %i messages' % count
            for ed_message in ProgressBar(ed_messages.iterator(), count, message):
                message = Message()
                message.id = ed_message.id
                message.author_id = ed_message.created_by
                message.body = bbcode2markdown.convert(ed_message.message)
                message.created_at = ed_message.created
                message.save()
                Message.objects.filter(id=message.id).update(created_at=ed_message.created)

            transaction.commit()

            ed_messagemaps = EfsqtDiscussConversationsMessageMaps.objects.using('devzone').all()
            count = ed_messagemaps.count()
            message = 'Importing %i message indices' % count
            for ed_messagemap in ProgressBar(ed_messagemaps.iterator(), count, message):
                message_index = MessageIndex()
                message_index.id = ed_messagemap.id
                message_index.message_id = ed_messagemap.message_id
                message_index.thread_id = ed_messagemap.conversation_id
                message_index.user_id = ed_messagemap.user_id
                message_index.new = (ed_messagemap.isread == 0)
                message_index.created_at = Message.objects.get(id=ed_messagemap.message_id).created_at
                message_index.save()

            transaction.commit()

            message_indices = MessageIndex.objects.order_by('user', 'thread', 'message__created_at')
            count = message_indices.count()
            message = 'Updating %i message index date boundaries' % count
            previous_index = None
            for message_index in ProgressBar(message_indices.iterator(), count, message):
                if previous_index and previous_index.thread_id == message_index.thread_id:
                    next_day = message_index.message.created_at.date() != previous_index.message.created_at.date()
                    MessageIndex.objects.filter(id=message_index.id).update(next_day=next_day)
                previous_index = message_index

            transaction.commit()

            count = ed_conversations.count()
            message = 'Updating %i thread update times' % count
            for ed_conversation in ProgressBar(ed_conversations.iterator(), count, message):
                Thread.objects.filter(id=ed_conversation.id).update(updated_at=ed_conversation.lastreplied)

            transaction.commit()

        except:
            print
            print traceback.format_exc()
            transaction.rollback()
            print 'Exception. Pending transaction rolled back.'
            raise
    def import_private_messages(self):
        from privatemessages.models import Message, Thread, MessageIndex, Settings

        ed_conversations = EfsqtDiscussConversations.objects.using('old-devzone').all()
        count = ed_conversations.count()
        message = 'Importing %i message threads' % count
        for ed_conversation in ProgressBar(ed_conversations.iterator(), count, message):
            thread = Thread()
            thread.id = ed_conversation.id
            thread.save()

        transaction.commit()

        ed_messages = EfsqtDiscussConversationsMessage.objects.using('old-devzone').all()
        count = ed_messages.count()
        message = 'Importing %i messages' % count
        for ed_message in ProgressBar(ed_messages.iterator(), count, message):
            message = Message()
            message.id = ed_message.id
            message.author_id = ed_message.created_by
            message.created_at = ed_message.created
            message.body = bbcode2markdown.convert(ed_message.message)
            message.created_at = ed_message.created
            message.save()
            Message.objects.filter(id=message.id).update(created_at=ed_message.created)

        transaction.commit()

        ed_messagemaps = EfsqtDiscussConversationsMessageMaps.objects.using('old-devzone').all()
        count = ed_messagemaps.count()
        message = 'Importing %i message indices' % count
        for ed_messagemap in ProgressBar(ed_messagemaps.iterator(), count, message):
            message_index = MessageIndex()
            message_index.id = ed_messagemap.id
            message_index.message_id = ed_messagemap.message_id
            message_index.thread_id = ed_messagemap.conversation_id
            message_index.user_id = ed_messagemap.user_id
            message_index.new = (ed_messagemap.isread == 0)
            message_index.created_at = Message.objects.get(id=ed_messagemap.message_id).created_at
            message_index.save(bulk_save=True)

        transaction.commit()

        message_indices = MessageIndex.objects.order_by('user', 'thread', 'message__created_at')
        count = message_indices.count()
        message = 'Updating %i message index date boundaries' % count
        previous_index = None
        for message_index in ProgressBar(message_indices.iterator(), count, message):
            if previous_index and previous_index.thread_id == message_index.thread_id:
                next_day = message_index.message.created_at.date() != previous_index.message.created_at.date()
                MessageIndex.objects.filter(id=message_index.id).update(next_day=next_day)
            previous_index = message_index

        transaction.commit()

        count = ed_conversations.count()
        message = 'Updating %i thread update times' % count
        for ed_conversation in ProgressBar(ed_conversations.iterator(), count, message):
            Thread.objects.filter(id=ed_conversation.id).update(updated_at=ed_conversation.lastreplied)

        transaction.commit()