This patch is preparatory for the OTP CLI patch.
>From 56389a8c6cdc811c7b94de9b037d7c859931b69f Mon Sep 17 00:00:00 2001
From: Nathaniel McCallum <npmccal...@redhat.com>
Date: Tue, 1 Oct 2013 13:57:24 -0400
Subject: [PATCH] Add optional_create flag

This permits IDs to be automatically generated if not specified.
---
 ipalib/crud.py       | 15 ++++++++++-----
 ipalib/parameters.py |  2 ++
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/ipalib/crud.py b/ipalib/crud.py
index 72ea142da74e2f088bda36a06653f9e201f5dcc8..81caf57b58a575d0e96bde9c282d497ca693e0a8 100644
--- a/ipalib/crud.py
+++ b/ipalib/crud.py
@@ -133,16 +133,21 @@ class Create(Method):
 
     has_output = output.standard_entry
 
+    def __clone(self, param, **kw):
+        if 'optional_create' in param.flags:
+            kw['required'] = False
+        return param.clone(**kw)
+
     def get_args(self):
         if self.obj.primary_key:
-            yield self.obj.primary_key.clone(attribute=True)
+            yield self.__clone(self.obj.primary_key, attribute=True)
         for arg in super(Create, self).get_args():
-            yield arg
+            yield self.__clone(arg)
 
     def get_options(self):
         if self.extra_options_first:
             for option in super(Create, self).get_options():
-                yield option
+                yield self.__clone(option)
         for option in self.obj.params_minus(self.args):
             attribute = 'virtual_attribute' not in option.flags
             if 'no_create' in option.flags:
@@ -153,10 +158,10 @@ class Create(Method):
                     autofill=False, alwaysask=True
                 )
             else:
-                yield option.clone(attribute=attribute)
+                yield self.__clone(option, attribute=attribute)
         if not self.extra_options_first:
             for option in super(Create, self).get_options():
-                yield option
+                yield self.__clone(option)
 
 
 class PKQuery(Method):
diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index 30b9c920db95a1ec891d1a71553f11d3db645ed5..e645b02a1d442e10c315b05e7bcda3469d33de4d 100644
--- a/ipalib/parameters.py
+++ b/ipalib/parameters.py
@@ -351,6 +351,8 @@ class Param(ReadOnly):
               not be given at all. All crud.Update commands automatically
               convert required parameters to `nonempty` ones, so the value
               can be unspecified (unchanged) but cannot be deleted.
+            * optional_create: do not require the parameter for crud.Create
+              based commands
       - hint: this attribute is currently not used
       - alwaysask: when enabled, CLI asks for parameter value even when the
         parameter is not `required`
-- 
1.8.3.1

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

Reply via email to