Sfoglia il codice sorgente

HUE-8161 [metadata] Support creating a namespace property

     $.post("/metadata/api/navigator/namespace/property/create/", {
        "namespace": "huecatalog",
        "properties": ko.mapping.toJSON({
          "name" : "relatedEntities2",
          "displayName" : "Related objects",
          "description" : "My desc",
          "multiValued" : true,
          "maxLength" : 50,
          "pattern" : ".*",
          "enumValues" : null,
          "type" : "TEXT"
        })
      }, function(data) {
        console.log(ko.mapping.toJSON(data));
      });
Romain Rigaux 7 anni fa
parent
commit
6f207964c1

+ 29 - 0
desktop/libs/metadata/src/metadata/navigator_api.py

@@ -552,3 +552,32 @@ def get_namespace(request):
 
   return JsonResponse(response)
 
+
+@error_handler
+def create_namespace_property(request):
+  """
+  {
+  "name" : "relatedEntities",
+  "displayName" : "Related objects",
+  "creator" : "admin",
+  "description" : "My desc",,
+  "multiValued" : true,
+  "maxLength" : 50,
+  "pattern" : ".*",
+  "enumValues" : null,
+  "type" : "TEXT",
+  "createdDate" : "2018-04-02T22:36:19.001Z"
+}"""
+  response = {'status': -1}
+
+  api = NavigatorApi(request.user)
+  namespace = request.POST.get('namespace')
+  properties = json.loads(request.POST.get('properties', '{}'))
+
+  namespace = api.create_namespace_property(namespace, properties)
+
+  response['namespace'] = namespace
+  response['status'] = 0
+
+  return JsonResponse(response)
+

+ 10 - 0
desktop/libs/metadata/src/metadata/navigator_client.py

@@ -513,6 +513,16 @@ class NavigatorApi(object):
       raise NavigatorApiException(e.message)
 
 
+  def create_namespace_property(self, namespace, properties):
+    try:
+      data = json.dumps(properties)
+      return self._root.post('models/namespaces/%(namespace)s/properties' % {'namespace': namespace}, data=data, contenttype=_JSON_CONTENT_TYPE, clear_cookies=True)
+    except RestException, e:
+      msg = 'Failed to search for namespace: %s' % namespace
+      LOG.error(msg)
+      raise NavigatorApiException(e.message)
+
+
   def _get_boosted_term(self, term):
     return 'AND'.join([
       '(%s)' % 'OR'.join(['(%s:*%s*^%s)' % (field, term, weight) for (field, weight) in NavigatorApi.DEFAULT_SEARCH_FIELDS]),  # Matching fields

+ 1 - 0
desktop/libs/metadata/src/metadata/urls.py

@@ -32,6 +32,7 @@ urlpatterns = patterns('metadata.navigator_api',
   url(r'^api/navigator/delete_metadata_properties/?$', 'delete_metadata_properties', name='delete_metadata_properties'),
   url(r'^api/navigator/lineage/?$', 'get_lineage', name='get_lineage'),
   url(r'^api/navigator/namespace/?$', 'get_namespace', name='get_namespace'),
+  url(r'^api/navigator/namespace/property/create/?$', 'create_namespace_property', name='create_namespace_property'),
 )
 
 

+ 20 - 0
docs/sdk/sdk.md

@@ -995,6 +995,26 @@ How to create a new locale for an app::
       });
 </pre>
 
+ 
+### Creating a namespace property
+
+<pre>
+     $.post("/metadata/api/navigator/namespace/property/create/", {
+        "namespace": "huecatalog",
+        "properties": ko.mapping.toJSON({
+          "name" : "relatedEntities2",
+          "displayName" : "Related objects",
+          "description" : "My desc",
+          "multiValued" : true,
+          "maxLength" : 50,
+          "pattern" : ".*",
+          "enumValues" : null,
+          "type" : "TEXT"
+        })
+      }, function(data) {
+        console.log(ko.mapping.toJSON(data));
+      });
+</pre>
 
 # Testing