import re import urllib.parse import httplib2 from django.core.management import BaseCommand from boards.models import GlobalId __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]) data = {'xml': xml} body = urllib.parse.urlencode(data) h = httplib2.Http() response, content = h.request(url, method="POST", body=body) # TODO Parse content and get the model list print(content) else: raise Exception('Invalid global ID') else: raise Exception('Full sync is not supported yet.')