configurationengine/doc/api/howto.rst
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
equal deleted inserted replaced
-1:000000000000 0:2e8eeb919028
       
     1 How to use cone APIs
       
     2 ====================
       
     3 
       
     4 The ConE public usage is described here with few common use cases as HowTo guides. 
       
     5 
       
     6 How to open a Configuration project
       
     7 -----------------------------------
       
     8 
       
     9 To open a project with ConE the api offers a Storage and Project classes. The Storage is the storage 
       
    10 agostic implemenetation for cpf/zip, filestorage and soon also a webstorage. To access anything in ConE 
       
    11 you must a project open. 
       
    12 
       
    13 .. code-block:: python 
       
    14 
       
    15     from cone.public import api,exceptions
       
    16     """ 
       
    17     The Storage access can be given as a extra parameter. It can have values r=read|w=write|a=append. 
       
    18     The default Storage access is read, which will fail if the storage does not exist.
       
    19     
       
    20     The Storage.open method will try which of the storage implementations can open that particular path.
       
    21     So for example the path can be 
       
    22     'foo/bar'  => Opened with FileStorage
       
    23     'test.cpf' => Opened with ZipStorage
       
    24     'test.zip' => Opened with ZipStorage 
       
    25     """
       
    26     
       
    27     """ Open a storage to current path and give it to the project. """
       
    28     prj = api.Project(api.Storage.open('.'))
       
    29     """ Create a new storage to a cpf file and give it to the project. """
       
    30     prj = api.Project(api.Storage.open('test.cpf', 'w'))
       
    31 
       
    32 
       
    33 How to access and manipulate Configurations
       
    34 -------------------------------------------
       
    35 
       
    36 A Configuration normally is presented inside the Configuration project as a .confml file. So when you
       
    37 are accessing configurations your are actually accessing confml files. The project offers funtionality to 
       
    38 get,add, remove configurations, which acts on root configurations inside the given project.
       
    39 
       
    40 How to List configuration's
       
    41 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
    42 
       
    43 .. code-block:: python 
       
    44 
       
    45     from cone.public import api,exceptions
       
    46     """ Create a storage to current path and give it to the project """
       
    47     prj = api.Project(api.Storage.open('.'))
       
    48     """ list and print all root configurations  """
       
    49     configlist = prj.list_configurations()
       
    50     for config in configlist:
       
    51         print config
       
    52 
       
    53 How to Open configuration
       
    54 ^^^^^^^^^^^^^^^^^^^^^^^^^
       
    55 
       
    56 
       
    57 .. code-block:: python 
       
    58 
       
    59     from cone.public import api,exceptions
       
    60     """ Create a storage to current path and give it to the project """
       
    61     prj = api.Project(api.Storage.open('.'))
       
    62     """ open a with name """
       
    63     """ 
       
    64     get_configuration raises a NotFound exception if the given configuration resource 
       
    65     is not found from Storage
       
    66     """
       
    67     try:
       
    68         myconfig = prj.get_configuration('myconfig.confml')
       
    69     except exceptions.NotFound:
       
    70         print "myconfml is not found from project!"
       
    71 
       
    72 How to remove Configuration
       
    73 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
    74 
       
    75 To remove a Configuration call  ``remove_configuration`` method of Configuration.
       
    76 
       
    77 .. code-block:: python
       
    78 
       
    79     myconfig = prj.get_configuration('myconfig.confml')
       
    80     myconfig.remove_configuration('my_remove.confml')
       
    81     """ finally save and close project """
       
    82     prj.save()
       
    83     prj.close()
       
    84 
       
    85 How to include a one Configuration to an other Configuration
       
    86 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
    87 
       
    88 To include a one Configuration to an other call ``include_configuration()`` method of Configuration and pass the filename of Configuration as a parameter.
       
    89 
       
    90 .. code-block:: python
       
    91 
       
    92     myconfig = prj.get_configuration('myconfig.confml')
       
    93     myconfig.include_configuration('../data.confml')
       
    94 
       
    95 Feature Access and manipulation
       
    96 -------------------------------
       
    97 
       
    98 How to add a Feature to Configuration
       
    99 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   100 
       
   101 To add a Feature to Configuration ``add_feature()`` method can be used.
       
   102 
       
   103 .. code-block:: python
       
   104 
       
   105     conf = api.Configuration("myconf.confml")
       
   106     conf.add_feature(api.Feature("feature1"))
       
   107 
       
   108 How to add a child Feature to Feature
       
   109 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   110 
       
   111 Childs can be added under Feature by ``add_feature()`` method and passing the parent Feature as a second paremeter:
       
   112 
       
   113 .. code-block:: python
       
   114 
       
   115     conf = api.Configuration("myconf.confml")
       
   116     conf.add_feature(api.Feature("feature1"))
       
   117     conf.add_feature(api.Feature("feature11"),'feature1')
       
   118 
       
   119 How to remove Feature from Configuration
       
   120 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   121 
       
   122 Features can be removed from Configuration by a following way:
       
   123 
       
   124 .. code-block:: python
       
   125 
       
   126     conf1 = api.Configuration("myconf.confml")
       
   127     conf1.add_feature('feature1.feature12') # Add feature to Configuration
       
   128     conf1.remove_feature('feature1.feature12') # and then remove it
       
   129     """ finally save and close project """
       
   130     prj.save()
       
   131     prj.close()
       
   132 
       
   133 
       
   134 How to get a Feature from Configuration
       
   135 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   136 
       
   137 Features can be accessed through View:
       
   138 
       
   139 .. code-block:: python
       
   140 
       
   141     from cone.public import api
       
   142     """ Create a storage to current path and give it to the project """
       
   143     prj = api.Project(api.Storage.open('.'))
       
   144     """ open the first configuration from the list """
       
   145     firstconfig = prj.get_configuration(configlist[0])
       
   146     """ get default view of first configuration """
       
   147     default_view = firstconfig.get_default_view()
       
   148     """ fetch example_feature1 from default view """
       
   149     feature = default_view.get_feature('example_feature1')
       
   150 
       
   151 Feature can be accessed also by a property:
       
   152 
       
   153 .. code-block:: python
       
   154 
       
   155     from cone.public import api
       
   156     """ Create a storage to current path and give it to the project """
       
   157     prj = api.Project(api.Storage.open('.'))
       
   158     """ open the first configuration from the list """
       
   159     firstconfig = prj.get_configuration(configlist[0])
       
   160     """ get default view of first configuration """
       
   161     default_view = firstconfig.get_default_view()
       
   162     """ fetch example_feature1 from default view """
       
   163     feature = default_view.example_feature1
       
   164 
       
   165 How to list all Features inside a certain View
       
   166 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   167 
       
   168 All Features can listed by calling ``list_all_features()`` method of View. Default view returns always 
       
   169 the view from the Root configuration point of view.
       
   170 
       
   171 .. code-block:: python
       
   172 
       
   173     from cone.public import api
       
   174     """ Create a storage to current path and give it to the project """
       
   175     prj = api.Project(api.Storage.open('.'))
       
   176     """ open the first configuration from the list """
       
   177     firstconfig = prj.get_configuration(configlist[0])
       
   178     """ get default view of first configuration """
       
   179     default_view = firstconfig.get_default_view()
       
   180     """ get all features in list from default view """
       
   181     features = default_view.list_all_features()
       
   182 
       
   183 All features can be listed also using some custom View:
       
   184 
       
   185 .. code-block:: python
       
   186 
       
   187     from cone.public import api
       
   188     """ Create a storage to current path and give it to the project """
       
   189     prj = api.Project(api.Storage.open('.'))
       
   190     """ open the first configuration from the list """
       
   191     firstconfig = prj.get_configuration(configlist[0])
       
   192     """ get my_view view to first configuration """
       
   193     view = firstconfig.get_view("my_view")
       
   194     """ fetch example_feature1 from my_view view """
       
   195     features = view.list_all_features()
       
   196 
       
   197 How to list Features inside a certain View
       
   198 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   199 
       
   200 To list immediate Features found under the certain View can be done by calling ``list_features()`` method.
       
   201 
       
   202 .. code-block:: python
       
   203 
       
   204     myconfig = api.Configuration("root.confml")
       
   205     view = myconfig.get_view("my_view")
       
   206     features = view.list_features()
       
   207 
       
   208 How to list all Features inside a certain Configuration
       
   209 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   210 
       
   211 To list all Features found under a certain Configuration can be done by calling ``list_all_features()`` method of Configuration.
       
   212 
       
   213 .. code-block:: python
       
   214 
       
   215     from cone.public import api
       
   216     """ Create a storage to current path and give it to the project """
       
   217     prj = api.Project(api.Storage.open('.'))
       
   218     """ open the first configuration from the list """
       
   219     firstconfig = prj.get_configuration(configlist[0])
       
   220     """ get all features in list from configuration """
       
   221     features = firstconfig.list_all_features()
       
   222 
       
   223 How to read a value for a specific Feature
       
   224 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   225 
       
   226 The a value of specific Feature can be read by calling ``get_value()`` method or using value property.
       
   227 
       
   228 .. code-block:: python
       
   229 
       
   230     value1 = my_feature1.get_value()
       
   231     value2 = my_feature2.value
       
   232 
       
   233 How to read a possible options of selection Feature
       
   234 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   235 
       
   236 To list possible options of selection Feature can be done by calling ``get_valueset()`` method of Feature.
       
   237 
       
   238 .. code-block:: python
       
   239 
       
   240     feature = api.Feature('my_selection_feature',type='selection')
       
   241     feature.add_option('one', '1')
       
   242     feature.add_option('two', '2')
       
   243     value_set = feature.get_valueset()
       
   244     feature.get_option('1').get_name() #returns  'one'
       
   245 
       
   246 How to read a type of specific Feature
       
   247 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   248 
       
   249 To read a specific type on Feature ``get_type()`` method or type property can be used. 
       
   250 
       
   251 .. code-block:: python
       
   252 
       
   253     feature = dview.get_feature('my_feature')
       
   254     feature.get_type() # returns type of the Feature
       
   255     feature.type # returns type of the Feature
       
   256 
       
   257 How to set a value for a specific Feature
       
   258 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   259 
       
   260 To set value for a specific Feature can be done by calling ``set_value()`` method or ``value`` property.
       
   261 
       
   262 .. code-block:: python
       
   263 
       
   264     feature1 = dview.get_feature('my_feature1')
       
   265     feature2 = dview.get_feature('my_feature2')
       
   266     feature1.set_value(123)
       
   267     feature2.value = "my_value"
       
   268     """ finally save and close project """
       
   269     prj.save()
       
   270     prj.close()
       
   271 
       
   272 Data access and manipulation
       
   273 ----------------------------
       
   274 The data access inside a configuration is possible, but basically this can be avoided by manipulating the values 
       
   275 of features, which actually modify the data elements inside the configuration.
       
   276 However if direct data element access is needed, here's how you can do it.
       
   277 
       
   278 How to add Data to Configuration
       
   279 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
   280 
       
   281 To add Data to Configuration can be done by calling ``add_data()`` method of Configuration: 
       
   282 
       
   283 .. code-block:: python
       
   284 
       
   285     conf = api.Configuration("data.confml")
       
   286     conf.add_data(api.Data(ref='feature1', value=123))
       
   287     conf.add_data(api.Data(fqn='feature1.feature12', value="test"))
       
   288     """ finally save and close project """
       
   289     prj.save()
       
   290     prj.close()
       
   291     
       
   292 
       
   293