Renamed the plugin to 'batch' which is a better name than bulk. Added the example to the docs, put a header on it, and removed the changes to internal.py
From 737a11522e10c71f463c430931014140f90d4e11 Mon Sep 17 00:00:00 2001
From: Adam Young <ayo...@redhat.com>
Date: Fri, 22 Oct 2010 15:08:29 -0400
Subject: [PATCH] batch

Allows the user to send multiple commands bundled together
---
 ipalib/plugins/batch.py |   86 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 86 insertions(+), 0 deletions(-)
 create mode 100644 ipalib/plugins/batch.py

diff --git a/ipalib/plugins/batch.py b/ipalib/plugins/batch.py
new file mode 100644
index 0000000..1d858ab
--- /dev/null
+++ b/ipalib/plugins/batch.py
@@ -0,0 +1,86 @@
+# Authors:
+#   Adam Young <ayo...@redhat.com>
+#   Rob Critten <rcrit...@redhat.com>
+#
+# Copyright (c) 2010  Red Hat
+# See file 'copying' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the gnu general public license as
+# published by the free software foundation; version 2 only
+#
+# This program is distributed in the hope that it will be useful,
+# but without any warranty; without even the implied warranty of
+# merchantability or fitness for a particular purpose.  See the
+# gnu general public license for more details.
+#
+# You should have received a copy of the gnu general public license
+# along with this program; if not, write to the Free Software
+# Foundation, inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""
+Plugin to make multiple ipa calls via one remote procedure call
+
+To run this code in the lite-server
+
+curl   -H "Content-Type:application/json"          -H "Acept:applicaton/json" -H "Accept-Language:en"        --negotiate -u :          --cacert /etc/ipa/ca.crt           -d  @batch_request.json -X POST       http://localhost:8888/ipa/json
+
+where the contenst of the file batch_request.json follow the below example
+
+{"method":"batch","params":[[
+        {"method":"group_find","params":[[],{}]},
+        {"method":"user_find","params":[[],{"whoami":"true","all":"true"}]},
+        {"method":"user_show","params":[["admin"],{"all":true}]}
+        ],{}],"id":1}
+
+THe format of the response is nested the same way.  At the top you will see
+  "error": null,
+    "id": 1,
+    "result": {
+        "count": 3,
+            "results": [
+
+
+And then a nested response for each IPA command method sent in the request
+
+"""
+
+from ipalib import api, errors
+from ipalib import Command
+from ipalib import Str, List
+from ipalib.output import Output
+from ipalib import output
+from ipalib.text import _
+
+class batch(Command):
+    INTERNAL = True
+
+    takes_args = (
+        List('methods?',
+             doc=_('Nested Methods to execute'),
+             ),
+        )
+
+    has_output = (
+        Output('count', int, doc=_('')),
+        Output('results', list, doc=_(''))
+    )
+
+    def execute(self, *args, **options):
+        results=[]
+        for arg in args[0]:
+            try:
+                a = arg['params'][0]
+                kw = arg['params'][1]
+                newkw = {}
+                for k in kw:
+                    newkw[str(k)] = kw[k]
+                result = api.Command[arg['method']](*a, **newkw)
+                result['error']=None
+            except Exception, e:
+                result = dict()
+                result['error'] = unicode(e)
+            results.append(result)
+        return dict(count=len(results) , results=results)
+
+api.register(batch)
-- 
1.7.1

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to