import re import urllib.parse import httplib2 import xml.etree.ElementTree as ET from django.core.management import BaseCommand from boards.models import GlobalId from boards.models.post.sync import SyncManager __author__ = 'neko259' REGEX_GLOBAL_ID = re.compile(r'(\w+)::([\w\+/]+)::(\d+)') class Command(BaseCommand): help = 'Send a sync or get request to the server.' + \ 'sync_with_server [post_global_id]' def add_arguments(self, parser): parser.add_argument('url', type=str) parser.add_argument('global_id', type=str) def handle(self, *args, **options): url = options.get('url') global_id_str = options.get('global_id') if global_id_str: match = REGEX_GLOBAL_ID.match(global_id_str) if match: key_type = match.group(1) key = match.group(2) local_id = match.group(3) global_id = GlobalId(key_type=key_type, key=key, local_id=local_id) xml = GlobalId.objects.generate_request_get([global_id]) # body = urllib.parse.urlencode(data) h = httplib2.Http() response, content = h.request(url, method="POST", body=xml) SyncManager.parse_response_get(content) else: raise Exception('Invalid global ID') else: h = httplib2.Http() response, content = h.request(url, method="POST") print(content) root = ET.fromstring(content) status = root.findall('status')[0].text if status == 'success': models = root.findall('models')[0] for model in models: model_content = model[0] print(model_content.findall('text')[0].text) else: raise Exception('Invalid response status')