sync.py
48 lines
| 1.3 KiB
| text/x-python
|
PythonLexer
neko259
|
r836 | import xml.etree.ElementTree as et | |
neko259
|
r837 | from django.http import HttpResponse, Http404 | |
neko259
|
r836 | from boards.models import GlobalId, Post | |
neko259
|
r810 | def respond_pull(request): | |
pass | |||
def respond_get(request): | |||
neko259
|
r836 | """ | |
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.POST['xml'] | |||
posts = [] | |||
root_tag = et.fromstring(request_xml) | |||
model_tag = root_tag[0] | |||
for id_tag in model_tag: | |||
try: | |||
global_id = GlobalId.from_xml_element(id_tag, existing=True) | |||
posts += Post.objects.filter(global_id=global_id) | |||
except GlobalId.DoesNotExist: | |||
# This is normal. If we don't have such GlobalId in the system, | |||
# just ignore this ID and proceed to the next one. | |||
pass | |||
response_xml = Post.objects.generate_response_get(posts) | |||
neko259
|
r837 | 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() | |||
content = 'Global ID: %s\n\nXML: %s' \ | |||
% (post.global_id, Post.objects.generate_response_get([post])) | |||
return HttpResponse( | |||
content_type='text/plain', | |||
content=content, | |||
) |