[Freeipa-devel] [PATCH 424] install: Introduce installer framework ipapython.install

Jan Cholasta jcholast at redhat.com
Wed Apr 29 16:25:17 UTC 2015


Dne 20.4.2015 v 16:56 Jan Cholasta napsal(a):
> Dne 20.4.2015 v 15:14 Martin Basti napsal(a):
>> On 17/04/15 16:15, Jan Cholasta wrote:
>>> Dne 16.4.2015 v 16:46 Jan Cholasta napsal(a):
>>>> Hi,
>>>>
>>>> the attached patch adds the basics of the new installer framework.
>>>>
>>>> As a next step, I plan to convert the install scripts to use the
>>>> framework with their old code (the old code will be gradually ported to
>>>> the framework later).
>>>>
>>>> (Note I didn't manage to write docstrings today, expect update
>>>> tomorrow.)
>>>
>>> Added some docstrings.
>>>
>>> Also updated the patch to reflect little brainstorming David and I had
>>> this morning.
>>>
>>>>
>>>> Honza
>>>
>>>
>>>
>> Hello, see comments bellow:
>>
>> 1) We started using new shorter License header in files:
>> #
>> # Copyright (C) 2015  FreeIPA Contributors see COPYING for license
>> #
>
> OK.
>
>>
>> 2) IMO this will not work, NoneType has no 'obj' attribute
>> +        else:
>> +            if isinstance(value, from_):
>> +                value = None
>> +                stack.append(value.obj)
>> +                continue
>
> Right.
>
>>
>> 3) Multiple inheritance. I do not like it much.
>> +class CompositeInstaller(Installer, CompositeConfigurator):
>
> I guess you are antagonistic to multiple inheritance because of how
> other languages (like C++) do it. In Python it can be pretty elegant and
> is basis for e.g. the mixin design pattern.
>
>>
>> Installer and CompositeConfigurator inherites from Configurator class,
>> and all of them implements _generator method.
>
> Both of them call super()._generator(), so it's no problem (same for
> other methods).
>
>>
>> If I understand correctly
>> (https://www.python.org/download/releases/2.3/mro/) the
>> Installer._generator method will be used in this case.
>> However in case when CompositeConfigurator has more levels (respectively
>> it is more specialized) of inheritance, it could take precedence and its
>> _generator method may be used instead.
>
> The order of precedence is defined by the order of base classes in the
> class definition.
>
>>
>> I'm afraid this may suddenly stop working.
>> Maybe I'm wrong, please fix me.
>
> As long as you call the super class, it will work fine.
>
>>
>> And Multiple inheritance is not easily readable, this is even a diamond
>> inheritance model.
>
> Cooperative inheritance is used by design and IMHO is easily readable if
> you know how to read it. Every class defines a single bit of behavior.
> Without cooperative inheritance, it would have to be hardcoded and/or
> hacked around, which I wanted to avoid.
>
> This blog post explains it nicely:
> <https://rhettinger.wordpress.com/2011/05/26/super-considered-super/>.
>

Updated patch attached.

Also attached is patch 425 which migrates ipa-server-install to the 
install framework.

-- 
Jan Cholasta
-------------- next part --------------
A non-text attachment was scrubbed...
Name: freeipa-jcholast-424.2-install-Introduce-installer-framework-ipapython.inst.patch
Type: text/x-patch
Size: 21174 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20150429/48e4cd39/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: freeipa-jcholast-425-install-Migrate-ipa-server-install-to-the-install-fr.patch
Type: text/x-patch
Size: 128357 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20150429/48e4cd39/attachment-0001.bin>


More information about the Freeipa-devel mailing list