##// END OF EJS Templates
Merged with default branch
Merged with default branch

File last commit:

r1144:a82e4e4d decentral
r1174:11cdaca3 merge decentral
Show More
sync_with_server.py
61 lines | 2.0 KiB | text/x-python | PythonLexer
import re
import urllib.parse
import httplib2
import xml.etree.ElementTree as ET
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 <server_url> [post_global_id]'
def add_arguments(self, parser):
parser.add_argument('url', type=str)
#parser.add_argument('global_id', type=str) # TODO Implement this
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:
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')