##// END OF EJS Templates
New backend for fav threads. Now only last post ids are saved, no thread ids
New backend for fav threads. Now only last post ids are saved, no thread ids

File last commit:

r1846:3bc31272 default
r2044:227641ed default
Show More
sync.py
83 lines | 2.1 KiB | text/x-python | PythonLexer
import logging
import xml.etree.ElementTree as et
from django.http import HttpResponse, Http404
from boards.abstracts.sync_filters import ThreadFilter, TagsFilter,\
TimestampFromFilter,\
TAG_THREAD, TAG_TAGS, TAG_TIME_FROM
from boards.models import GlobalId, Post
from boards.models.post.sync import SyncManager
logger = logging.getLogger('boards.sync')
FILTERS = {
TAG_THREAD: ThreadFilter,
TAG_TAGS: TagsFilter,
TAG_TIME_FROM: TimestampFromFilter,
}
def response_list(request):
request_xml = request.body
filters = []
if request_xml is None or len(request_xml) == 0:
return HttpResponse(content='Use the API')
else:
root_tag = et.fromstring(request_xml)
model_tag = root_tag[0]
for tag_filter in model_tag:
filter_name = tag_filter.tag
model_filter = FILTERS.get(filter_name)
if not model_filter:
logger.warning('Unavailable filter: {}'.format(filter_name))
filters.append(model_filter(tag_filter))
response_xml = SyncManager.generate_response_list(filters)
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 or len(request_xml) == 0:
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])
return HttpResponse(
content_type='text/xml; charset=utf-8',
content=xml_str,
)