def request_handler(request): """ HTTP Request handler function to handle actions on collections """ if not request.user.is_authenticated(): return HttpResponse(Response.error(None, 'User must be logged in')) mode = request.GET.get('mode', '') reply_xml = None logger.info('request_handler: Received Request: (%s)' % mode) if mode == 'get-collection-list': reply_xml = Collection.list() elif mode == 'load-collection': metadata = request.GET.get('metadata', '') reply_xml = Collection.load(request.user.username, metadata) if reply_xml is None: return HttpResponse(Response.error(mode, 'Failed')) if isinstance(reply_xml, str): return HttpResponse(Response.success(mode, reply_xml)) elif mode == 'add-collection': metadata = request.GET.get('metadata', '') payload = request.GET.get('payload', '') logger.debug('metadata: ' + metadata) logger.debug('payload: ' + payload) if not Collection.add(metadata, payload): return HttpResponse(Response.error(mode, 'Failed')) reply_xml = Collection.list() mode = 'get-collection-list' elif mode == 'delete-collection': metadata = request.GET.get('metadata', '') if not Collection.remove(metadata): return HttpResponse(Response.error(mode, 'Failed')) reply_xml = Collection.list() mode = 'get-collection-list' elif mode == 'rpc': req = request.GET.get('payload', '') reply_xml = Adapter.gen_rpc(request.user.username, req) if isinstance(reply_xml, str): return HttpResponse(Response.success(mode, reply_xml)) elif mode == 'gen-script': req = request.GET.get('payload', '') reply_xml = Adapter.gen_script(request.user.username, req) if isinstance(reply_xml, str): return HttpResponse(Response.success(mode, reply_xml)) elif mode in ['get-cap', 'run-rpc', 'run-edit-commit', 'run-commit']: payload = request.GET.get('payload', '') logger.debug('run: ' + payload) reply_xml = Adapter.run_request(request.user.username, payload) return HttpResponse(Response.success(mode, 'ok', reply_xml))
def load(username, metadata): """ Load a collection entry """ if metadata is None or metadata == '': logging.error('Invalid metadata') return None metadata = ET.fromstring(metadata) cname = metadata.find('collection').text name = metadata.find('name').text if not Col.objects.filter(name=cname).exists(): logging.debug('Collection %s does not exists !!' % cname) return None _file = os.path.join('data', 'collections', cname, name + '.xml') if not os.path.exists(_file): logging.error('Collection entry not found') return None data = None with open(_file, 'r') as f: data = f.read() data = data.replace('>','>') data = data.replace('<','<') payload = ET.fromstring(data) if data is None: logging.error('Collection entry is empty') return None fmt = payload.get('format', 'raw') if fmt == 'xpath': return Adapter.gen_rpc(username, data) return payload