import xml.etree.ElementTree as et import xml.dom.minidom from django.http import HttpResponse, Http404 from boards.models import GlobalId, Post from boards.models.post.sync import SyncManager def response_pull(request): request_xml = request.body if request_xml is None: return HttpResponse(content='Use the API') response_xml = SyncManager.generate_response_pull() return HttpResponse(content=response_xml) def response_get(request): """ Processes a GET request with post ID list and returns the posts XML list. Request should contain an 'xml' post attribute with the actual request XML. """ request_xml = request.body if request_xml is None: return HttpResponse(content='Use the API') posts = [] root_tag = et.fromstring(request_xml) model_tag = root_tag[0] for id_tag in model_tag: global_id, exists = GlobalId.from_xml_element(id_tag) if exists: posts.append(Post.objects.get(global_id=global_id)) response_xml = SyncManager.generate_response_get(posts) return HttpResponse(content=response_xml) def get_post_sync_data(request, post_id): try: post = Post.objects.get(id=post_id) except Post.DoesNotExist: raise Http404() xml_str = SyncManager.generate_response_get([post]) xml_repr = xml.dom.minidom.parseString(xml_str) xml_repr = xml_repr.toprettyxml() content = '=Global ID=\n%s\n\n=XML=\n%s' \ % (post.global_id, xml_repr) return HttpResponse( content_type='text/plain; charset=utf-8', content=content, )