summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoramita singh <amitacr@gmail.com>2012-06-06 16:02:54 +0530
committeramita singh <amitacr@gmail.com>2012-06-06 16:02:54 +0530
commitf2b5e44148129add4f3d8d2ca14f6412fb84de04 (patch)
tree2b3f78ef41c88a66984e5ebd430c8427c51affbd
parent25a00deee21e5693bca8d158bd1df77dd9063f16 (diff)
parenta1cd248231180ba82206c6a456345834b519a889 (diff)
downloadgnowsys-f2b5e44148129add4f3d8d2ca14f6412fb84de04.tar.gz
dump_all_rdf.py dumps the rdf of all the objects in one file and fstore_rdf_import imports the rdf to the 4store
-rw-r--r--README.rst8
-rw-r--r--demo/initial_data.json1
-rw-r--r--demo/urls.py3
-rw-r--r--gstudio/fstore_rdf_import.py187
-rw-r--r--gstudio/models.py71
-rw-r--r--gstudio/templates/gstudio/skeleton.html194
-rw-r--r--gstudio/xmlrpc/__init__.py59
-rw-r--r--gstudio/xmlrpc/decorators.py175
-rw-r--r--gstudio/xmlrpc/dispatcher.py78
-rw-r--r--gstudio/xmlrpc/metaweblog.py484
-rw-r--r--gstudio/xmlrpc/rpc/.gitignore16
-rw-r--r--gstudio/xmlrpc/rpc/LICENSE24
-rw-r--r--gstudio/xmlrpc/rpc/MANIFEST.in3
-rw-r--r--gstudio/xmlrpc/rpc/README.rst36
-rw-r--r--gstudio/xmlrpc/rpc/__init__.py44
-rw-r--r--gstudio/xmlrpc/rpc/decorators.py175
-rw-r--r--gstudio/xmlrpc/rpc/dispatcher.py76
-rw-r--r--gstudio/xmlrpc/rpc/locale/fr/LC_MESSAGES/django.mobin0 -> 1030 bytes
-rw-r--r--gstudio/xmlrpc/rpc/locale/fr/LC_MESSAGES/django.po49
-rw-r--r--gstudio/xmlrpc/rpc/setup.py31
-rw-r--r--gstudio/xmlrpc/rpc/templates/xmlrpc_get.html26
-rw-r--r--gstudio/xmlrpc/rpc/views.py20
-rw-r--r--gstudio/xmlrpc/views.py193
-rw-r--r--majorproj/gnowsys-studio/gstudio/templates/gstudio/base.html110
-rw-r--r--objectapp/models.py55
-rw-r--r--objectapp/templates/objectapp/skeleton.html171
-rw-r--r--setup.py6
27 files changed, 2036 insertions, 259 deletions
diff --git a/README.rst b/README.rst
index 0c6e429..742b120 100644
--- a/README.rst
+++ b/README.rst
@@ -54,10 +54,10 @@ To define binary relations (object properties) between classes and objects. e.g
* Attribute Specification
- To specify an attribute by a subject to say for example:
- population of India, color of a flower etc. These do not yeild a
- proposition but an expression, which can be used as a subject in
- another sentence.
+ To specify an attribute by a subject to say for example: population
+ of India, color of a flower etc. These do not yeild a proposition
+ but an expression, which can be used as a subject in another
+ sentence.
* Expression
diff --git a/demo/initial_data.json b/demo/initial_data.json
new file mode 100644
index 0000000..35eee68
--- /dev/null
+++ b/demo/initial_data.json
@@ -0,0 +1 @@
+[{"pk": 44, "model": "contenttypes.contenttype", "fields": {"model": "nodespecification", "name": "Node specification", "app_label": "gstudio"}}, {"pk": 62, "model": "contenttypes.contenttype", "fields": {"model": "arrowvisual", "name": "arrow visual", "app_label": "graphviz"}}, {"pk": 20, "model": "contenttypes.contenttype", "fields": {"model": "attribute", "name": "attribute", "app_label": "gstudio"}}, {"pk": 25, "model": "contenttypes.contenttype", "fields": {"model": "attributebigintegerfield", "name": "attribute big integer field", "app_label": "gstudio"}}, {"pk": 29, "model": "contenttypes.contenttype", "fields": {"model": "attributebooleanfield", "name": "attribute boolean field", "app_label": "gstudio"}}, {"pk": 21, "model": "contenttypes.contenttype", "fields": {"model": "attributecharfield", "name": "attribute char field", "app_label": "gstudio"}}, {"pk": 24, "model": "contenttypes.contenttype", "fields": {"model": "attributecommaseparatedintegerfield", "name": "attribute comma separated integer field", "app_label": "gstudio"}}, {"pk": 31, "model": "contenttypes.contenttype", "fields": {"model": "attributedatefield", "name": "attribute date field", "app_label": "gstudio"}}, {"pk": 32, "model": "contenttypes.contenttype", "fields": {"model": "attributedatetimefield", "name": "attribute date time field", "app_label": "gstudio"}}, {"pk": 27, "model": "contenttypes.contenttype", "fields": {"model": "attributedecimalfield", "name": "attribute decimal field", "app_label": "gstudio"}}, {"pk": 34, "model": "contenttypes.contenttype", "fields": {"model": "attributeemailfield", "name": "attribute email field", "app_label": "gstudio"}}, {"pk": 35, "model": "contenttypes.contenttype", "fields": {"model": "attributefilefield", "name": "attribute file field", "app_label": "gstudio"}}, {"pk": 36, "model": "contenttypes.contenttype", "fields": {"model": "attributefilepathfield", "name": "attribute file path field", "app_label": "gstudio"}}, {"pk": 28, "model": "contenttypes.contenttype", "fields": {"model": "attributefloatfield", "name": "attribute float field", "app_label": "gstudio"}}, {"pk": 37, "model": "contenttypes.contenttype", "fields": {"model": "attributeimagefield", "name": "attribute image field", "app_label": "gstudio"}}, {"pk": 23, "model": "contenttypes.contenttype", "fields": {"model": "attributeintegerfield", "name": "attribute integer field", "app_label": "gstudio"}}, {"pk": 39, "model": "contenttypes.contenttype", "fields": {"model": "attributeipaddressfield", "name": "attribute ip address field", "app_label": "gstudio"}}, {"pk": 30, "model": "contenttypes.contenttype", "fields": {"model": "attributenullbooleanfield", "name": "attribute null boolean field", "app_label": "gstudio"}}, {"pk": 26, "model": "contenttypes.contenttype", "fields": {"model": "attributepositiveintegerfield", "name": "attribute positive integer field", "app_label": "gstudio"}}, {"pk": 42, "model": "contenttypes.contenttype", "fields": {"model": "attributespecification", "name": "attribute specification", "app_label": "gstudio"}}, {"pk": 22, "model": "contenttypes.contenttype", "fields": {"model": "attributetextfield", "name": "attribute text field", "app_label": "gstudio"}}, {"pk": 33, "model": "contenttypes.contenttype", "fields": {"model": "attributetimefield", "name": "attribute time field", "app_label": "gstudio"}}, {"pk": 18, "model": "contenttypes.contenttype", "fields": {"model": "attributetype", "name": "attribute type", "app_label": "gstudio"}}, {"pk": 38, "model": "contenttypes.contenttype", "fields": {"model": "attributeurlfield", "name": "attribute url field", "app_label": "gstudio"}}, {"pk": 50, "model": "contenttypes.contenttype", "fields": {"model": "author", "name": "author", "app_label": "gstudio"}}, {"pk": 63, "model": "contenttypes.contenttype", "fields": {"model": "cacheimage", "name": "cache image", "app_label": "graphviz"}}, {"pk": 4, "model": "contenttypes.contenttype", "fields": {"model": "comment", "name": "comment", "app_label": "comments"}}, {"pk": 5, "model": "contenttypes.contenttype", "fields": {"model": "commentflag", "name": "comment flag", "app_label": "comments"}}, {"pk": 47, "model": "contenttypes.contenttype", "fields": {"model": "complement", "name": "complement", "app_label": "gstudio"}}, {"pk": 6, "model": "contenttypes.contenttype", "fields": {"model": "contenttype", "name": "content type", "app_label": "contenttypes"}}, {"pk": 13, "model": "contenttypes.contenttype", "fields": {"model": "edge", "name": "edge", "app_label": "gstudio"}}, {"pk": 45, "model": "contenttypes.contenttype", "fields": {"model": "expression", "name": "expression", "app_label": "gstudio"}}, {"pk": 60, "model": "contenttypes.contenttype", "fields": {"model": "graph", "name": "graph", "app_label": "graphviz"}}, {"pk": 2, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "auth"}}, {"pk": 58, "model": "contenttypes.contenttype", "fields": {"model": "ignoredobject", "name": "ignored object", "app_label": "djangoratings"}}, {"pk": 48, "model": "contenttypes.contenttype", "fields": {"model": "intersection", "name": "intersection", "app_label": "gstudio"}}, {"pk": 54, "model": "contenttypes.contenttype", "fields": {"model": "logentry", "name": "log entry", "app_label": "admin"}}, {"pk": 14, "model": "contenttypes.contenttype", "fields": {"model": "metatype", "name": "metatype", "app_label": "gstudio"}}, {"pk": 11, "model": "contenttypes.contenttype", "fields": {"model": "nid", "name": "nid", "app_label": "gstudio"}}, {"pk": 12, "model": "contenttypes.contenttype", "fields": {"model": "node", "name": "node", "app_label": "gstudio"}}, {"pk": 15, "model": "contenttypes.contenttype", "fields": {"model": "nodetype", "name": "node type", "app_label": "gstudio"}}, {"pk": 61, "model": "contenttypes.contenttype", "fields": {"model": "nodevisual", "name": "node visual", "app_label": "graphviz"}}, {"pk": 51, "model": "contenttypes.contenttype", "fields": {"model": "gbobject", "name": "object", "app_label": "objectapp"}}, {"pk": 16, "model": "contenttypes.contenttype", "fields": {"model": "objecttype", "name": "object type", "app_label": "gstudio"}}, {"pk": 49, "model": "contenttypes.contenttype", "fields": {"model": "peer", "name": "peer", "app_label": "gstudio"}}, {"pk": 1, "model": "contenttypes.contenttype", "fields": {"model": "permission", "name": "permission", "app_label": "auth"}}, {"pk": 52, "model": "contenttypes.contenttype", "fields": {"model": "process", "name": "process", "app_label": "objectapp"}}, {"pk": 40, "model": "contenttypes.contenttype", "fields": {"model": "processtype", "name": "process type", "app_label": "gstudio"}}, {"pk": 59, "model": "contenttypes.contenttype", "fields": {"model": "registrationprofile", "name": "registration profile", "app_label": "registration"}}, {"pk": 19, "model": "contenttypes.contenttype", "fields": {"model": "relation", "name": "relation", "app_label": "gstudio"}}, {"pk": 43, "model": "contenttypes.contenttype", "fields": {"model": "relationspecification", "name": "relation specification", "app_label": "gstudio"}}, {"pk": 17, "model": "contenttypes.contenttype", "fields": {"model": "relationtype", "name": "relation type", "app_label": "gstudio"}}, {"pk": 56, "model": "contenttypes.contenttype", "fields": {"model": "score", "name": "score", "app_label": "djangoratings"}}, {"pk": 7, "model": "contenttypes.contenttype", "fields": {"model": "session", "name": "session", "app_label": "sessions"}}, {"pk": 57, "model": "contenttypes.contenttype", "fields": {"model": "similaruser", "name": "similar user", "app_label": "djangoratings"}}, {"pk": 8, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "sites"}}, {"pk": 53, "model": "contenttypes.contenttype", "fields": {"model": "system", "name": "system", "app_label": "objectapp"}}, {"pk": 41, "model": "contenttypes.contenttype", "fields": {"model": "systemtype", "name": "system type", "app_label": "gstudio"}}, {"pk": 9, "model": "contenttypes.contenttype", "fields": {"model": "tag", "name": "tag", "app_label": "tagging"}}, {"pk": 10, "model": "contenttypes.contenttype", "fields": {"model": "taggeditem", "name": "tagged item", "app_label": "tagging"}}, {"pk": 46, "model": "contenttypes.contenttype", "fields": {"model": "union", "name": "union", "app_label": "gstudio"}}, {"pk": 3, "model": "contenttypes.contenttype", "fields": {"model": "user", "name": "user", "app_label": "auth"}}, {"pk": 55, "model": "contenttypes.contenttype", "fields": {"model": "vote", "name": "vote", "app_label": "djangoratings"}}, {"pk": "857888a9f2aaefebc4099f683932361a", "model": "sessions.session", "fields": {"expire_date": "2012-06-01T02:34:30.271", "session_data": "N2E5ODhiMTY0M2E1ZDUxNDMwYmZmYjhhNWE5ZGVhNTU2M2M1ZTQ0MTqAAn1xAShVEl9hdXRoX3Vz\nZXJfYmFja2VuZHECVSlkamFuZ28uY29udHJpYi5hdXRoLmJhY2tlbmRzLk1vZGVsQmFja2VuZHED\nVQ1fYXV0aF91c2VyX2lkcQRLAXUu\n"}}, {"pk": 1, "model": "sites.site", "fields": {"domain": "example.com", "name": "example.com"}}, {"pk": 189, "model": "auth.permission", "fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 54}}, {"pk": 190, "model": "auth.permission", "fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 54}}, {"pk": 191, "model": "auth.permission", "fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 54}}, {"pk": 1, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}}, {"pk": 4, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}}, {"pk": 7, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}}, {"pk": 2, "model": "auth.permission", "fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}}, {"pk": 5, "model": "auth.permission", "fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}}, {"pk": 8, "model": "auth.permission", "fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}}, {"pk": 55, "model": "auth.permission", "fields": {"codename": "add_author", "name": "Can add author", "content_type": 3}}, {"pk": 3, "model": "auth.permission", "fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}}, {"pk": 95, "model": "auth.permission", "fields": {"codename": "change_author", "name": "Can change author", "content_type": 3}}, {"pk": 6, "model": "auth.permission", "fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}}, {"pk": 147, "model": "auth.permission", "fields": {"codename": "delete_author", "name": "Can delete author", "content_type": 3}}, {"pk": 9, "model": "auth.permission", "fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}}, {"pk": 10, "model": "auth.permission", "fields": {"codename": "add_comment", "name": "Can add comment", "content_type": 4}}, {"pk": 16, "model": "auth.permission", "fields": {"codename": "can_moderate", "name": "Can moderate comments", "content_type": 4}}, {"pk": 12, "model": "auth.permission", "fields": {"codename": "change_comment", "name": "Can change comment", "content_type": 4}}, {"pk": 14, "model": "auth.permission", "fields": {"codename": "delete_comment", "name": "Can delete comment", "content_type": 4}}, {"pk": 11, "model": "auth.permission", "fields": {"codename": "add_commentflag", "name": "Can add comment flag", "content_type": 5}}, {"pk": 13, "model": "auth.permission", "fields": {"codename": "change_commentflag", "name": "Can change comment flag", "content_type": 5}}, {"pk": 15, "model": "auth.permission", "fields": {"codename": "delete_commentflag", "name": "Can delete comment flag", "content_type": 5}}, {"pk": 17, "model": "auth.permission", "fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 6}}, {"pk": 18, "model": "auth.permission", "fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 6}}, {"pk": 19, "model": "auth.permission", "fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 6}}, {"pk": 192, "model": "auth.permission", "fields": {"codename": "add_ignoredobject", "name": "Can add ignored object", "content_type": 58}}, {"pk": 196, "model": "auth.permission", "fields": {"codename": "change_ignoredobject", "name": "Can change ignored object", "content_type": 58}}, {"pk": 200, "model": "auth.permission", "fields": {"codename": "delete_ignoredobject", "name": "Can delete ignored object", "content_type": 58}}, {"pk": 193, "model": "auth.permission", "fields": {"codename": "add_score", "name": "Can add score", "content_type": 56}}, {"pk": 197, "model": "auth.permission", "fields": {"codename": "change_score", "name": "Can change score", "content_type": 56}}, {"pk": 201, "model": "auth.permission", "fields": {"codename": "delete_score", "name": "Can delete score", "content_type": 56}}, {"pk": 194, "model": "auth.permission", "fields": {"codename": "add_similaruser", "name": "Can add similar user", "content_type": 57}}, {"pk": 198, "model": "auth.permission", "fields": {"codename": "change_similaruser", "name": "Can change similar user", "content_type": 57}}, {"pk": 202, "model": "auth.permission", "fields": {"codename": "delete_similaruser", "name": "Can delete similar user", "content_type": 57}}, {"pk": 195, "model": "auth.permission", "fields": {"codename": "add_vote", "name": "Can add vote", "content_type": 55}}, {"pk": 199, "model": "auth.permission", "fields": {"codename": "change_vote", "name": "Can change vote", "content_type": 55}}, {"pk": 203, "model": "auth.permission", "fields": {"codename": "delete_vote", "name": "Can delete vote", "content_type": 55}}, {"pk": 207, "model": "auth.permission", "fields": {"codename": "add_arrowvisual", "name": "Can add arrow visual", "content_type": 62}}, {"pk": 211, "model": "auth.permission", "fields": {"codename": "change_arrowvisual", "name": "Can change arrow visual", "content_type": 62}}, {"pk": 215, "model": "auth.permission", "fields": {"codename": "delete_arrowvisual", "name": "Can delete arrow visual", "content_type": 62}}, {"pk": 208, "model": "auth.permission", "fields": {"codename": "add_cacheimage", "name": "Can add cache image", "content_type": 63}}, {"pk": 212, "model": "auth.permission", "fields": {"codename": "change_cacheimage", "name": "Can change cache image", "content_type": 63}}, {"pk": 216, "model": "auth.permission", "fields": {"codename": "delete_cacheimage", "name": "Can delete cache image", "content_type": 63}}, {"pk": 209, "model": "auth.permission", "fields": {"codename": "add_graph", "name": "Can add graph", "content_type": 60}}, {"pk": 213, "model": "auth.permission", "fields": {"codename": "change_graph", "name": "Can change graph", "content_type": 60}}, {"pk": 217, "model": "auth.permission", "fields": {"codename": "delete_graph", "name": "Can delete graph", "content_type": 60}}, {"pk": 210, "model": "auth.permission", "fields": {"codename": "add_nodevisual", "name": "Can add node visual", "content_type": 61}}, {"pk": 214, "model": "auth.permission", "fields": {"codename": "change_nodevisual", "name": "Can change node visual", "content_type": 61}}, {"pk": 218, "model": "auth.permission", "fields": {"codename": "delete_nodevisual", "name": "Can delete node visual", "content_type": 61}}, {"pk": 33, "model": "auth.permission", "fields": {"codename": "add_attribute", "name": "Can add attribute", "content_type": 20}}, {"pk": 101, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 20}}, {"pk": 169, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 20}}, {"pk": 73, "model": "auth.permission", "fields": {"codename": "change_attribute", "name": "Can change attribute", "content_type": 20}}, {"pk": 125, "model": "auth.permission", "fields": {"codename": "delete_attribute", "name": "Can delete attribute", "content_type": 20}}, {"pk": 34, "model": "auth.permission", "fields": {"codename": "add_attributebigintegerfield", "name": "Can add attribute big integer field", "content_type": 25}}, {"pk": 74, "model": "auth.permission", "fields": {"codename": "change_attributebigintegerfield", "name": "Can change attribute big integer field", "content_type": 25}}, {"pk": 126, "model": "auth.permission", "fields": {"codename": "delete_attributebigintegerfield", "name": "Can delete attribute big integer field", "content_type": 25}}, {"pk": 35, "model": "auth.permission", "fields": {"codename": "add_attributebooleanfield", "name": "Can add attribute boolean field", "content_type": 29}}, {"pk": 75, "model": "auth.permission", "fields": {"codename": "change_attributebooleanfield", "name": "Can change attribute boolean field", "content_type": 29}}, {"pk": 127, "model": "auth.permission", "fields": {"codename": "delete_attributebooleanfield", "name": "Can delete attribute boolean field", "content_type": 29}}, {"pk": 36, "model": "auth.permission", "fields": {"codename": "add_attributecharfield", "name": "Can add attribute char field", "content_type": 21}}, {"pk": 76, "model": "auth.permission", "fields": {"codename": "change_attributecharfield", "name": "Can change attribute char field", "content_type": 21}}, {"pk": 128, "model": "auth.permission", "fields": {"codename": "delete_attributecharfield", "name": "Can delete attribute char field", "content_type": 21}}, {"pk": 37, "model": "auth.permission", "fields": {"codename": "add_attributecommaseparatedintegerfield", "name": "Can add attribute comma separated integer field", "content_type": 24}}, {"pk": 77, "model": "auth.permission", "fields": {"codename": "change_attributecommaseparatedintegerfield", "name": "Can change attribute comma separated integer field", "content_type": 24}}, {"pk": 129, "model": "auth.permission", "fields": {"codename": "delete_attributecommaseparatedintegerfield", "name": "Can delete attribute comma separated integer field", "content_type": 24}}, {"pk": 38, "model": "auth.permission", "fields": {"codename": "add_attributedatefield", "name": "Can add attribute date field", "content_type": 31}}, {"pk": 78, "model": "auth.permission", "fields": {"codename": "change_attributedatefield", "name": "Can change attribute date field", "content_type": 31}}, {"pk": 130, "model": "auth.permission", "fields": {"codename": "delete_attributedatefield", "name": "Can delete attribute date field", "content_type": 31}}, {"pk": 39, "model": "auth.permission", "fields": {"codename": "add_attributedatetimefield", "name": "Can add attribute date time field", "content_type": 32}}, {"pk": 79, "model": "auth.permission", "fields": {"codename": "change_attributedatetimefield", "name": "Can change attribute date time field", "content_type": 32}}, {"pk": 131, "model": "auth.permission", "fields": {"codename": "delete_attributedatetimefield", "name": "Can delete attribute date time field", "content_type": 32}}, {"pk": 40, "model": "auth.permission", "fields": {"codename": "add_attributedecimalfield", "name": "Can add attribute decimal field", "content_type": 27}}, {"pk": 80, "model": "auth.permission", "fields": {"codename": "change_attributedecimalfield", "name": "Can change attribute decimal field", "content_type": 27}}, {"pk": 132, "model": "auth.permission", "fields": {"codename": "delete_attributedecimalfield", "name": "Can delete attribute decimal field", "content_type": 27}}, {"pk": 41, "model": "auth.permission", "fields": {"codename": "add_attributeemailfield", "name": "Can add attribute email field", "content_type": 34}}, {"pk": 81, "model": "auth.permission", "fields": {"codename": "change_attributeemailfield", "name": "Can change attribute email field", "content_type": 34}}, {"pk": 133, "model": "auth.permission", "fields": {"codename": "delete_attributeemailfield", "name": "Can delete attribute email field", "content_type": 34}}, {"pk": 42, "model": "auth.permission", "fields": {"codename": "add_attributefilefield", "name": "Can add attribute file field", "content_type": 35}}, {"pk": 82, "model": "auth.permission", "fields": {"codename": "change_attributefilefield", "name": "Can change attribute file field", "content_type": 35}}, {"pk": 134, "model": "auth.permission", "fields": {"codename": "delete_attributefilefield", "name": "Can delete attribute file field", "content_type": 35}}, {"pk": 43, "model": "auth.permission", "fields": {"codename": "add_attributefilepathfield", "name": "Can add attribute file path field", "content_type": 36}}, {"pk": 83, "model": "auth.permission", "fields": {"codename": "change_attributefilepathfield", "name": "Can change attribute file path field", "content_type": 36}}, {"pk": 135, "model": "auth.permission", "fields": {"codename": "delete_attributefilepathfield", "name": "Can delete attribute file path field", "content_type": 36}}, {"pk": 44, "model": "auth.permission", "fields": {"codename": "add_attributefloatfield", "name": "Can add attribute float field", "content_type": 28}}, {"pk": 84, "model": "auth.permission", "fields": {"codename": "change_attributefloatfield", "name": "Can change attribute float field", "content_type": 28}}, {"pk": 136, "model": "auth.permission", "fields": {"codename": "delete_attributefloatfield", "name": "Can delete attribute float field", "content_type": 28}}, {"pk": 45, "model": "auth.permission", "fields": {"codename": "add_attributeimagefield", "name": "Can add attribute image field", "content_type": 37}}, {"pk": 85, "model": "auth.permission", "fields": {"codename": "change_attributeimagefield", "name": "Can change attribute image field", "content_type": 37}}, {"pk": 137, "model": "auth.permission", "fields": {"codename": "delete_attributeimagefield", "name": "Can delete attribute image field", "content_type": 37}}, {"pk": 46, "model": "auth.permission", "fields": {"codename": "add_attributeintegerfield", "name": "Can add attribute integer field", "content_type": 23}}, {"pk": 86, "model": "auth.permission", "fields": {"codename": "change_attributeintegerfield", "name": "Can change attribute integer field", "content_type": 23}}, {"pk": 138, "model": "auth.permission", "fields": {"codename": "delete_attributeintegerfield", "name": "Can delete attribute integer field", "content_type": 23}}, {"pk": 47, "model": "auth.permission", "fields": {"codename": "add_attributeipaddressfield", "name": "Can add attribute ip address field", "content_type": 39}}, {"pk": 87, "model": "auth.permission", "fields": {"codename": "change_attributeipaddressfield", "name": "Can change attribute ip address field", "content_type": 39}}, {"pk": 139, "model": "auth.permission", "fields": {"codename": "delete_attributeipaddressfield", "name": "Can delete attribute ip address field", "content_type": 39}}, {"pk": 48, "model": "auth.permission", "fields": {"codename": "add_attributenullbooleanfield", "name": "Can add attribute null boolean field", "content_type": 30}}, {"pk": 88, "model": "auth.permission", "fields": {"codename": "change_attributenullbooleanfield", "name": "Can change attribute null boolean field", "content_type": 30}}, {"pk": 140, "model": "auth.permission", "fields": {"codename": "delete_attributenullbooleanfield", "name": "Can delete attribute null boolean field", "content_type": 30}}, {"pk": 49, "model": "auth.permission", "fields": {"codename": "add_attributepositiveintegerfield", "name": "Can add attribute positive integer field", "content_type": 26}}, {"pk": 89, "model": "auth.permission", "fields": {"codename": "change_attributepositiveintegerfield", "name": "Can change attribute positive integer field", "content_type": 26}}, {"pk": 141, "model": "auth.permission", "fields": {"codename": "delete_attributepositiveintegerfield", "name": "Can delete attribute positive integer field", "content_type": 26}}, {"pk": 50, "model": "auth.permission", "fields": {"codename": "add_attributespecification", "name": "Can add attribute specification", "content_type": 42}}, {"pk": 104, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 42}}, {"pk": 172, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 42}}, {"pk": 90, "model": "auth.permission", "fields": {"codename": "change_attributespecification", "name": "Can change attribute specification", "content_type": 42}}, {"pk": 142, "model": "auth.permission", "fields": {"codename": "delete_attributespecification", "name": "Can delete attribute specification", "content_type": 42}}, {"pk": 51, "model": "auth.permission", "fields": {"codename": "add_attributetextfield", "name": "Can add attribute text field", "content_type": 22}}, {"pk": 91, "model": "auth.permission", "fields": {"codename": "change_attributetextfield", "name": "Can change attribute text field", "content_type": 22}}, {"pk": 143, "model": "auth.permission", "fields": {"codename": "delete_attributetextfield", "name": "Can delete attribute text field", "content_type": 22}}, {"pk": 52, "model": "auth.permission", "fields": {"codename": "add_attributetimefield", "name": "Can add attribute time field", "content_type": 33}}, {"pk": 92, "model": "auth.permission", "fields": {"codename": "change_attributetimefield", "name": "Can change attribute time field", "content_type": 33}}, {"pk": 144, "model": "auth.permission", "fields": {"codename": "delete_attributetimefield", "name": "Can delete attribute time field", "content_type": 33}}, {"pk": 53, "model": "auth.permission", "fields": {"codename": "add_attributetype", "name": "Can add attribute type", "content_type": 18}}, {"pk": 99, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 18}}, {"pk": 167, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 18}}, {"pk": 93, "model": "auth.permission", "fields": {"codename": "change_attributetype", "name": "Can change attribute type", "content_type": 18}}, {"pk": 145, "model": "auth.permission", "fields": {"codename": "delete_attributetype", "name": "Can delete attribute type", "content_type": 18}}, {"pk": 54, "model": "auth.permission", "fields": {"codename": "add_attributeurlfield", "name": "Can add attribute url field", "content_type": 38}}, {"pk": 94, "model": "auth.permission", "fields": {"codename": "change_attributeurlfield", "name": "Can change attribute url field", "content_type": 38}}, {"pk": 146, "model": "auth.permission", "fields": {"codename": "delete_attributeurlfield", "name": "Can delete attribute url field", "content_type": 38}}, {"pk": 56, "model": "auth.permission", "fields": {"codename": "add_complement", "name": "Can add complement", "content_type": 47}}, {"pk": 108, "model": "auth.permission", "fields": {"codename": "change_complement", "name": "Can change complement", "content_type": 47}}, {"pk": 148, "model": "auth.permission", "fields": {"codename": "delete_complement", "name": "Can delete complement", "content_type": 47}}, {"pk": 57, "model": "auth.permission", "fields": {"codename": "add_edge", "name": "Can add edge", "content_type": 13}}, {"pk": 109, "model": "auth.permission", "fields": {"codename": "change_edge", "name": "Can change edge", "content_type": 13}}, {"pk": 149, "model": "auth.permission", "fields": {"codename": "delete_edge", "name": "Can delete edge", "content_type": 13}}, {"pk": 58, "model": "auth.permission", "fields": {"codename": "add_expression", "name": "Can add expression", "content_type": 45}}, {"pk": 107, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 45}}, {"pk": 175, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 45}}, {"pk": 110, "model": "auth.permission", "fields": {"codename": "change_expression", "name": "Can change expression", "content_type": 45}}, {"pk": 150, "model": "auth.permission", "fields": {"codename": "delete_expression", "name": "Can delete expression", "content_type": 45}}, {"pk": 59, "model": "auth.permission", "fields": {"codename": "add_intersection", "name": "Can add intersection", "content_type": 48}}, {"pk": 111, "model": "auth.permission", "fields": {"codename": "change_intersection", "name": "Can change intersection", "content_type": 48}}, {"pk": 151, "model": "auth.permission", "fields": {"codename": "delete_intersection", "name": "Can delete intersection", "content_type": 48}}, {"pk": 60, "model": "auth.permission", "fields": {"codename": "add_metatype", "name": "Can add metatype", "content_type": 14}}, {"pk": 112, "model": "auth.permission", "fields": {"codename": "change_metatype", "name": "Can change metatype", "content_type": 14}}, {"pk": 152, "model": "auth.permission", "fields": {"codename": "delete_metatype", "name": "Can delete metatype", "content_type": 14}}, {"pk": 61, "model": "auth.permission", "fields": {"codename": "add_nid", "name": "Can add nid", "content_type": 11}}, {"pk": 113, "model": "auth.permission", "fields": {"codename": "change_nid", "name": "Can change nid", "content_type": 11}}, {"pk": 153, "model": "auth.permission", "fields": {"codename": "delete_nid", "name": "Can delete nid", "content_type": 11}}, {"pk": 62, "model": "auth.permission", "fields": {"codename": "add_node", "name": "Can add node", "content_type": 12}}, {"pk": 114, "model": "auth.permission", "fields": {"codename": "change_node", "name": "Can change node", "content_type": 12}}, {"pk": 154, "model": "auth.permission", "fields": {"codename": "delete_node", "name": "Can delete node", "content_type": 12}}, {"pk": 32, "model": "auth.permission", "fields": {"codename": "add_nodespecification", "name": "Can add Node specification", "content_type": 44}}, {"pk": 106, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 44}}, {"pk": 174, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 44}}, {"pk": 72, "model": "auth.permission", "fields": {"codename": "change_nodespecification", "name": "Can change Node specification", "content_type": 44}}, {"pk": 124, "model": "auth.permission", "fields": {"codename": "delete_nodespecification", "name": "Can delete Node specification", "content_type": 44}}, {"pk": 63, "model": "auth.permission", "fields": {"codename": "add_nodetype", "name": "Can add node type", "content_type": 15}}, {"pk": 96, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 15}}, {"pk": 164, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 15}}, {"pk": 115, "model": "auth.permission", "fields": {"codename": "change_nodetype", "name": "Can change node type", "content_type": 15}}, {"pk": 155, "model": "auth.permission", "fields": {"codename": "delete_nodetype", "name": "Can delete node type", "content_type": 15}}, {"pk": 64, "model": "auth.permission", "fields": {"codename": "add_objecttype", "name": "Can add object type", "content_type": 16}}, {"pk": 97, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 16}}, {"pk": 165, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 16}}, {"pk": 116, "model": "auth.permission", "fields": {"codename": "change_objecttype", "name": "Can change object type", "content_type": 16}}, {"pk": 156, "model": "auth.permission", "fields": {"codename": "delete_objecttype", "name": "Can delete object type", "content_type": 16}}, {"pk": 65, "model": "auth.permission", "fields": {"codename": "add_peer", "name": "Can add peer", "content_type": 49}}, {"pk": 117, "model": "auth.permission", "fields": {"codename": "change_peer", "name": "Can change peer", "content_type": 49}}, {"pk": 157, "model": "auth.permission", "fields": {"codename": "delete_peer", "name": "Can delete peer", "content_type": 49}}, {"pk": 66, "model": "auth.permission", "fields": {"codename": "add_processtype", "name": "Can add process type", "content_type": 40}}, {"pk": 102, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 40}}, {"pk": 170, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 40}}, {"pk": 118, "model": "auth.permission", "fields": {"codename": "change_processtype", "name": "Can change process type", "content_type": 40}}, {"pk": 158, "model": "auth.permission", "fields": {"codename": "delete_processtype", "name": "Can delete process type", "content_type": 40}}, {"pk": 67, "model": "auth.permission", "fields": {"codename": "add_relation", "name": "Can add relation", "content_type": 19}}, {"pk": 100, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 19}}, {"pk": 168, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 19}}, {"pk": 119, "model": "auth.permission", "fields": {"codename": "change_relation", "name": "Can change relation", "content_type": 19}}, {"pk": 159, "model": "auth.permission", "fields": {"codename": "delete_relation", "name": "Can delete relation", "content_type": 19}}, {"pk": 68, "model": "auth.permission", "fields": {"codename": "add_relationspecification", "name": "Can add relation specification", "content_type": 43}}, {"pk": 105, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 43}}, {"pk": 173, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 43}}, {"pk": 120, "model": "auth.permission", "fields": {"codename": "change_relationspecification", "name": "Can change relation specification", "content_type": 43}}, {"pk": 160, "model": "auth.permission", "fields": {"codename": "delete_relationspecification", "name": "Can delete relation specification", "content_type": 43}}, {"pk": 69, "model": "auth.permission", "fields": {"codename": "add_relationtype", "name": "Can add relation type", "content_type": 17}}, {"pk": 98, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 17}}, {"pk": 166, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 17}}, {"pk": 121, "model": "auth.permission", "fields": {"codename": "change_relationtype", "name": "Can change relation type", "content_type": 17}}, {"pk": 161, "model": "auth.permission", "fields": {"codename": "delete_relationtype", "name": "Can delete relation type", "content_type": 17}}, {"pk": 70, "model": "auth.permission", "fields": {"codename": "add_systemtype", "name": "Can add system type", "content_type": 41}}, {"pk": 103, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 41}}, {"pk": 171, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 41}}, {"pk": 122, "model": "auth.permission", "fields": {"codename": "change_systemtype", "name": "Can change system type", "content_type": 41}}, {"pk": 162, "model": "auth.permission", "fields": {"codename": "delete_systemtype", "name": "Can delete system type", "content_type": 41}}, {"pk": 71, "model": "auth.permission", "fields": {"codename": "add_union", "name": "Can add union", "content_type": 46}}, {"pk": 123, "model": "auth.permission", "fields": {"codename": "change_union", "name": "Can change union", "content_type": 46}}, {"pk": 163, "model": "auth.permission", "fields": {"codename": "delete_union", "name": "Can delete union", "content_type": 46}}, {"pk": 176, "model": "auth.permission", "fields": {"codename": "add_gbobject", "name": "Can add object", "content_type": 51}}, {"pk": 179, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 51}}, {"pk": 187, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 51}}, {"pk": 181, "model": "auth.permission", "fields": {"codename": "change_gbobject", "name": "Can change object", "content_type": 51}}, {"pk": 184, "model": "auth.permission", "fields": {"codename": "delete_gbobject", "name": "Can delete object", "content_type": 51}}, {"pk": 177, "model": "auth.permission", "fields": {"codename": "add_process", "name": "Can add process", "content_type": 52}}, {"pk": 180, "model": "auth.permission", "fields": {"codename": "can_change_author", "name": "Can change author", "content_type": 52}}, {"pk": 188, "model": "auth.permission", "fields": {"codename": "can_view_all", "name": "Can view all", "content_type": 52}}, {"pk": 182, "model": "auth.permission", "fields": {"codename": "change_process", "name": "Can change process", "content_type": 52}}, {"pk": 185, "model": "auth.permission", "fields": {"codename": "delete_process", "name": "Can delete process", "content_type": 52}}, {"pk": 178, "model": "auth.permission", "fields": {"codename": "add_system", "name": "Can add system", "content_type": 53}}, {"pk": 183, "model": "auth.permission", "fields": {"codename": "change_system", "name": "Can change system", "content_type": 53}}, {"pk": 186, "model": "auth.permission", "fields": {"codename": "delete_system", "name": "Can delete system", "content_type": 53}}, {"pk": 204, "model": "auth.permission", "fields": {"codename": "add_registrationprofile", "name": "Can add registration profile", "content_type": 59}}, {"pk": 205, "model": "auth.permission", "fields": {"codename": "change_registrationprofile", "name": "Can change registration profile", "content_type": 59}}, {"pk": 206, "model": "auth.permission", "fields": {"codename": "delete_registrationprofile", "name": "Can delete registration profile", "content_type": 59}}, {"pk": 20, "model": "auth.permission", "fields": {"codename": "add_session", "name": "Can add session", "content_type": 7}}, {"pk": 21, "model": "auth.permission", "fields": {"codename": "change_session", "name": "Can change session", "content_type": 7}}, {"pk": 22, "model": "auth.permission", "fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 7}}, {"pk": 23, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 8}}, {"pk": 24, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 8}}, {"pk": 25, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 8}}, {"pk": 26, "model": "auth.permission", "fields": {"codename": "add_tag", "name": "Can add tag", "content_type": 9}}, {"pk": 28, "model": "auth.permission", "fields": {"codename": "change_tag", "name": "Can change tag", "content_type": 9}}, {"pk": 30, "model": "auth.permission", "fields": {"codename": "delete_tag", "name": "Can delete tag", "content_type": 9}}, {"pk": 27, "model": "auth.permission", "fields": {"codename": "add_taggeditem", "name": "Can add tagged item", "content_type": 10}}, {"pk": 29, "model": "auth.permission", "fields": {"codename": "change_taggeditem", "name": "Can change tagged item", "content_type": 10}}, {"pk": 31, "model": "auth.permission", "fields": {"codename": "delete_taggeditem", "name": "Can delete tagged item", "content_type": 10}}, {"pk": 1, "model": "auth.group", "fields": {"name": "non_admin_user", "permissions": [33, 101, 169, 73, 125, 34, 74, 126, 35, 75, 127, 36, 76, 128, 37, 77, 129, 38, 78, 130, 39, 79, 131, 40, 80, 132, 41, 81, 133, 42, 82, 134, 43, 83, 135, 44, 84, 136, 45, 85, 137, 46, 86, 138, 47, 87, 139, 48, 88, 140, 49, 89, 141, 50, 104, 172, 90, 142, 51, 91, 143, 52, 92, 144, 53, 99, 167, 93, 145, 54, 94, 146, 56, 108, 148, 57, 109, 149, 58, 107, 175, 110, 150, 59, 111, 151, 60, 112, 152, 61, 113, 153, 62, 114, 154, 32, 106, 174, 72, 124, 63, 96, 164, 115, 155, 64, 97, 165, 116, 156, 65, 117, 157, 66, 102, 170, 118, 158, 67, 100, 168, 119, 159, 68, 105, 173, 120, 160, 69, 98, 166, 121, 161, 70, 103, 171, 122, 162, 71, 123, 163, 176, 179, 187, 181, 184, 177, 180, 188, 182, 185, 178, 183, 186]}}, {"pk": 1, "model": "auth.user", "fields": {"username": "kabir", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": true, "last_login": "2012-05-18T02:34:30.168", "groups": [], "user_permissions": [], "password": "pbkdf2_sha256$10000$50O8oHOKIzTG$Q2ynJ/LFgWEPoueQhZSy97hDJ00eA+fbgzToDol+3U8=", "email": "kabir@gnowledge.org", "date_joined": "2012-05-18T02:33:16.103"}}, {"pk": 1, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2012-05-18T02:36:12.860", "object_repr": "non_admin_user", "object_id": "1", "change_message": "", "user": 1, "content_type": 2}}] \ No newline at end of file
diff --git a/demo/urls.py b/demo/urls.py
index ee0bd7f..ac101e7 100644
--- a/demo/urls.py
+++ b/demo/urls.py
@@ -92,7 +92,8 @@ urlpatterns = patterns(
url(r'^nodetypes/', include('gstudio.urls')),
url(r'^objects/', include('objectapp.urls')),
url(r'^comments/', include('django.contrib.comments.urls')),
- url(r'^xmlrpc/$', 'django_xmlrpc.views.handle_xmlrpc'),
+ #URL for XMLRPC
+ url(r'^xmlrpc/$', 'gstudio.xmlrpc.views.handle_xmlrpc'),
url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/gstudio/', include('gstudio.urls.ajaxurls')),
diff --git a/gstudio/fstore_rdf_import.py b/gstudio/fstore_rdf_import.py
new file mode 100644
index 0000000..ea48548
--- /dev/null
+++ b/gstudio/fstore_rdf_import.py
@@ -0,0 +1,187 @@
+
+import rdflib
+from rdflib.graph import ConjunctiveGraph as Graph
+from rdflib import plugin
+from rdflib.store import Store, NO_STORE, VALID_STORE
+from rdflib.namespace import Namespace
+from rdflib.term import Literal
+from rdflib.term import URIRef
+from tempfile import mkdtemp
+from gstudio.models import *
+from objectapp.models import *
+import settings
+import os.path
+
+from pprint import pprint
+
+import subprocess
+from HTTP4Store import HTTP4Store
+
+
+def rdf_all(notation='xml'):
+ """
+ Funtion takes title of node, and rdf notation.
+ """
+ valid_formats = ["xml", "n3", "ntriples", "trix"]
+ default_graph_uri = "http://gstudio.gnowledge.org/rdfstore"
+
+ configString = "/var/tmp/rdfstore"
+
+ # Get the IOMemory plugin.
+ store = plugin.get('IOMemory', Store)('rdfstore')
+
+
+
+ # Open previously created store, or create it if it doesn't exist yet
+ graph = Graph(store="IOMemory",
+ identifier = URIRef(default_graph_uri))
+ path = mkdtemp()
+ rt = graph.open(path, create=False)
+ if rt == NO_STORE:
+
+ graph.open(path, create=True)
+ else:
+ assert rt == VALID_STORE, "The underlying store is corrupt"
+
+
+ # Now we'll add some triples to the graph & commit the changes
+
+ graph.bind("gstudio", "http://gnowledge.org/")
+ exclusion_fields = ["id", "rght", "node_ptr_id", "image", "lft", "_state", "_altnames_cache", "_tags_cache", "nid_ptr_id", "_mptt_cached_fields"]
+
+ for node in NID.objects.all():
+ node_dict=node.ref.__dict__
+ node_type = node.reftype
+ try:
+
+ if (node_type=='Gbobject'):
+ node=Gbobject.objects.get(title=node)
+
+ elif (node_type=='None'):
+ node=Gbobject.objects.get(title=node)
+
+ elif (node_type=='Processes'):
+ node=Gbobject.objects.get(title=node)
+
+ elif (node_type=='System'):
+ node=Gbobject.objects.get(title=node)
+
+ elif (node_type=='Objecttype'):
+ node=Objecttype.objects.get(title=node)
+
+ elif (node_type=='Attributetype'):
+ node=Attributetype.objects.get(title=node)
+
+ elif (node_type=='Complement'):
+ node=Complement.objects.get(title=node)
+
+ elif (node_type=='Union'):
+ node=Union.objects.get(title=node)
+
+ elif (node_type=='Intersection'):
+ node=Intersection.objects.get(title=node)
+
+ elif (node_type=='Expression'):
+ node=Expression.objects.get(title=node)
+
+ elif (node_type=='Processtype'):
+ node=Processtype.objects.get(title=node)
+
+ elif (node_type=='Systemtype'):
+ node=Systemtype.objects.get(title=node)
+
+ elif (node_type=='AttributeSpecification'):
+ node=AttributeSpecification.objects.get(title=node)
+
+ elif (node_type=='RelationSpecification'):
+ node=RelationSpecification.objects.get(title=node)
+ rdflib=link(node)
+ url_addr=link1(node)
+ fstore_dump(url_addr)
+ if(node_type=='Attribute'):
+ node=Attribute.objects.get(title=node)
+ rdflib = Namespace('http://sbox.gnowledge.org/gstudio/')
+
+ elif(node_type=='Relationtype' ):
+ node=Relationtype.objects.get(title=node)
+ rdflib = Namespace('http://sbox.gnowledge.org/gstudio/')
+
+ elif(node_type=='Metatype'):
+ node=Metatype.objects.get(title=node)
+ rdflib = Namespace('http://sbox.gnowledge.org/gstudio/')
+ url_addr='http://sbox.gnowledge.org/gstudio/'
+ fstore_dump(url_addr)
+ except:
+ if(node_type=='Attribute'):
+ rdflib= Namespace('http://sbox.gnowledge.org/gstudio/')
+
+ if(node_type=='Relationtype' ):
+ rdflib= Namespace('http://sbox.gnowledge.org/gstudio/')
+
+ if(node_type=='Metatype'):
+ rdflib= Namespace('http://sbox.gnowledge.org/gstudio/')
+
+
+ subject=str(node_dict['id'])
+ for key in node_dict:
+ if key not in exclusion_fields:
+ predicate=str(key)
+ pobject=str(node_dict[predicate])
+ graph.add((rdflib[subject], rdflib[predicate], Literal(pobject)))
+
+ rdf_code=graph.serialize(format=notation)
+ #path to store the rdf in a file
+
+ #x = os.path.join(os.path.dirname(__file__), 'rdffiles.rdf')
+
+ graph.commit()
+ graph.close()
+
+
+
+#provides the url address of particular node.
+def link(node):
+ node_url=node.get_absolute_url()
+ site_addr= node.sites.all()
+ a=site_addr[0]
+ host_name=a.name
+
+ link='http://'
+ #Concatenating the above variables will give the url address.
+
+ url_addr=link+host_name+node_url
+ rdflib=Namespace(url_addr)
+ return rdflib
+
+def link1(node):
+ node_url=node.get_absolute_url()
+ site_addr= node.sites.all()
+ a=site_addr[0]
+ host_name=a.name
+
+ link='http://'
+ #Concatenating the above variables will give the url address.
+
+ url_addr=link+host_name+node_url
+
+ return url_addr
+
+def fstore_dump(url_addr):
+
+ store = HTTP4Store('http://localhost:8067')
+ status = store.status()
+ response = store.add_from_uri('http://example.com/nodetypes/2012/05/25/mouse/')
+ return response
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gstudio/models.py b/gstudio/models.py
index 995ecaf..6dc7983 100644
--- a/gstudio/models.py
+++ b/gstudio/models.py
@@ -893,8 +893,7 @@ class Nodetype(Node):
def get_graph_json(self):
- # predicate_id={"plural":"a1","altnames":"a2","contains_members":"a3","contains_subtypes":"a4","prior_nodes":"a5", "posterior_nodes":"a6"}
- g_json = {}
+ g_json = {}
g_json["node_metadata"]= []
g_json["relations"]=[]
@@ -903,72 +902,57 @@ class Nodetype(Node):
global attr_counter
nbh = self.get_nbh
predicate_id = {}
-
+
for key in nbh.keys():
val = str(counter) + "a"
predicate_id[key] = val
- counter = counter + 1
- #print predicate_id
+ counter = counter + 1
-
-
- this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"expanded":"true"}
+ this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"refType":self.reftype}
g_json["node_metadata"].append(this_node)
for key in predicate_id.keys():
if nbh[key]:
try:
- #g_json[str(key)]=[]
- #g_json["relations"].append(key)
-
g_json["node_metadata"].append({"_id":str(predicate_id[key]),"screen_name":key})
-
- #g_json[str(key)].append({"from":self.id , "to":predicate_id[key],"value":1, "level":1 })
-
g_json["relations"].append({"from":self.id ,"type":str(key),"value":1,"to":predicate_id[key] })
if not isinstance(nbh[key],basestring):
- for item in nbh[key]:
- if item.reftype!="Relation":
- # create nodes
+
+ for item in nbh[key]:
+ if item.reftype=="Relationtype":
+ if item.left_subjecttype.id==self.id:
+ flag=1
+ elif item.right_subjecttype.id==self.id:
+ flag=0
+ # create nodes
- g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url(),"expanded":"false"})
-
+ g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url(),"refType":item.reftype,"inverse":item.inverse,"flag":flag})
- # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 })
+
+ g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url(),"refType":item.reftype})
#create links
- g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id })
-
- else:
-
- if item.left_subject.id==self.id:
- item1=item.right_subject
- elif item.right_subject.id==self.id:
- item1=item.left_subject
-
- g_json["node_metadata"].append({"_id":str(item1.id),"screen_name":item1.title,"title":self.title, "url":item1.get_absolute_url(),"expanded":"false"})
-
- # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 })
- #create links
- g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item1.id })
-
+ g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id })
+
+
else:
- #value={nbh["plural"]:"a4",nbh["altnames"]:"a5"}
- #this_node[str(key)]=nbh[key] key, nbh[key]
- #for item in value.keys():
+
g_json["node_metadata"].append({"_id":(str(attr_counter)+"a"),"screen_name":nbh[key]})
- #g_json[str(key)].append({"from":predicate_id[key] , "to":attr_counter ,"value":1, "level":2 })
- g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"a")})
+ g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"a")})
attr_counter-=1
except:
pass
- #print g_json
+
- return json.dumps(g_json)
-
+
+ return json.dumps(g_json)
+
+
+
+
@property
def get_possible_attributes(self):
"""
@@ -1900,7 +1884,6 @@ class Relationtype(Nodetype):
nbh['plural'] = self.plural
nbh['contains_subtypes'] = Nodetype.objects.filter(parent=self.id)
- # get all the objects inheriting this OT
nbh['contains_members'] = self.member_objects.all()
nbh['prior_nodes'] = self.prior_nodes.all()
nbh['posterior_nodes'] = self.posterior_nodes.all()
diff --git a/gstudio/templates/gstudio/skeleton.html b/gstudio/templates/gstudio/skeleton.html
index ad6cf4a..6991304 100644
--- a/gstudio/templates/gstudio/skeleton.html
+++ b/gstudio/templates/gstudio/skeleton.html
@@ -178,8 +178,8 @@
function init(a,b)
{
+
-
nodes_by_id = _.reduce(a, function(acc, n) {
acc[n._id] = n;
return acc;
@@ -198,11 +198,14 @@ function init(a,b)
return nodes_by_id[e.from] && nodes_by_id[e.to]&& e.type!="title" && e.type!="content"
}).value();
-
+
}
$(function fgraph() {
-
+neighbour_node= new Array();
+clicked_node=new Array();
+prev_node=new Array();
+neighbour_node= neighbour_node.concat({{object.id}});
$.getJSON('/nodetypes/graphs/graph_json/' + {{object.id}}, function (json1) {
metadata=json1.node_metadata;
@@ -338,29 +341,128 @@ function load(key)
.attr("fill", "#6D6666");
-
-$(window).bind('keydown',function(event){
- if(17==event.keyCode){
- new_g.on("click",function(d){
- if(d._id>0 && d.expanded=="false")
- {
- d3.select("#amazingViz").remove();
- d.expanded="true";
- $.getJSON('/nodetypes/graphs/graph_json/' + d._id , function (json2) {
- new_metadata=json2.node_metadata;
- new_relations=json2.relations;
- new_relnset=json2.relset
- metadata=_.union(new_metadata,metadata);
- relations=_.union(new_relations,relations);
- init(metadata,relations);
- load(d._id)
- })
+$(window).bind('keydown',function(event) {
+ if(event.keyCode==17){
+
+ new_g.on("click",function(d){
+
+
+
+
+ if(d._id>0 && d.expanded=="true" && d._id!= {{object.id}})
+ {
+
+ $.getJSON('/nodetypes/graphs/graph_json/' + d._id , function (json2) {
+ new_metadata=json2.node_metadata;
+
+ });
+
+ _.filter(new_metadata, function(e){if(e._id>0)
+ {
+ clicked_node=clicked_node.concat(e._id) ;
+ }
+ });
+
+
+ index = _.indexOf(neighbour_node , d._id);
+ prev_node=neighbour_node.slice(0,index);
+
+ neighbour_node = _.difference(neighbour_node,clicked_node) ;
+
+ neighbour_node= neighbour_node.concat(prev_node);
+ neighbour_node = _.uniq(neighbour_node);
+ metadata=[]
+ relations=[]
+ metadata1=[]
+ relations1=[]
+ for(i=0;i<(neighbour_node.length);i++)
+ {
+
+ d3.select("#amazingViz").remove();
+ g=neighbour_node[i]
+
+
+
+ $.ajax({
+ async:false,
+ url:'/nodetypes/graphs/graph_json/' + g ,
+ datatype:'json',
+ success:function (json2) {
+ new_metadata=json2.node_metadata;
+ new_relations=json2.relations;
+ metadata=_.union(new_metadata,metadata);
+
+ relations=_.union(new_relations,relations);
+ relations= check_Relationtype(metadata,relations);
+ }});
+
}
-
- });
+ _.each(metadata, function(m){
+
+ for(i=0;i<neighbour_node.length;i++)
+ {
+ if(m._id==neighbour_node[i])
+ {m.expanded="true";}
+ else
+ {m.expanded="false";}
+ }
+
+
+ });
+
+ init(metadata,relations);
+ load({{object.id}}) ;
-}
+
+
+ }
+
+
+
+
+ else if(d._id>0 && d._id!= {{object.id}})
+ {
+
+ neighbour_node =neighbour_node.concat(d._id);
+
+ d3.select("#amazingViz").remove();
+
+ $.ajax({
+ async:false,
+ url:'/nodetypes/graphs/graph_json/' + d._id ,
+ datatype:'json',
+ success:function (json2) {
+
+ new_metadata=json2.node_metadata;
+ new_relations=json2.relations;
+
+ metadata=_.union(new_metadata,metadata);
+ relations=_.union(new_relations,relations);
+ relations= check_Relationtype(metadata,relations);
+ _.each(metadata, function(m){
+
+ for(i=0;i<neighbour_node.length;i++)
+ {
+ if(m._id==neighbour_node[i])
+ m.expanded="true";
+ }
+ });
+
+
+ }});
+ console.log(metadata);
+ init(metadata,relations);
+ load({{object.id}});
+
+
+
+
+ }
});
+}
+
+});
+
@@ -370,15 +472,7 @@ $(window).bind('keydown',function(event){
});
- /*new_g.append("svg:ellipse")
- .attr("cx", function(d) { return d.x - w/2.0 +15; })
- .attr("cy", function(d) { return d.y - h/2.0 +15 ; })
- .call(force.drag)
- .attr("rx", function(d) { return ((d.screen_name).length) +10 })
- .attr("ry", function(d) { if (d._id==key) return 8; else if (isNaN(d._id) || (d._id)<0) return 1; else return 7 });
- //.style("fill", function color(d) { if (d._id==key) return "red"; else if (isNaN(d._id) || (d._id)<0) return "white" ; else return "green"});*/
-
-
+
@@ -389,8 +483,7 @@ $(window).bind('keydown',function(event){
.attr("dy", ".35em")
.attr("text-anchor","middle")
- // .attr("style",function text(d) { if ((d._id)>0) return "font-size:9.00pt;fill:blue;" ; else return "font-size:9.00pt;fill:black;"})
-
+
.text(function(d) {
return d.screen_name;
});
@@ -423,7 +516,7 @@ $(window).bind('keydown',function(event){
.style("fill-opacity", ".2")
.style("stroke", "#666")
.style("stroke-width", "1.5px")
- .style("fill", function color(d) {var e=(d._id).charAt(0); if (d.expanded=="true") return "red"; else return "none"});
+ .style("fill", function(d) {if ((d.expanded=="true" && d.refType=="Objecttype") ||(d._id=={{object.id}}) ) return "blue"; else if(d.expanded=="true" && d.refType=="Gbobject") return "red"; else return "none"});
@@ -462,9 +555,38 @@ $(window).bind('keydown',function(event){
}
+function check_Relationtype(metadata,relations)
+{
+
+
+ _.each(metadata,function(d){
+ if (d.refType=="Relationtype")
+ {
+ a=d.inverse;
+ if (d.flag==1)
+ {
+ relations= _.reject(relations,function(e)
+ {
+ return e.type==a
+ });
+ }
+ else if (d.flag==0)
+ {
+ relations= _.reject(relations,function(e)
+ {
+ return e.type==d.screen_name
+ });
+ }
+ }
+
+ });
+return relations;
+
+
+}
+
});
-//fgraph({{object.id}});
</script>
diff --git a/gstudio/xmlrpc/__init__.py b/gstudio/xmlrpc/__init__.py
index afb41e6..318e6d9 100644
--- a/gstudio/xmlrpc/__init__.py
+++ b/gstudio/xmlrpc/__init__.py
@@ -54,6 +54,7 @@ GSTUDIO_XMLRPC_PINGBACK = [
('gstudio.xmlrpc.pingback.pingback_extensions_get_pingbacks',
'pingback.extensions.getPingbacks')]
+# The tuple has been modified to include entries for get and set functions
GSTUDIO_XMLRPC_METAWEBLOG = [
('gstudio.xmlrpc.metaweblog.get_users_blogs',
'blogger.getUsersBlogs'),
@@ -82,35 +83,53 @@ GSTUDIO_XMLRPC_METAWEBLOG = [
('gstudio.xmlrpc.metaweblog.new_media_object',
'metaWeblog.newMediaObject'),
('gstudio.xmlrpc.metaweblog.getNodetype',
- 'metaweblog.getNodetype'),
+ 'metaWeblog.getNodetype'),
('gstudio.xmlrpc.metaweblog.nidExists',
- 'metaweblog.nidExists'),
+ 'metaWeblog.nidExists'),
('gstudio.xmlrpc.metaweblog.getinfoFromSSID',
- 'metaweblog.getinfoFromSSID'),
- #('gstudio.xmlrpc.metaweblog.getNeighbourhood',
- #'metaweblog.getNeighbourhood'),
- # ('gstudio.xmlrpc.metaweblog.getallNodes',
- # 'metaweblog.getallNodes'),
+ 'metaWeblog.getinfoFromSSID'),
+ ('gstudio.xmlrpc.metaweblog.getNeighbourhood',
+ 'metaWeblog.getNeighbourhood'),
+ ('gstudio.xmlrpc.metaweblog.getAll',
+ 'metaWeblog.getAll'),
('gstudio.xmlrpc.metaweblog.getDatatype',
- 'metaweblog.getDatatype'),
+ 'metaWeblog.getDatatype'),
('gstudio.xmlrpc.metaweblog.getAttributevalues',
- 'metaweblog.getAttributevalues'),
+ 'metaWeblog.getAttributevalues'),
('gstudio.xmlrpc.metaweblog.getSubjecttypes',
- 'metaweblog.getSubjecttypes'),
- #('gstudio.xmlrpc.metaweblog.getAttributeType',
- #'metaweblog.getAttributeType'),
+ 'metaWeblog.getSubjecttypes'),
+ ('gstudio.xmlrpc.metaweblog.getAttributeType',
+ 'metaWeblog.getAttributeType'),
('gstudio.xmlrpc.metaweblog.getRoles',
- 'metaweblog.getRoles'),
+ 'metaWeblog.getRoles'),
('gstudio.xmlrpc.metaweblog.getSubtypes',
- 'metaweblog.getSubtypes'),
- #('gstudio.xmlrpc.metaweblog.Suballtypes',
- #'metaweblog.Suballtypes'),
+ 'metaWeblog.getSubtypes'),
+ ('gstudio.xmlrpc.metaweblog.getAllSubtypes',
+ 'metaWeblog.getAllSubtypes'),
('gstudio.xmlrpc.metaweblog.getRestrictions',
- 'metaweblog.getRestrictions'),
+ 'metaWeblog.getRestrictions'),
('gstudio.xmlrpc.metaweblog.getlatestSSID',
- 'metaweblog.getlatestSSID'),
- ('gstudio.xmlrpc.metaweblog.getAllSnapshots',
- 'metaweblog.getAllSnapshots')
+ 'metaWeblog.getlatestSSID'),
+ ('gstudio.xmlrpc.metaweblog.getAllSnapshots',
+ 'metaWeblog.getAllSnapshots'),
+ ('gstudio.xmlrpc.metaweblog.setAttributetype',
+ 'metaWeblog.setAttributetype'),
+ ('gstudio.xmlrpc.metaweblog.setRelationtype',
+ 'metaWeblog.setRelationtype'),
+ ('gstudio.xmlrpc.metaweblog.setObjecttype',
+ 'metaWeblog.setObjecttype'),
+ ('gstudio.xmlrpc.metaweblog.setObject',
+ 'metaWeblog.setObject'),
+ ('gstudio.xmlrpc.metaweblog.setAttribute',
+ 'metaWeblog.setAttribute'),
+ ('gstudio.xmlrpc.metaweblog.setRelation',
+ 'metaWeblog.setRelation'),
+ ('gstudio.xmlrpc.metaweblog.getGbobjectNeighbourhood',
+ 'metaWeblog.getGbobjectNeighbourhood')
+
+
+
+
]
diff --git a/gstudio/xmlrpc/decorators.py b/gstudio/xmlrpc/decorators.py
new file mode 100644
index 0000000..5d13fea
--- /dev/null
+++ b/gstudio/xmlrpc/decorators.py
@@ -0,0 +1,175 @@
+"""Offers decorators to make the use of django_xmlrpc a great deal simpler
+
+Authors::
+ Graham Binns,
+ Reza Mohammadi
+
+Credit must go to Brendan W. McAdams <brendan.mcadams@thewintergrp.com>, who
+posted the original SimpleXMLRPCDispatcher to the Django wiki:
+http://code.djangoproject.com/wiki/XML-RPC
+
+New BSD License
+===============
+Copyright (c) 2007, Graham Binns http://launchpad.net/~codedragon
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the <ORGANIZATION> nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+"""
+from xmlrpclib import Fault
+from django.contrib.auth import authenticate
+from django.utils.translation import gettext as _
+
+# This file is needed to run XMLRPC !
+# Some constants for your pleasure
+#XXX: Any standardization?
+AUTHENTICATION_FAILED_CODE = 81
+PERMISSION_DENIED_CODE = 82
+
+
+class AuthenticationFailedException(Fault):
+ """An XML-RPC fault to be raised when a permission_required authentication
+ check fails
+
+ Author
+ """
+ def __init__(self):
+ Fault.__init__(self, AUTHENTICATION_FAILED_CODE,
+ _('Username and/or password is incorrect'))
+
+
+class PermissionDeniedException(Fault):
+ """An XML-RPC fault to be raised when a permission_required permission
+ check fails
+ """
+ def __init__(self):
+ Fault.__init__(self, PERMISSION_DENIED_CODE, _('Permission denied'))
+
+
+def xmlrpc_method(returns='string', args=None, name=None):
+ """Adds a signature to an XML-RPC function and register
+ it with the dispatcher.
+
+ returns
+ The return type of the function. This can either be a string
+ description (e.g. 'string') or a type (e.g. str, bool) etc.
+
+ args
+ A list of the types of the arguments that the function accepts. These
+ can be strings or types or a mixture of the two e.g.
+ [str, bool, 'string']
+ """
+ # Args should be a list
+ if args is None:
+ args = []
+
+ def _xmlrpc_func(func):
+ """Inner function for XML-RPC method decoration. Adds a signature to
+ the method passed to it.
+
+ func
+ The function to add the signature to
+ """
+ # If name is not None, register the method with the dispatcher.
+ from django_xmlrpc.views import xmlrpcdispatcher
+ if name is not None:
+ xmlrpcdispatcher.register_function(func, name)
+
+ # Add a signature to the function
+ func._xmlrpc_signature = {
+ 'returns': returns,
+ 'args': args
+ }
+ return func
+
+ return _xmlrpc_func
+
+xmlrpc_func = xmlrpc_method
+
+
+# Don't use this decorator when your service is going to be
+# available in an unencrpted/untrusted network.
+# Configure HTTPS transport for your web server.
+def permission_required(perm=None):
+ """Decorator for authentication. Uses Django's built in authentication
+ framework to provide authenticated-only and permission-related access
+ to XML-RPC methods
+
+ perm
+ The permission (as a string) that the user must hold to be able to
+ call the function that is decorated with permission_required.
+ """
+ def _dec(func):
+ """An inner decorator. Adds the lookup code for the permission passed
+ in the outer method to the function passed to it.
+
+ func
+ The function to add the permission check to
+ """
+ def __authenticated_call(username, password, *args):
+ """Inner inner decorator. Adds username and password parameters to
+ a given XML-RPC function for authentication and permission
+ checking purposes and modifies the method signature appropriately
+
+ username
+ The username used for authentication
+
+ password
+ The password used for authentication
+ """
+ try:
+ user = authenticate(username=username, password=password)
+ if not user:
+ raise AuthenticationFailedException
+ if perm and not user.has_perm(perm):
+ raise PermissionDeniedException
+ except AuthenticationFailedException:
+ raise
+ except PermissionDeniedException:
+ raise
+ except:
+ raise AuthenticationFailedException
+ return func(user, *args)
+
+ # Update the function's XML-RPC signature, if the method has one
+ if hasattr(func, '_xmlrpc_signature'):
+ sig = func._xmlrpc_signature
+
+ # We just stick two string args on the front of sign['args'] to
+ # represent username and password
+ sig['args'] = (['string'] * 2) + sig['args']
+ __authenticated_call._xmlrpc_signature = sig
+
+ # Update the function's docstring
+ if func.__doc__:
+ __authenticated_call.__doc__ = func.__doc__ + \
+ "\nNote: Authentication is required."""
+ if perm:
+ __authenticated_call.__doc__ += ' this function requires ' \
+ + '"%s" permission.' % perm
+
+ return __authenticated_call
+
+ return _dec
diff --git a/gstudio/xmlrpc/dispatcher.py b/gstudio/xmlrpc/dispatcher.py
new file mode 100644
index 0000000..2829184
--- /dev/null
+++ b/gstudio/xmlrpc/dispatcher.py
@@ -0,0 +1,78 @@
+"""Offers a simple XML-RPC dispatcher for django_xmlrpc
+
+Author::
+ Graham Binns
+
+Credit must go to Brendan W. McAdams <brendan.mcadams@thewintergrp.com>, who
+posted the original SimpleXMLRPCDispatcher to the Django wiki:
+http://code.djangoproject.com/wiki/XML-RPC
+
+New BSD License
+===============
+Copyright (c) 2007, Graham Binns http://launchpad.net/~codedragon
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the <ORGANIZATION> nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+"""
+# This file is needed to run XMLRPC
+
+from inspect import getargspec
+from SimpleXMLRPCServer import SimpleXMLRPCDispatcher
+from django.conf import settings
+
+
+# If we need to debug, now we know
+DEBUG = hasattr(settings, 'XMLRPC_DEBUG') and settings.XMLRPC_DEBUG
+
+
+class DjangoXMLRPCDispatcher(SimpleXMLRPCDispatcher):
+ """A simple XML-RPC dispatcher for Django.
+
+ Subclassess SimpleXMLRPCServer.SimpleXMLRPCDispatcher for the purpose of
+ overriding certain built-in methods (it's nicer than monkey-patching them,
+ that's for sure).
+ """
+
+ def system_methodSignature(self, method):
+ """Returns the signature details for a specified method
+
+ method
+ The name of the XML-RPC method to get the details for
+ """
+ # See if we can find the method in our funcs dict
+ # TODO: Handle this better: We really should return something more
+ # formal than an AttributeError
+ func = self.funcs[method]
+
+ try:
+ sig = func._xmlrpc_signature
+ except:
+ sig = {
+ 'returns': 'string',
+ 'args': ['string' for arg in getargspec(func)[0]],
+ }
+
+ return [sig['returns']] + sig['args']
diff --git a/gstudio/xmlrpc/metaweblog.py b/gstudio/xmlrpc/metaweblog.py
index 5b273ea..4dd1fe1 100644
--- a/gstudio/xmlrpc/metaweblog.py
+++ b/gstudio/xmlrpc/metaweblog.py
@@ -72,6 +72,9 @@ from gstudio.managers import DRAFT, PUBLISHED
from django_xmlrpc.decorators import xmlrpc_func
from django.utils.datastructures import SortedDict
from gstudio.models import *
+from django.contrib.auth.models import User
+
+
# http://docs.nucleuscms.org/blog/12#errorcodes
LOGIN_ERROR = 801
@@ -377,15 +380,15 @@ def new_media_object(blog_id, username, password, media):
ContentFile(media['bits'].data))
return {'url': default_storage.url(path)}
-
+# Get functions start from here
@xmlrpc_func(returns='string', args='int')
def getNodetype(ssid):
- """Returns the nodetype of given ssid """
+ """Returns the nodetype of given nid """
try :
g = Nodetype.objects.get(id=ssid)
return (g.ref._meta.module_name)
except Nodetype.DoesNotExist :
- return "Node with the given ssid does not exist"
+ return "Node with the given nid does not exist"
@xmlrpc_func(returns='int', args='string')
def nidExists(nid):
@@ -396,156 +399,439 @@ def nidExists(nid):
except Nodetype.DoesNotExist:
return 0
-
-@xmlrpc_func(returns=['struct'],args=['string'])
+@xmlrpc_func(returns='struct',args=['string'])
def getinfoFromSSID(ssid_list) :
"""Given a list of ssids, it returns entire information of each ssid inside a dictionary with all the dictionaries contained within a list """
lst = []
for ssid in ssid_list :
+ try :
+ t = NID.objects.get(id = ssid)
try :
- p = Objecttype.objects.get(id = ssid)
+ p = Nodetype.objects.get(id = ssid)
nbh = p.ref.get_nbh
lst.append(str(nbh))
- except Objecttype.DoesNotExist :
- return "ssid",ssid,"Does not exist"
-
-
+ except Nodetype.DoesNotExist :
+ lst.append("Not of type Nodetype")
+ except NID.DoesNotExist :
+ lst.append("Node Does Not Exist")
return lst
+@xmlrpc_func(returns='struct', args=['string','string'])
+def getNeighbourhood(ssid_list, get_what):
+ d = {}
+ for ssid in ssid_list:
+ try:
+ p = NID.objects.get(id = ssid)
+ try :
+ t = Nodetype.objects.get(id = ssid)
+ if get_what=='rendered_nbh' :
+ nbh = p.ref.get_rendered_nbh
+ d[str(p.id)]= str(nbh)
+ elif get_what=='nbh':
+ nbh = p.ref.get_nbh
+ d[str(p.id)]= str(nbh)
+ except Nodetype.DoesNotExist :
+ d[str(ssid)] = "Not of type Nodetype"
+ except NID.DoesNotExist :
+ d[str(ssid)] = "Node Does Not Exist"
+ return d
+@xmlrpc_func(returns='struct', args=['string','string'])
+def getGbobjectNeighbourhood(ssid_list, get_what):
+ d = {}
+ for ssid in ssid_list:
+ try:
+ p = NID.objects.get(id = ssid)
+ try :
+ t = Gbobject.objects.get(id = ssid)
+ if get_what=='rendered_nbh' :
+ nbh = p.ref.get_rendered_nbh
+ d[str(p.id)]= str(nbh)
+ elif get_what=='nbh':
+ nbh = p.ref.get_nbh
+ d[str(p.id)]= str(nbh)
+ except Gbobject.DoesNotExist :
+ d[str(ssid)] = "Not of type Gboject"
+ except NID.DoesNotExist :
+ d[str(ssid)] = "Node Does Not Exist"
+ return d
-@xmlrpc_func(returns=['struct'], args=['string'])
+
+
+@xmlrpc_func(returns='struct', args=['string'])
+
+def getAttributeType(subjecttypelist):
+ """given the list of subjecttype inids the method returns all the attributetypes attached. """
+ d = {}
+ for s in subjecttypelist :
+ try :
+ l = []
+ p = NID.objects.get(id = s)
+ k = p.ref._meta.module_name
+ y = []
+ if( k == 'objecttype' or 'metatype' ) :
+ y = Attributetype.objects.filter(subjecttype_id = s)
+ for i in y :
+ l.append(str(i.id))
+ d[str(s)] = l
+ except NID.DoesNotExist :
+ d[str(s)] = "Node Does not Exist"
+ return d
+
+# Get all function for getting all nodetypes
+@xmlrpc_func(returns='struct', args='string')
+
+def getAll(nodetype):
+ """Given a class name it returns all the nids corresponding to their class name."""
+ d = {}
+ try :
+ p = eval(nodetype)
+ h = p.objects.all()
+ for i in h:
+ d[str(i.title)] = i.id
+ except NameError :
+ return "The class with the given name Does not exist"
+ return d
+
+
+@xmlrpc_func(returns='struct', args=['string'])
def getDatatype(attrtype_ssid_list) :
"""Given a list of attributessids, it returns its datatypes """
-
d = {}
- g = {}
for l in attrtype_ssid_list :
- p = NID.objects.get(id = l)
- n = p.ref._meta.module_name
- if n == 'attributetype' :
- ft = FIELD_TYPE_CHOICES[int(p.ref.dataType) - 1]
- d[str(p.id)] = ft[1]
- else :
- return " Node does not exist "
-
+ try :
+ p = NID.objects.get(id = l)
+ n = p.ref._meta.module_name
+ if n == 'attributetype' :
+ ft = FIELD_TYPE_CHOICES[int(p.ref.dataType) - 1]
+ d[str(p.id)] = ft[1]
+ else :
+ d[str(p.id)]= "Not a attributetype"
+ except NID.DoesNotExist :
+ d[str(l)] = "Node Does not Exist"
return d
-@xmlrpc_func(returns=['struct'], args=['string'])
+@xmlrpc_func(returns='struct', args=['string'])
def getAttributevalues(Attrssidlist) :
"""Given a list of attributessid, it returns their values """
-
d = {}
for l in Attrssidlist :
try :
- p = Attribute.objects.get(id = l)
- d[str(p.id)] = p.svalue
- except Attribute.DoesNotExist :
- return " Node does not exist"
-
+ p = NID.objects.get(id = l)
+ k = p.ref._meta.module_name
+ if ( k == 'attribute' ) :
+ t = Attribute.objects.get(id = l)
+ d[str(t.id)] = t.svalue
+ else :
+ d[str(l)] = "Not an Attribute"
+ except NID.DoesNotExist :
+ d[str(l)] = "Node Does Not Exist"
return d
-
-@xmlrpc_func(returns=['struct'], args=['string'])
-
-
-def getSubjecttypes( AttributeTypeNid ) :
- """Given an attributetypenid, it returns the subjecttype participating in the attributetype """
- d ={}
- for l in AttributeTypeNid :
- try :
- p = Attributetype.objects.get(id = l)
- n = p.ref.subjecttype_id
- s = NID.objects.get(id = n)
- d[str(s.title)]= n
- d['applicable_nodetypes'] = p.applicable_nodetypes
- except Attribute.DoesNotExist:
- return " Node does not exist "
- return d
-
-
-
-
-
-
-@xmlrpc_func(returns=['struct'], args=['string'])
+@xmlrpc_func(returns='struct', args='string')
+def getSubjecttypes( AttributeTypeNid ):
+ """Given an attributetypenid, it returns the subjecttype participating in the attributetype """
+ try :
+ d = {}
+ t = NID.objects.get(id = AttributeTypeNid)
+ k = t.ref._meta.module_name
+ if k == 'attributetype' :
+ p = Attributetype.objects.get(id = AttributeTypeNid)
+ n = p.subjecttype_id
+ d['stid'] = str(n)
+ d['applicable_nodetypes'] = p.applicable_nodetypes
+ else :
+ return "Not an Attributetype"
+ except NID.DoesNotExist:
+ return "Node does not exist"
+ return d
+
+@xmlrpc_func(returns='struct', args='string')
def getRoles(relationtypenid) :
"""given a relationtype nid this method returns the roles participating in the relationtype """
-
- d = {}
- p = Relationtype.objects.get(nodetype_ptr_id = relationtypenid)
-
- d['cardinality1 '] = p.left_cardinality
- d['cardinality2'] = p.right_cardinality
- d['rtid'] = p.nodetype_ptr_id
- d['applicablenodetype1'] = p.left_applicable_nodetypes
- d['applicablenodetype2'] = p.right_applicable_nodetypes
- d['subjecttype1'] = p.left_subjecttype_id
- d['subjecttype2'] = p.right_subjecttype_id
+ try :
+ t = NID.objects.get(id = relationtypenid)
+ k = t.ref._meta.module_name
+ d = {}
+ if k == 'relationtype' :
+ p = Relationtype.objects.get(nodetype_ptr_id = relationtypenid)
+ d['cardinality1 '] = p.left_cardinality
+ d['cardinality2'] = p.right_cardinality
+ d['rtid'] = p.nodetype_ptr_id
+ d['applicablenodetype1'] = p.left_applicable_nodetypes
+ d['applicablenodetype2'] = p.right_applicable_nodetypes
+ d['subjecttype1'] = p.left_subjecttype_id
+ d['subjecttype2'] = p.right_subjecttype_id
+ else :
+ return "Not a Relationtype"
+ except NID.DoesNotExist :
+ return "Node Does Not Exist "
return d
-
-@xmlrpc_func(returns=['struct'], args=['string'])
-
+@xmlrpc_func(returns='struct', args='string')
def getSubtypes(nodeid) :
"""Returns only the immediate subtype of the node specified"""
- i = 0
- l = []
- p = Objecttype.objects.get(id = nodeid)
- n = p.get_children()
- u = len(n)
- while u>0 :
- t = n[i].id
- l.append(str(t))
- i = i+1
- u = u-1
+ try :
+ y = NID.objects.get(id = nodeid)
+ try :
+ p = Nodetype.objects.get(id = nodeid)
+ n = p.get_children()
+ l = []
+ for i in n:
+ l.append(str(i.id))
+ except Nodetype.DoesNotExist :
+ return "Not of type nodetype"
+ except NID.DoesNotExist :
+ return " Node Does not exist"
return l
-
-
+@xmlrpc_func(returns='struct', args='string')
+
+def getAllSubtypes(nodeid) :
+ """Returns all the 'subtypes' of the node specified"""
+ try :
+ l = []
+ p = NID.objects.get(id = nodeid)
+ try :
+ k = Nodetype.objects.get(id = nodeid)
+ h = k.get_descendants()
+ for i in h :
+ l.append(str(i.id))
+ except Nodetype.DoesNotExist :
+ return "Not of type Nodetype"
+ except NID.DoesNotExist :
+ return "Node Does not Exist"
+ return l
@xmlrpc_func(returns=['struct'], args=['string'])
def getRestrictions(ATlist) :
"""Given a list of attributetype ssids, this method returns all the restrictions that the attributetypes have """
- u = {}
d = {}
- ft = []
+ ft = []
for a in ATlist :
- p = Attributetype.objects.get(id = a)
- ft = FIELD_TYPE_CHOICES[int(p.dataType)-1]
- u['datatype'] = ft[1]
- u['length'] = p.max_digits
- u['precision'] = p.decimal_places
- d[str(p.id)] = u
-
+ try :
+ k = NID.objects.get(id = a)
+ t = k.ref._meta.module_name
+ u = {}
+ if t == 'attributetype' :
+ p = Attributetype.objects.get(id = a)
+ ft = FIELD_TYPE_CHOICES[int(p.dataType)-1]
+ u['datatype'] = ft[1]
+ u['length'] = p.max_digits
+ u['precision'] = p.decimal_places
+ d[str(p.id)] = u
+ else :
+ d[str(a)] = "Not a Attributetype"
+ except NID.DoesNotExist :
+ d[str(a)] = "Node Does Not Exist"
return d
-@xmlrpc_func(returns='int', args='int')
+@xmlrpc_func(returns='int', args='string')
def getlatestSSID(nid) :
"""Given the id, this method will return the latest ssid of the given id """
+ try :
+ p = NID.objects.get(id = nid)
+ n = p.get_ssid
+ u = len(n)
+ if u == 0 :
+ return "No Snapshots created"
+ else :
+ r = n[u-1]
+ return r
+ except NID.DoesNotExist:
+ return "Node Does Not exist"
+
+@xmlrpc_func(returns='struct', args='int')
+def getAllSnapshots(nid) :
+ """Given the id, this method will return all the ssids of the given id """
+ try :
+ p = NID.objects.get(id = nid)
+ n = p.get_ssid
+ except NID.DoesNotExist :
+ return "Node Does Not Exist"
+ return n
+
+# Set functions begin from here
+@xmlrpc_func(returns='string', args=['struct','string'])
+def setAttributetype(d,objid) :
+
+ try :
+ p = NID.objects.get(id = objid)
+ t = p.ref._meta.module_name
+ w = []
+ if t == 'objecttype' or t == 'metatype' :
+ u = Attributetype.objects.filter(subjecttype_id = objid)
+ y = len(u)
+ r = 0
+ for i in u :
+ if str(i.title) == d['title'] :
+ return "Attributetype:",d['title']," already exists"
+ else :
+ r = r + 1
+ if r == y :
+ w = Attributetype(title = d['title'],applicable_nodetypes = d['nodetype'],subjecttype_id = objid,slug = d['slug'])
+ w.save()
+ return w.id
+ else :
+ return "Not a objecttype"
+ except NID.DoesNotExist :
+ return "Node Does Not Exist"
+
+
+
+@xmlrpc_func(returns='int', args=['struct','string'])
+
+def setRelationtype(d,uid) :
+
+ try :
+ k = NID.objects.get(id = uid)
+ f = k.ref._meta.module_name
+ r = 0
+ t = []
+ if ( f == 'objecttype' or f == 'metatype') :
+ p = Relationtype.objects.filter(left_subjecttype_id = uid)
+ u = len(p)
+ for n in p :
+ if (str(n.title) == d['title']) :
+ return "Relationtype :",d['title'],"already exists for",n.title
+ else :
+ r = r + 1
+ if r == u :
+ t = Relationtype(title = d['title'],left_subjecttype_id = uid,right_subjecttype_id = d['right_subjecttype_id'],
+ slug = d['slug'],inverse = d['inverse'])
+ t.save()
+ return t.id
+ else :
+ return " Not of type Objecttype or Metatype"
+ except NID.DoesNotExist :
+ return " Node does not Exist"
+
+@xmlrpc_func(returns='int', args=['struct','string'])
+
+def setObjecttype(d) :
+
+ k = Objecttype.objects.all()
+ u = len(k)
+ r = 0
+ t = []
+ for n in k :
+ if (str(n.title) == d['title']) :
+ return "Objecttype",d['title'],"already exists"
+ else :
+ r = r + 1
+ if r == u :
+ t = Objecttype(title = d['title'], slug = d['slug'])
+ t.save()
+
+ return t.id
+
+
+@xmlrpc_func(returns='int', args=['struct','string'])
+
+def setObject(d,o) :
+
+ try :
+ k = NID.objects.get(id = o)
+ t = k.ref._meta.module_name
+ u = 0
+ r = 0
+ y = []
+ h = []
+ if (t == 'objecttype' or t =='metatype') :
+ p = Objecttype.objects.get(id = o)
+ h = p.get_members
+ u = len(h)
+ for i in h :
+ if(str(i.title) == d['title']) :
+ return "Object",d['title'],"already exists for",p.title
+ else :
+ r = r + 1
+ if r == u :
+ y = Gbobject(title = d['title'],slug = d['slug'])
+ y.save()
+ y.objecttypes.add(p)
+ return y.id
+ else :
+ return "Not of type Objecttype or metatype"
+ except NID.DoesNotExist :
+ return "Node does not exist"
+
+@xmlrpc_func(returns='int', args=['struct','string'])
+
+def setAttribute(d,objid) :
+ try :
+ k = NID.objects.get(id = objid)
+ t = k.ref._meta.module_name
+ if t == 'objecttype' or t == 'metatype' :
+ p = Attributetype.objects.filter(subjecttype_id = objid)
+ s = []
+ for i in p :
+ if (str(i.title) == d['attributetype']) :
+ s = Attribute(attributetype_id = i.id,subject_id = d['subject_id'],svalue = d['svalue'])
+ s.save()
+ return s.id
+ else :
+ return " The objectid entered is not a objecttype or metatype"
+ except NID.DoesNotExist:
+ return "Node does not Exist"
+
+
+
+@xmlrpc_func(returns='int', args=['struct','string','string'])
+
+def setRelation(d,obj1,obj2) :
+ try :
+ p = Relationtype.objects.filter(left_subjecttype_id = obj1,right_subjecttype_id = obj2)
+ s = []
+ for i in p :
+ if (str(i.title) == d['relationtypename']) :
+ s = Relation(relationtype_id = i.id,left_subject_id = d['left_subject_id'],right_subject_id = d['right_subject_id'])
+ s.save()
+ return s.id
+ except Relationtype.DoesNotExist :
+ return "Relationtype Does Not Exist"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- p = NID.objects.get(id = nid)
- n = p.get_ssid
- u = len(n)
- r = n[u-1]
- return r
-@xmlrpc_func(returns=['struct'], args='int')
-def getAllSnapshots(nid) :
- """Given the id, this method will return all the ssids of the given id """
- p = NID.objects.get(id = nid)
- n = p.get_ssid
- return n
diff --git a/gstudio/xmlrpc/rpc/.gitignore b/gstudio/xmlrpc/rpc/.gitignore
new file mode 100644
index 0000000..7b4dcf6
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/.gitignore
@@ -0,0 +1,16 @@
+*~
+*.pyc
+TODO.txt
+README.html
+bin
+lib
+dist
+eggs
+parts
+build
+include
+downloads
+src_eggs
+develop-eggs
+.installed.cfg
+django_xmlrpc.egg-info/ \ No newline at end of file
diff --git a/gstudio/xmlrpc/rpc/LICENSE b/gstudio/xmlrpc/rpc/LICENSE
new file mode 100644
index 0000000..8efdc93
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2007-2008, Graham Binns
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of this application nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY GRAHAM BINNS ''AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL GRAHAM BINNS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/gstudio/xmlrpc/rpc/MANIFEST.in b/gstudio/xmlrpc/rpc/MANIFEST.in
new file mode 100644
index 0000000..2f4671b
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/MANIFEST.in
@@ -0,0 +1,3 @@
+include README.rst
+recursive-include django_xmlrpc/locale *
+recursive-include django_xmlrpc/templates *.html
diff --git a/gstudio/xmlrpc/rpc/README.rst b/gstudio/xmlrpc/rpc/README.rst
new file mode 100644
index 0000000..bcf4ac0
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/README.rst
@@ -0,0 +1,36 @@
+==============
+Django XML-RPC
+==============
+
+django_xmlrpc offers a means by which a Django developer can expose their views (or indeed any other function) using XML-RPC.
+
+This is a fork of the version hosted at : https://code.launchpad.net/~aartemenko/django-xmlrpc/svetlyak40wt compatible with Django > 1.1.
+
+.. contents::
+
+Installation
+============
+
+You could retrieve the last sources from http://github.com/Fantomas42/django-xmlrpc and run the installation script ::
+
+ $> python setup.py install
+
+or use pip ::
+
+ $> pip install -e git://github.com/Fantomas42/django-xmlrpc.git#egg=django-xmlrpc
+
+Usage
+=====
+
+Register **django_xmlrpc** in your INSTALLED_APPS section of your project' settings.
+
+Then register methods you want to handle like this in your project' settings. ::
+
+ >>> XMLRPC_METHODS = (('path.to.your.method', 'Method name'),
+ ... ('path.to.your.othermethod', 'Other Method name'),)
+
+Finally we need to register the url of the XML-RPC server.
+Insert something like this in your project's urls.py: ::
+
+ >>> url(r'^xmlrpc/$', 'django_xmlrpc.views.handle_xmlrpc', name='xmlrpc'),
+
diff --git a/gstudio/xmlrpc/rpc/__init__.py b/gstudio/xmlrpc/rpc/__init__.py
new file mode 100644
index 0000000..1d58f71
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/__init__.py
@@ -0,0 +1,44 @@
+"""__init__ module for the django_xmlrpc package
+
+Authors::
+ Graham Binns
+ Julien Fache
+
+Credit must go to Brendan W. McAdams <brendan.mcadams@thewintergrp.com>, who
+posted the original SimpleXMLRPCDispatcher to the Django wiki:
+http://code.djangoproject.com/wiki/XML-RPC
+
+New BSD License
+===============
+Copyright (c) 2007, Graham Binns http://launchpad.net/~codedragon
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the <ORGANIZATION> nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+"""
+VERSION = (0, 1, 1)
+__version__ = '.'.join(map(str, VERSION))
+
+from views import xmlrpcdispatcher
diff --git a/gstudio/xmlrpc/rpc/decorators.py b/gstudio/xmlrpc/rpc/decorators.py
new file mode 100644
index 0000000..4218a4f
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/decorators.py
@@ -0,0 +1,175 @@
+"""Offers decorators to make the use of django_xmlrpc a great deal simpler
+
+Authors::
+ Graham Binns,
+ Reza Mohammadi
+
+Credit must go to Brendan W. McAdams <brendan.mcadams@thewintergrp.com>, who
+posted the original SimpleXMLRPCDispatcher to the Django wiki:
+http://code.djangoproject.com/wiki/XML-RPC
+
+New BSD License
+===============
+Copyright (c) 2007, Graham Binns http://launchpad.net/~codedragon
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the <ORGANIZATION> nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+"""
+from xmlrpclib import Fault
+from django.contrib.auth import authenticate
+from django.utils.translation import gettext as _
+
+
+# Some constants for your pleasure
+#XXX: Any standardization?
+AUTHENTICATION_FAILED_CODE = 81
+PERMISSION_DENIED_CODE = 82
+
+
+class AuthenticationFailedException(Fault):
+ """An XML-RPC fault to be raised when a permission_required authentication
+ check fails
+
+ Author
+ """
+ def __init__(self):
+ Fault.__init__(self, AUTHENTICATION_FAILED_CODE,
+ _('Username and/or password is incorrect'))
+
+
+class PermissionDeniedException(Fault):
+ """An XML-RPC fault to be raised when a permission_required permission
+ check fails
+ """
+ def __init__(self):
+ Fault.__init__(self, PERMISSION_DENIED_CODE, _('Permission denied'))
+
+
+def xmlrpc_method(returns='string', args=None, name=None):
+ """Adds a signature to an XML-RPC function and register
+ it with the dispatcher.
+
+ returns
+ The return type of the function. This can either be a string
+ description (e.g. 'string') or a type (e.g. str, bool) etc.
+
+ args
+ A list of the types of the arguments that the function accepts. These
+ can be strings or types or a mixture of the two e.g.
+ [str, bool, 'string']
+ """
+ # Args should be a list
+ if args is None:
+ args = []
+
+ def _xmlrpc_func(func):
+ """Inner function for XML-RPC method decoration. Adds a signature to
+ the method passed to it.
+
+ func
+ The function to add the signature to
+ """
+ # If name is not None, register the method with the dispatcher.
+ from django_xmlrpc.views import xmlrpcdispatcher
+ if name is not None:
+ xmlrpcdispatcher.register_function(func, name)
+
+ # Add a signature to the function
+ func._xmlrpc_signature = {
+ 'returns': returns,
+ 'args': args
+ }
+ return func
+
+ return _xmlrpc_func
+
+xmlrpc_func = xmlrpc_method
+
+
+# Don't use this decorator when your service is going to be
+# available in an unencrpted/untrusted network.
+# Configure HTTPS transport for your web server.
+def permission_required(perm=None):
+ """Decorator for authentication. Uses Django's built in authentication
+ framework to provide authenticated-only and permission-related access
+ to XML-RPC methods
+
+ perm
+ The permission (as a string) that the user must hold to be able to
+ call the function that is decorated with permission_required.
+ """
+ def _dec(func):
+ """An inner decorator. Adds the lookup code for the permission passed
+ in the outer method to the function passed to it.
+
+ func
+ The function to add the permission check to
+ """
+ def __authenticated_call(username, password, *args):
+ """Inner inner decorator. Adds username and password parameters to
+ a given XML-RPC function for authentication and permission
+ checking purposes and modifies the method signature appropriately
+
+ username
+ The username used for authentication
+
+ password
+ The password used for authentication
+ """
+ try:
+ user = authenticate(username=username, password=password)
+ if not user:
+ raise AuthenticationFailedException
+ if perm and not user.has_perm(perm):
+ raise PermissionDeniedException
+ except AuthenticationFailedException:
+ raise
+ except PermissionDeniedException:
+ raise
+ except:
+ raise AuthenticationFailedException
+ return func(user, *args)
+
+ # Update the function's XML-RPC signature, if the method has one
+ if hasattr(func, '_xmlrpc_signature'):
+ sig = func._xmlrpc_signature
+
+ # We just stick two string args on the front of sign['args'] to
+ # represent username and password
+ sig['args'] = (['string'] * 2) + sig['args']
+ __authenticated_call._xmlrpc_signature = sig
+
+ # Update the function's docstring
+ if func.__doc__:
+ __authenticated_call.__doc__ = func.__doc__ + \
+ "\nNote: Authentication is required."""
+ if perm:
+ __authenticated_call.__doc__ += ' this function requires ' \
+ + '"%s" permission.' % perm
+
+ return __authenticated_call
+
+ return _dec
diff --git a/gstudio/xmlrpc/rpc/dispatcher.py b/gstudio/xmlrpc/rpc/dispatcher.py
new file mode 100644
index 0000000..f401457
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/dispatcher.py
@@ -0,0 +1,76 @@
+"""Offers a simple XML-RPC dispatcher for django_xmlrpc
+
+Author::
+ Graham Binns
+
+Credit must go to Brendan W. McAdams <brendan.mcadams@thewintergrp.com>, who
+posted the original SimpleXMLRPCDispatcher to the Django wiki:
+http://code.djangoproject.com/wiki/XML-RPC
+
+New BSD License
+===============
+Copyright (c) 2007, Graham Binns http://launchpad.net/~codedragon
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the <ORGANIZATION> nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+"""
+from inspect import getargspec
+from SimpleXMLRPCServer import SimpleXMLRPCDispatcher
+from django.conf import settings
+
+
+# If we need to debug, now we know
+DEBUG = hasattr(settings, 'XMLRPC_DEBUG') and settings.XMLRPC_DEBUG
+
+
+class DjangoXMLRPCDispatcher(SimpleXMLRPCDispatcher):
+ """A simple XML-RPC dispatcher for Django.
+
+ Subclassess SimpleXMLRPCServer.SimpleXMLRPCDispatcher for the purpose of
+ overriding certain built-in methods (it's nicer than monkey-patching them,
+ that's for sure).
+ """
+
+ def system_methodSignature(self, method):
+ """Returns the signature details for a specified method
+
+ method
+ The name of the XML-RPC method to get the details for
+ """
+ # See if we can find the method in our funcs dict
+ # TODO: Handle this better: We really should return something more
+ # formal than an AttributeError
+ func = self.funcs[method]
+
+ try:
+ sig = func._xmlrpc_signature
+ except:
+ sig = {
+ 'returns': 'string',
+ 'args': ['string' for arg in getargspec(func)[0]],
+ }
+
+ return [sig['returns']] + sig['args']
diff --git a/gstudio/xmlrpc/rpc/locale/fr/LC_MESSAGES/django.mo b/gstudio/xmlrpc/rpc/locale/fr/LC_MESSAGES/django.mo
new file mode 100644
index 0000000..06035ed
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/locale/fr/LC_MESSAGES/django.mo
Binary files differ
diff --git a/gstudio/xmlrpc/rpc/locale/fr/LC_MESSAGES/django.po b/gstudio/xmlrpc/rpc/locale/fr/LC_MESSAGES/django.po
new file mode 100644
index 0000000..091e086
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/locale/fr/LC_MESSAGES/django.po
@@ -0,0 +1,49 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: django-xmlrpc\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-07-31 15:33+0200\n"
+"PO-Revision-Date: 2010-07-31 15:50+0100\n"
+"Last-Translator: Fantomas <Fantomas42@gmail.com>\n"
+"Language-Team: Fantomas42 <fantomas42@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: French\n"
+"X-Poedit-Country: FRANCE\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: decorators.py:60
+msgid "Username and/or password is incorrect"
+msgstr "Nom d'utilisateur et/ou mot de passe incorrect"
+
+#: decorators.py:68
+msgid "Permission denied"
+msgstr "Permission refusée"
+
+#: templates/xmlrpc_get.html:4
+#: templates/xmlrpc_get.html.py:7
+msgid "XML-RPC Service"
+msgstr "Service XML-RPC"
+
+#: templates/xmlrpc_get.html:9
+msgid "You need to invoke this service using an XML-RPC Client."
+msgstr "Vous devez invoquer ce service en utilisant un client XML-RPC."
+
+#: templates/xmlrpc_get.html:11
+msgid "The following methods are available :"
+msgstr "Les méthodes suivantes sont disponibles :"
+
+#: templates/xmlrpc_get.html:17
+msgid "Types of argument"
+msgstr "Types d'argument"
+
+#: templates/xmlrpc_get.html:19
+msgid "Type of return"
+msgstr "Type de retour"
+
diff --git a/gstudio/xmlrpc/rpc/setup.py b/gstudio/xmlrpc/rpc/setup.py
new file mode 100644
index 0000000..10b4b92
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/setup.py
@@ -0,0 +1,31 @@
+import os
+from setuptools import setup, find_packages
+
+setup(name = 'django-xmlrpc',
+ version = '0.1.4',
+
+ description = 'XML-RPC Server App for the Django framework.',
+ long_description=open(os.path.join('README.rst')).read(),
+ keywords = 'django, service, xmlrpc',
+
+ author = 'Graham Binns',
+ author_email = 'graham.binns@gmail.com',
+ maintainer = 'Fantomas42',
+ maintainer_email = 'fantomas42@gmail.com',
+ url = 'http://github.com/Fantomas42/django-xmlrpc',
+
+ packages = find_packages(),
+ classifiers=[
+ 'Framework :: Django',
+ 'Development Status :: 5 - Production/Stable',
+ 'Environment :: Web Environment',
+ 'Programming Language :: Python',
+ 'Intended Audience :: Developers',
+ 'Operating System :: OS Independent',
+ 'Topic :: Software Development :: Libraries :: Python Modules',],
+
+ license = 'New BSD License',
+ include_package_data = True,
+ zip_safe=False
+ )
+
diff --git a/gstudio/xmlrpc/rpc/templates/xmlrpc_get.html b/gstudio/xmlrpc/rpc/templates/xmlrpc_get.html
new file mode 100644
index 0000000..4c9fdfc
--- /dev/null
+++ b/gstudio/xmlrpc/rpc/templates/xmlrpc_get.html
@@ -0,0 +1,26 @@
+{% extends "admin/base_site.html" %}
+{% load i18n %}
+
+{% block title %}{% trans "XML-RPC Service" %}{% endblock %}
+
+{% block content %}
+<h2>{% trans "XML-RPC Service" %}</h2>
+
+<p>{% trans "You need to invoke this service using an XML-RPC Client." %}</p>
+
+<h3>{% trans "The following methods are available :" %}</h3>
+
+{% for m in methods %}
+<div class="functions">
+ <h4>{{ m.0 }}</h4>
+ <div class="function_desc">
+ <strong>{% trans "Types of argument" %}{{ m.1.args|length|pluralize }} :</strong> {{ m.1.args }}
+ <br />
+ <strong>{% trans "Type of return" %} :</strong> {{ m.1.returns }}
+ <br />
+ <pre class="function_doc">{{ m.2 }}</pre>
+ </div>
+</div>
+{% endfor %}
+{% endblock %}
+
diff --git a/gstudio/xmlrpc/rpc/views.py b/gstudio/xmlrpc/rpc/views.py
index 8c66b38..1edfa37 100644
--- a/gstudio/xmlrpc/rpc/views.py
+++ b/gstudio/xmlrpc/rpc/views.py
@@ -156,24 +156,30 @@ if hasattr(settings, 'XMLRPC_METHODS'):
raise ImproperlyConfigured('Error registering XML-RPC method: ' \
+ '"%s" is not callable in module %s' % (attr, module))
- xmlrpcdispatcher.register_function(func, name)
+ #xmlrpcdispatcher.register_function(func, name)
xmlrpcdispatcher.register_function(getNodetype,'getNodetype')
- xmlrpcdispatcher.register_function(nidExists,'nidExists')
+ xmlrpcdispatcher.register_function(nidExists,'nidExists')
xmlrpcdispatcher.register_function(getinfoFromSSID,'getinfoFromSSID')
- #xmlrpcdispatcher.register_function(getNeighbourhood,'getNeighbourhood')
+ xmlrpcdispatcher.register_function(getNeighbourhood,'getNeighbourhood')
xmlrpcdispatcher.register_function(get_nbh,'get_nbh')
- #xmlrpcdispatcher.register_function(getallNodes,'getallNodes')
+ xmlrpcdispatcher.register_function(getAll,'getAll')
xmlrpcdispatcher.register_function(getDatatype,'getDatatype')
xmlrpcdispatcher.register_function(getAttributevalues,'getAttributevalues')
xmlrpcdispatcher.register_function(getSubjecttypes,'getSubjecttypes')
- #xmlrpcdispatcher.register_function(getAttributeType,'getAttributeType')
+ xmlrpcdispatcher.register_function(getAttributeType,'getAttributeType')
xmlrpcdispatcher.register_function(getRoles,'getRoles')
xmlrpcdispatcher.register_function(getSubtypes,'getSubtypes')
- #xmlrpcdispatcher.register_function(Suballtypes,'Suballtypes')
+ xmlrpcdispatcher.register_function(getAllSubtypes,'getAllSubtypes')
xmlrpcdispatcher.register_function(getRestrictions,'getRestrictions')
xmlrpcdispatcher.register_function(getlatestSSID,'getlatestSSID')
xmlrpcdispatcher.register_function(getAllSnapshots,'getAllSnapshots')
-
+ xmlrpcdispatcher.register_function(setAttributetype,'setAttributetype')
+ xmlrpcdispatcher.register_function(setRelationtype,'setRelationtype')
+ xmlrpcdispatcher.register_function(setObjecttype,'setObjecttype')
+ xmlrpcdispatcher.register_function(setObject,'setObject')
+ xmlrpcdispatcher.register_function(setAttribute,'setAttribute')
+ xmlrpcdispatcher.register_function(setRelation,'setRelation')
+ xmlrpcdispatcher.register_function(getGbobjectNeighbourhood,'getGbobjectNeighbourhood')
diff --git a/gstudio/xmlrpc/views.py b/gstudio/xmlrpc/views.py
new file mode 100644
index 0000000..0bcd4f0
--- /dev/null
+++ b/gstudio/xmlrpc/views.py
@@ -0,0 +1,193 @@
+"""Uses SimpleXMLRPCServer's SimpleXMLRPCDispatcher to serve XML-RPC requests
+
+Authors::
+ Graham Binns
+ Reza Mohammadi
+ Julien Fache
+
+Credit must go to Brendan W. McAdams <brendan.mcadams@thewintergrp.com>, who
+posted the original SimpleXMLRPCDispatcher to the Django wiki:
+http://code.djangoproject.com/wiki/XML-RPC
+
+New BSD License
+===============
+Copyright (c) 2007, Graham Binns http://launchpad.net/~codedragon
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the <ORGANIZATION> nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+"""
+import sys
+
+import django
+from django.conf import settings
+from django.template import RequestContext
+from django.shortcuts import render_to_response
+from django.core.exceptions import ImproperlyConfigured
+from django.http import HttpResponse, HttpResponseServerError
+from gstudio.xmlrpc.metaweblog import *
+from django.utils.datastructures import SortedDict
+try:
+ from django.views.decorators.csrf import csrf_exempt
+except ImportError:
+ from django.contrib.csrf.middleware import csrf_exempt
+
+from dispatcher import DjangoXMLRPCDispatcher
+from decorators import xmlrpc_func
+
+
+# We create a local DEBUG variable from the data in settings.
+DEBUG = hasattr(settings, 'XMLRPC_DEBUG') and settings.XMLRPC_DEBUG
+
+# Declare xmlrpcdispatcher correctly depending on our python version
+if sys.version_info[:3] >= (2, 5,):
+ xmlrpcdispatcher = DjangoXMLRPCDispatcher(allow_none=True, encoding=None)
+else:
+ xmlrpcdispatcher = DjangoXMLRPCDispatcher()
+
+
+def request_datas(request):
+ if django.VERSION[1] > 3:
+ return request.body
+ return request.raw_post_data
+
+
+@xmlrpc_func(returns='string', args=['string'])
+def test_xmlrpc(text):
+ """Simply returns the args passed to it as a string"""
+ return "Here's a response! %s" % str(text)
+
+
+@csrf_exempt
+def handle_xmlrpc(request):
+ """Handles XML-RPC requests. All XML-RPC calls should be forwarded here
+
+ request
+ The HttpRequest object that carries the XML-RPC call. If this is a
+ GET request, nothing will happen (we only accept POST requests)
+ """
+ if request.method == "POST":
+ if DEBUG:
+ print request_datas(request)
+ try:
+ response = HttpResponse(content_type='text/xml')
+ response.write(
+ xmlrpcdispatcher._marshaled_dispatch(request_datas(request)))
+ if DEBUG:
+ print response
+ return response
+ except:
+ return HttpResponseServerError()
+ else:
+ methods = xmlrpcdispatcher.system_listMethods()
+ method_list = []
+
+ for method in methods:
+ sig_ = xmlrpcdispatcher.system_methodSignature(method)
+ sig = {
+ 'returns': sig_[0],
+ 'args': ", ".join(sig_[1:]),
+ }
+
+ # this just reads your docblock, so fill it in!
+ method_help = xmlrpcdispatcher.system_methodHelp(method)
+
+ method_list.append((method, sig, method_help))
+
+ if hasattr(settings, 'XMLRPC_GET_TEMPLATE'):
+ # This behaviour is deprecated
+ if settings.DEBUG:
+ print "Use of settings.XMLRPC_GET_TEMPLATE is deprecated " \
+ + "Please update your code to use django_xmlrpc/templates"
+ template = settings.XMLRPC_GET_TEMPLATE
+ else:
+ template = 'xmlrpc_get.html'
+ return render_to_response(template, {'methods': method_list},
+ context_instance=RequestContext(request))
+
+
+# Load up any methods that have been registered with the server in settings
+if hasattr(settings, 'XMLRPC_METHODS'):
+ for path, name in settings.XMLRPC_METHODS:
+ # if "path" is actually a function, just add it without fuss
+ if callable(path):
+ xmlrpcdispatcher.register_function(path, name)
+ continue
+
+ # Otherwise we try and find something that we can call
+ i = path.rfind('.')
+ module, attr = path[:i], path[i + 1:]
+
+ try:
+ mod = __import__(module, globals(), locals(), [attr])
+ except ImportError, ex:
+ raise ImproperlyConfigured("Error registering XML-RPC method: " \
+ + "module %s can't be imported" % module)
+
+ try:
+ func = getattr(mod, attr)
+ except AttributeError:
+ raise ImproperlyConfigured('Error registering XML-RPC method: ' \
+ + 'module %s doesn\'t define a method "%s"' % (module, attr))
+
+ if not callable(func):
+ raise ImproperlyConfigured('Error registering XML-RPC method: ' \
+ + '"%s" is not callable in module %s' % (attr, module))
+
+ #xmlrpcdispatcher.register_function(func, name)
+# Registration for Gnowsys-studio XMLRPC functions
+ xmlrpcdispatcher.register_function(getNodetype,'getNodetype')
+ xmlrpcdispatcher.register_function(nidExists,'nidExists')
+ xmlrpcdispatcher.register_function(getinfoFromSSID,'getinfoFromSSID')
+ xmlrpcdispatcher.register_function(getNeighbourhood,'getNeighbourhood')
+ xmlrpcdispatcher.register_function(get_nbh,'get_nbh')
+ xmlrpcdispatcher.register_function(getAll,'getAll')
+ xmlrpcdispatcher.register_function(getDatatype,'getDatatype')
+ xmlrpcdispatcher.register_function(getAttributevalues,'getAttributevalues')
+ xmlrpcdispatcher.register_function(getSubjecttypes,'getSubjecttypes')
+ xmlrpcdispatcher.register_function(getAttributeType,'getAttributeType')
+ xmlrpcdispatcher.register_function(getRoles,'getRoles')
+ xmlrpcdispatcher.register_function(getSubtypes,'getSubtypes')
+ xmlrpcdispatcher.register_function(getAllSubtypes,'getAllSubtypes')
+ xmlrpcdispatcher.register_function(getRestrictions,'getRestrictions')
+ xmlrpcdispatcher.register_function(getlatestSSID,'getlatestSSID')
+ xmlrpcdispatcher.register_function(getAllSnapshots,'getAllSnapshots')
+ xmlrpcdispatcher.register_function(setAttributetype,'setAttributetype')
+ xmlrpcdispatcher.register_function(setRelationtype,'setRelationtype')
+ xmlrpcdispatcher.register_function(setObjecttype,'setObjecttype')
+ xmlrpcdispatcher.register_function(setObject,'setObject')
+ xmlrpcdispatcher.register_function(setAttribute,'setAttribute')
+ xmlrpcdispatcher.register_function(setRelation,'setRelation')
+ xmlrpcdispatcher.register_function(getGbobjectNeighbourhood,'getGbobjectNeighbourhood')
+
+
+
+
+
+
+# Finally, register the introspection and multicall methods with the XML-RPC
+# namespace
+xmlrpcdispatcher.register_introspection_functions()
+xmlrpcdispatcher.register_multicall_functions()
diff --git a/majorproj/gnowsys-studio/gstudio/templates/gstudio/base.html b/majorproj/gnowsys-studio/gstudio/templates/gstudio/base.html
new file mode 100644
index 0000000..db8b28b
--- /dev/null
+++ b/majorproj/gnowsys-studio/gstudio/templates/gstudio/base.html
@@ -0,0 +1,110 @@
+{% extends "gstudio/skeleton.html" %}
+{% load gstudio_tags i18n %}
+{% load objectapp_tags i18n %}
+
+ {% block meta %}
+ <meta name="generator" content="Objectapp {{ OBJECTAPP_VERSION }}" />
+{% endblock %}
+
+{% block link %}
+ <link rel="index" href="{% url objectapp_gbobject_archive_index %}" />
+ <link rel="EditURI" type="application/rsd+xml" href="{% url objectapp_rsd %}" />
+ <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="{% url objectapp_wlwmanifest %}" />
+ <link rel="search" type="application/opensearchdescription+xml" title="Objectapp's Blog" href="{% url objectapp_opensearch %}" />
+ <link rel="alternate" type="application/rss+xml" title="{% trans "RSS Feed of latest gbobjects" %}" href="{% url objectapp_gbobject_latest_feed %}" />
+ <!-- {% get_archives_gbobjects "objectapp/tags/archives_gbobjects_link.html" %} -->
+{% endblock %}
+
+{% block breadcrumbs %}
+ {% gstudio_breadcrumbs %}
+{% endblock %}
+
+{% block sidebar %}
+ <img src="{{ STATIC_URL }}objectapp/img/rss.png" alt="?" width="20" height="" />
+ <a href="{% url gstudio_nodetype_latest_feed %}" class="feeds"><h4>Rssfeed</h4></a>
+
+<div class="search">
+ <h3>{% trans "Search" %}</h3>
+ <form method="get" id="searchform" action="{% url nodes_search %}">
+ <p>
+ <input type="text" value="{% trans "Keywords..." %}" name="pattern" id="searchbox" onfocus="this.value=''" />
+ <input type="submit" class="submitbutton" value="OK" />
+ <a title="{% trans 'You can use - to exclude words or phrases, &quot;double quotes&quot; for exact phrases and the AND/OR boolean operators combined with parenthesis for complex searchs.' %}">
+ <img src="{{ STATIC_URL }}objectapp/img/help.png" alt="?" width="14" height="14" />
+ </a>
+ </p>
+ </form>
+</div>
+<!--
+<div class="objecttypes">
+ <h3>{% trans "Objecttypes" %}</h3>
+ {% get_objecttypes %}
+</div>
+-->
+<div class="authors">
+ <h3>{% trans "Authors" %}</h3>
+ {% get_authors %}
+</div>
+<div class="calendar">
+ <h3>{% trans "Calendar" %}</h3>
+ {% get_calendar_gbobjects %}
+</div>
+<div class="tags">
+ <h3>{% trans "Tags" %}</h3>
+ {% get_tag_cloud %}
+</div>
+<div class="recents">
+ <h3>{% trans "Recent gbobjects" %}</h3>
+ {% get_recent_gbobjects 5 %}
+</div>
+<div class="comments">
+ <h3>{% trans "Recent comments" %}</h3>
+ {% get_recent_comments 5 %}
+</div>
+<div class="linkbacks">
+ <h3>{% trans "Recent linkbacks" %}</h3>
+ {% get_recent_linkbacks 5 %}
+</div>
+<div class="randoms">
+ <h3>{% trans "Random gbobjects" %}</h3>
+ {% get_random_gbobjects 5 %}
+</div>
+<div class="populars">
+ <h3>{% trans "Popular gbobjects" %}</h3>
+ {% get_popular_gbobjects 5 %}
+</div>
+<div class="archives">
+ <h3>{% trans "Archives" %}</h3>
+ {% get_archives_gbobjects_tree %}
+</div>
+{% if user.is_authenticated %}
+<div class="tools">
+ <h3>{% trans "Tools" %}</h3>
+ <ul>
+ {% if perms.objectapp %}
+ <li>
+ <a href="{% url admin:app_list "objectapp" %}" title="{% trans "Dashboard" %}">
+ {% trans "Dashboard" %}
+ </a>
+ </li>
+ {% endif %}
+ {% if perms.objectapp.add_gbobject %}
+ <li>
+ <a href="{% url admin:objectapp_gbobject_add %}" title="{% trans "Post an gbobject" %}">
+ {% trans "Post an gbobject" %}
+ </a>
+ </li>
+ {% endif %}
+ {% block admin_tools %}
+ {% endblock %}
+ <li>
+ <a href="{% url admin:logout %}" title="{% trans "Log out" %}">
+ {% trans "Log out" %}
+ </a>
+ </li>
+ </ul>
+</div>
+{% endif %}
+{% endblock %}
+
+
diff --git a/objectapp/models.py b/objectapp/models.py
index 0d96dc5..495ac82 100644
--- a/objectapp/models.py
+++ b/objectapp/models.py
@@ -450,11 +450,11 @@ class Gbobject(Node):
def get_graph_json(self):
- # predicate_id={"plural":"a1","altnames":"a2","contains_members":"a3","contains_subtypes":"a4","prior_nodes":"a5", "posterior_nodes":"a6"}
+
g_json = {}
g_json["node_metadata"]= []
g_json["relations"]=[]
- g_json["relset"]=[]
+
global counter
global attr_counter
@@ -469,52 +469,57 @@ class Gbobject(Node):
- this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"expanded":"true"}
+ this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"refType":self.reftype}
g_json["node_metadata"].append(this_node)
- g_json["relset"].append(self.id)
+
for key in predicate_id.keys():
if nbh[key]:
try:
- #g_json[str(key)]=[]
- #g_json["relations"].append(key)
+
g_json["node_metadata"].append({"_id":str(predicate_id[key]),"screen_name":key})
- #g_json[str(key)].append({"from":self.id , "to":predicate_id[key],"value":1, "level":1 })
+
g_json["relations"].append({"from":self.id ,"type":str(key),"value":1,"to":predicate_id[key] })
+
if not isinstance(nbh[key],basestring):
for item in nbh[key]:
- if item.reftype!="Relation":
- # create nodes
-
- g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url(),"expanded":"false"})
- g_json["relset"].append(item.id)
- # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 })
- #create links
- g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id })
+ if isinstance(item,unicode):
+ g_json["node_metadata"].append({"_id":(str(attr_counter)+"b"),"screen_name":str(item)})
+ g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"b") })
+ attr_counter-=1
+ elif item.reftype!="Relation":
+ # create nodes
+
+ g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url()})
+ g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id })
+
+
+
else:
if item.left_subject.id==self.id:
item1=item.right_subject
+ flag=1
+
elif item.right_subject.id==self.id:
item1=item.left_subject
+ flag=0
- g_json["node_metadata"].append({"_id":str(item1.id),"screen_name":item1.title,"title":self.title, "url":item1.get_absolute_url(),"expanded":"false"})
+
+ g_json["node_metadata"].append({"_id":str(item1.id),"screen_name":item1.title,"title":self.title, "url":item1.get_absolute_url(),"refType":item.reftype,"inverse":item.relationtype.inverse,"flag":flag})
- # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 })
- #create links
+
g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item1.id })
else:
- #value={nbh["plural"]:"a4",nbh["altnames"]:"a5"}
- #this_node[str(key)]=nbh[key] key, nbh[key]
- #for item in value.keys():
- g_json["node_metadata"].append({"_id":(str(attr_counter)+"b"),"screen_name":nbh[key]})
- #g_json[str(key)].append({"from":predicate_id[key] , "to":attr_counter ,"value":1, "level":2 })
+
+ g_json["node_metadata"].append({"_id":(str(attr_counter)+"b"),"screen_name":nbh[key]})
g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"b") })
attr_counter-=1
- except:
- pass
+ except EOFError:
+ print "Oops! That was no valid number. Try again..."
+
#print g_json
return json.dumps(g_json)
diff --git a/objectapp/templates/objectapp/skeleton.html b/objectapp/templates/objectapp/skeleton.html
index d04b02f..78baf08 100644
--- a/objectapp/templates/objectapp/skeleton.html
+++ b/objectapp/templates/objectapp/skeleton.html
@@ -214,7 +214,10 @@ function init(a,b)
}
$(function fgraph() {
-
+neighbour_node= new Array();
+clicked_node=new Array();
+prev_node=new Array();
+neighbour_node= neighbour_node.concat({{object.id}});
$.getJSON('/nodetypes/graphs/graph_json/' + {{object.id}}, function (json1) {
metadata=json1.node_metadata;
@@ -350,26 +353,124 @@ var q = 110 + "%";
-$(window).bind('keydown',function(event){
- if(17==event.keyCode){
- new_g.on("click",function(d){
- if(d._id>0 && d.expanded=="false")
- {
- d3.select("#amazingViz").remove();
- d.expanded="true";
- $.getJSON('/nodetypes/graphs/graph_json/' + d._id , function (json2) {
- new_metadata=json2.node_metadata;
- new_relations=json2.relations;
- metadata=_.union(new_metadata,metadata);
- relations=_.union(new_relations,relations);
- init(metadata,relations);
- load(d._id)
- })
-
+$(window).bind('keydown',function(event) {
+ if(event.keyCode==17){
+
+ new_g.on("click",function(d){
+
+
+
+
+ if(d._id>0 && d.expanded=="true")
+ {
+
+ $.getJSON('/nodetypes/graphs/graph_json/' + d._id , function (json2) {
+ new_metadata=json2.node_metadata;
+
+ });
+
+ _.filter(new_metadata, function(e){if(e._id>0)
+ {
+ clicked_node=clicked_node.concat(e._id) ;
+ }
+ });
+
+
+ index = _.indexOf(neighbour_node , d._id);
+ prev_node=neighbour_node.slice(0,index);
+
+ neighbour_node = _.difference(neighbour_node,clicked_node) ;
+
+ neighbour_node= neighbour_node.concat(prev_node);
+ neighbour_node = _.uniq(neighbour_node);
+ metadata=[]
+ relations=[]
+ metadata1=[]
+ relations1=[]
+ for(i=0;i<(neighbour_node.length);i++)
+ {
+
+ d3.select("#amazingViz").remove();
+ g=neighbour_node[i]
+
+
+
+ $.ajax({
+ async:false,
+ url:'/nodetypes/graphs/graph_json/' + g ,
+ datatype:'json',
+ success:function (json2) {
+ new_metadata=json2.node_metadata;
+ new_relations=json2.relations;
+ metadata=_.union(new_metadata,metadata);
+
+ relations=_.union(new_relations,relations);
+ relations= check_Relation(metadata,relations);
+
+ }});
+
}
- });
-}
+ _.each(metadata, function(m){
+
+ for(i=0;i<neighbour_node.length;i++)
+ {
+ if(m._id==neighbour_node[i])
+ {m.expanded="true";}
+ else
+ {m.expanded="false";}
+ }
+
+
+ });
+
+ init(metadata,relations);
+ load({{object.id}}) ;
+
+
+
+ }
+
+
+
+
+ else if(d._id>0)
+ {
+
+ neighbour_node =neighbour_node.concat(d._id);
+
+ d3.select("#amazingViz").remove();
+
+ $.getJSON('/nodetypes/graphs/graph_json/' + d._id , function (json2) {
+ new_metadata=json2.node_metadata;
+ new_relations=json2.relations;
+
+ metadata=_.union(new_metadata,metadata);
+ relations=_.union(new_relations,relations);
+ relations= check_Relation(metadata,relations);
+
+ _.each(metadata, function(m){
+
+ for(i=0;i<neighbour_node.length;i++)
+ {
+ if(m._id==neighbour_node[i])
+ m.expanded="true";
+ }
+
+
+ });
+
+ init(metadata,relations);
+ load({{object.id}});
+
+
+ });
+
+ }
});
+}
+
+});
+
new_g.on("click", function(d) {
@@ -429,7 +530,8 @@ $(window).bind('keydown',function(event){
.style("fill-opacity", ".2")
.style("stroke", "#666")
.style("stroke-width", "1.5px")
- .style("fill", function color(d) {var e=(d._id).charAt(0); if (d.expanded=="true") return "red"; else return "none"});
+ .style("fill", function color(d) {if (d.expanded=="true" && d.refType=="Objecttype") return "blue"; else if(d.expanded=="true" && d.refType=="Gbobject") return "red"; else return "none"});
+
@@ -467,6 +569,35 @@ $(window).bind('keydown',function(event){
}
+function check_Relation(metadata,relations)
+{
+ _.each(metadata,function(d){
+ if (d.refType=="Relation")
+ {
+ a=d.inverse;
+ if (d.flag==1)
+ {
+ relations= _.reject(relations,function(e)
+ {
+ return e.type==a
+ });
+ }
+ else if (d.flag==0)
+ {
+ relations= _.reject(relations,function(e)
+ {
+ return e.type==d.screen_name
+ });
+ }
+ }
+
+ });
+ return relations;
+
+
+}
+
+
});
//fgraph({{object.id}});
diff --git a/setup.py b/setup.py
index 95de8f2..274a1ee 100644
--- a/setup.py
+++ b/setup.py
@@ -96,6 +96,7 @@ setup(name='django-gstudio',
include_package_data=True,
zip_safe=False,
install_requires=['BeautifulSoup>=3.2.0',
+ 'django>=1.4',
'django-mptt>=0.4.2',
'django-tagging>=0.3.1',
'django-xmlrpc>=0.1.3',
@@ -107,7 +108,6 @@ setup(name='django-gstudio',
'django-registration>=0.8',
'django-4store>=0.3',
'HTTP4Store>=0.2',
- 'html5lib>=0.95',
-
-
+ 'html5lib>=0.95',
+
])