# HG changeset patch # User neko259 # Date 2014-08-21 14:16:30 # Node ID 5301b1d8d79c9ecc4023634ab0d79d93da3e3237 # Parent b99c5139afbacd6dca5ef5282ba2d9685247011a Added next id list, previous id list and thread to the post XML output diff --git a/boards/models/post.py b/boards/models/post.py --- a/boards/models/post.py +++ b/boards/models/post.py @@ -52,6 +52,8 @@ TAG_TEXT = 'text' TAG_THREAD = 'thread' TAG_PUB_TIME = 'pub-time' TAG_EDIT_TIME = 'edit-time' +TAG_PREVIOUS = 'previous' +TAG_NEXT = 'next' TYPE_GET = 'get' @@ -110,8 +112,8 @@ class PostManager(models.Manager): Thread.objects.process_oldest_threads() self.connect_replies(post) - logger.info('Created post #%d with title %s' % (post.id, - post.get_title())) + logger.info('Created post #%d with title %s and key %s' + % (post.id, post.get_title(), post.global_id.key)) return post @@ -148,9 +150,8 @@ class PostManager(models.Manager): Connects replies to a post to show them as a reflink map """ - for reply_number in re.finditer(REGEX_REPLY, post.text.raw): - post_id = reply_number.group(1) - ref_post = self.filter(id=post_id) + for reply_number in post.get_replied_ids(): + ref_post = self.filter(id=reply_number) if ref_post.count() > 0: referenced_post = ref_post[0] referenced_post.referenced_posts.add(post) @@ -235,7 +236,7 @@ class PostManager(models.Manager): if not post.is_opening(): thread = et.SubElement(model, TAG_THREAD) - thread.text = post.get_opening_post_id() + thread.text = str(post.get_thread().get_opening_post_id()) pub_time = et.SubElement(model, TAG_PUB_TIME) pub_time.text = str(post.get_pub_time_epoch()) @@ -243,6 +244,22 @@ class PostManager(models.Manager): edit_time = et.SubElement(model, TAG_EDIT_TIME) edit_time.text = str(post.get_edit_time_epoch()) + previous_ids = post.get_replied_ids() + if len(previous_ids) > 0: + previous = et.SubElement(model, TAG_PREVIOUS) + for id in previous_ids: + prev_id = et.SubElement(previous, TAG_ID) + replied_post = Post.objects.get(id=id) + replied_post.global_id.to_xml_element(prev_id) + + + next_ids = post.referenced_posts.order_by('id').all() + if len(next_ids) > 0: + next_el = et.SubElement(model, TAG_NEXT) + for ref_post in next_ids: + next_id = et.SubElement(next_el, TAG_ID) + ref_post.global_id.to_xml_element(next_id) + return et.tostring(response, 'unicode') @@ -435,6 +452,9 @@ class Post(models.Model, Viewable): """ self.images.all().delete() + self.signature.all().delete() + if self.global_id: + self.global_id.delete() super(Post, self).delete(using) @@ -455,6 +475,7 @@ class Post(models.Model, Viewable): global_id = GlobalId(key_type=key.key_type, key=key.public_key, local_id = self.id) + global_id.save() self.global_id = global_id @@ -465,3 +486,6 @@ class Post(models.Model, Viewable): def get_edit_time_epoch(self): return utils.datetime_to_epoch(self.last_edit_time) + + def get_replied_ids(self): + return re.findall(REGEX_REPLY, self.text.raw) diff --git a/boards/tests/test_keys.py b/boards/tests/test_keys.py --- a/boards/tests/test_keys.py +++ b/boards/tests/test_keys.py @@ -51,24 +51,41 @@ class KeyTest(TestCase): def test_response_get(self): post = self._create_post_with_key() + reply_post = Post.objects.create_post(title='test_title', + text='[post]%d[/post]' % post.id, thread=post.get_thread()) + reply_reply_post = Post.objects.create_post(title='', + text='[post]%d[/post]' % reply_post.id, + thread=post.get_thread()) - response = Post.objects.generate_response_get([post]) + response = Post.objects.generate_response_get([reply_post]) logger.debug(response) self.assertTrue('' 'success' '' '' - '' + '' 'test_title' - 'test_text' + '[post]%d[/post]' + '%d' '%s' '%s' + '' + '' + '' + '' + '' + '' '' '' '' % ( - str(post.get_edit_time_epoch()), - str(post.get_pub_time_epoch()) + reply_post.id, + post.id, + post.id, + str(reply_post.get_edit_time_epoch()), + str(reply_post.get_pub_time_epoch()), + post.id, + reply_reply_post.id, ) in response, 'Wrong XML generated for the GET response.')