[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34765] trunk/blender/release/scripts: patch [#25809] Auto-Registration as utility function.

Martin Poirier theeth at yahoo.com
Fri Feb 11 02:03:22 CET 2011


I'll be reverting this tomorrow evening if it's not done before that.

This is not the kind of change that you push in without warning anybody about it first and documenting things. This shows a complete lack of respect for everyone involved, especially after people just recently asked to be warned in case of changes even less breaking than this.

I can't think of a word to describe how seriously disappointed I am right now.

Martin

--- On Thu, 2/10/11, Doug Hammond <doughammond at hamsterfight.co.uk> wrote:

> From: Doug Hammond <doughammond at hamsterfight.co.uk>
> Subject: Re: [Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34765] trunk/blender/release/scripts: patch [#25809] Auto-Registration as utility function.
> To: bf-committers at blender.org
> Received: Thursday, February 10, 2011, 7:09 PM
> HEY!!
> 
> How about letting addon developers know how this new opt-in
> implementation
> is supposed to work before ploughing ahead and seriously
> breaking
> everything, again.
> 
> I'm not arguing here about whether this is better or not -
> but as it stands
> now I've no idea now how to initalise my addon !
> 
> Yours sincerely annoyed, again,
> Doug.
> 
> 
> On 10 February 2011 23:48, Campbell Barton <ideasman42 at gmail.com>
> wrote:
> 
> > Revision: 34765
> >
> > http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34765
> > Author:   campbellbarton
> > Date:     2011-02-10 23:48:22
> +0000 (Thu, 10 Feb 2011)
> > Log Message:
> > -----------
> > patch [#25809] Auto-Registration as utility function.
> > This removes auto-registration, committed by Martin
> r30961.
> > Realize this is a contentious topic but Brecht and
> myself both would rather
> > opt-in registration.
> >
> > TODO:
> > - addons need updating.
> > - class list will be modified to use weakrefs (should
> have been done for
> > existing system too).
> > - will move bpy.types.(un)register functions into
> > bpy.utils.(un)register_class, currently including
> these functions in a type
> > list is internally ugly, scripts which loop over types
> also need to check
> > for these.
> >
> > Revision Links:
> > --------------
> >
> > http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=30961
> >
> > Modified Paths:
> > --------------
> >   
> trunk/blender/release/scripts/io/netrender/ui.py
> >   
> trunk/blender/release/scripts/modules/bpy/utils.py
> >   
> trunk/blender/release/scripts/modules/bpy_types.py
> >   
> trunk/blender/release/scripts/op/animsys_update.py
> >   
> trunk/blender/release/scripts/op/fcurve_euler_filter.py
> >   
> trunk/blender/release/scripts/op/image.py
> >    trunk/blender/release/scripts/op/mesh.py
> >    trunk/blender/release/scripts/op/nla.py
> >   
> trunk/blender/release/scripts/op/object.py
> >   
> trunk/blender/release/scripts/op/object_align.py
> >   
> trunk/blender/release/scripts/op/object_randomize_transform.py
> >   
> trunk/blender/release/scripts/op/presets.py
> >   
> trunk/blender/release/scripts/op/screen_play_rendered_anim.py
> >   
> trunk/blender/release/scripts/op/sequencer.py
> >    trunk/blender/release/scripts/op/uv.py
> >   
> trunk/blender/release/scripts/op/uvcalc_follow_active.py
> >   
> trunk/blender/release/scripts/op/uvcalc_smart_project.py
> >   
> trunk/blender/release/scripts/op/vertexpaint_dirt.py
> >    trunk/blender/release/scripts/op/wm.py
> >   
> trunk/blender/release/scripts/ui/properties_animviz.py
> >   
> trunk/blender/release/scripts/ui/properties_data_armature.py
> >   
> trunk/blender/release/scripts/ui/properties_data_bone.py
> >   
> trunk/blender/release/scripts/ui/properties_data_camera.py
> >   
> trunk/blender/release/scripts/ui/properties_data_curve.py
> >   
> trunk/blender/release/scripts/ui/properties_data_empty.py
> >   
> trunk/blender/release/scripts/ui/properties_data_lamp.py
> >   
> trunk/blender/release/scripts/ui/properties_data_lattice.py
> >   
> trunk/blender/release/scripts/ui/properties_data_mesh.py
> >   
> trunk/blender/release/scripts/ui/properties_data_metaball.py
> >   
> trunk/blender/release/scripts/ui/properties_data_modifier.py
> >   
> trunk/blender/release/scripts/ui/properties_game.py
> >   
> trunk/blender/release/scripts/ui/properties_material.py
> >   
> trunk/blender/release/scripts/ui/properties_object.py
> >   
> trunk/blender/release/scripts/ui/properties_object_constraint.py
> >   
> trunk/blender/release/scripts/ui/properties_particle.py
> >   
> trunk/blender/release/scripts/ui/properties_physics_cloth.py
> >   
> trunk/blender/release/scripts/ui/properties_physics_common.py
> >   
> trunk/blender/release/scripts/ui/properties_physics_field.py
> >   
> trunk/blender/release/scripts/ui/properties_physics_fluid.py
> >   
> trunk/blender/release/scripts/ui/properties_physics_smoke.py
> >   
> trunk/blender/release/scripts/ui/properties_physics_softbody.py
> >   
> trunk/blender/release/scripts/ui/properties_render.py
> >   
> trunk/blender/release/scripts/ui/properties_scene.py
> >   
> trunk/blender/release/scripts/ui/properties_texture.py
> >   
> trunk/blender/release/scripts/ui/properties_world.py
> >   
> trunk/blender/release/scripts/ui/space_console.py
> >   
> trunk/blender/release/scripts/ui/space_dopesheet.py
> >   
> trunk/blender/release/scripts/ui/space_filebrowser.py
> >   
> trunk/blender/release/scripts/ui/space_graph.py
> >   
> trunk/blender/release/scripts/ui/space_image.py
> >   
> trunk/blender/release/scripts/ui/space_info.py
> >   
> trunk/blender/release/scripts/ui/space_logic.py
> >   
> trunk/blender/release/scripts/ui/space_nla.py
> >   
> trunk/blender/release/scripts/ui/space_node.py
> >   
> trunk/blender/release/scripts/ui/space_outliner.py
> >   
> trunk/blender/release/scripts/ui/space_sequencer.py
> >   
> trunk/blender/release/scripts/ui/space_text.py
> >   
> trunk/blender/release/scripts/ui/space_time.py
> >   
> trunk/blender/release/scripts/ui/space_userpref.py
> >   
> trunk/blender/release/scripts/ui/space_userpref_keymap.py
> >   
> trunk/blender/release/scripts/ui/space_view3d.py
> >   
> trunk/blender/release/scripts/ui/space_view3d_toolbar.py
> >
> > Modified:
> trunk/blender/release/scripts/io/netrender/ui.py
> >
> ===================================================================
> > ---
> trunk/blender/release/scripts/io/netrender/ui.py 
>   2011-02-10 20:54:02
> > UTC (rev 34764)
> > +++
> trunk/blender/release/scripts/io/netrender/ui.py 
>   2011-02-10 23:48:22
> > UTC (rev 34765)
> > @@ -363,16 +363,21 @@
> >
> >     draw =
> properties_render.RENDER_PT_output.draw
> >
> > -class NetRenderSettings(bpy.types.IDPropertyGroup):
> > -    pass
> >
> > -class NetRenderSlave(bpy.types.IDPropertyGroup):
> > -    pass
> > +def addProperties():
> > +    class
> NetRenderSettings(bpy.types.IDPropertyGroup):
> > +        pass
> >
> > -class NetRenderJob(bpy.types.IDPropertyGroup):
> > -    pass
> > +    class
> NetRenderSlave(bpy.types.IDPropertyGroup):
> > +        pass
> >
> > -def addProperties():
> > +    class
> NetRenderJob(bpy.types.IDPropertyGroup):
> > +        pass
> > +
> > +    bpy.types.register(NetRenderSettings)
> > +    bpy.types.register(NetRenderSlave)
> > +    bpy.types.register(NetRenderJob)
> > +
> >     from bpy.props import
> PointerProperty, StringProperty, BoolProperty,
> > EnumProperty, IntProperty, CollectionProperty
> >     bpy.types.Scene.network_render
> =
> > PointerProperty(type=NetRenderSettings, name="Network
> Render",
> > description="Network Render Settings")
> >
> >
> > Modified:
> trunk/blender/release/scripts/modules/bpy/utils.py
> >
> ===================================================================
> > ---
> trunk/blender/release/scripts/modules/bpy/utils.py 
> 2011-02-10 20:54:02
> > UTC (rev 34764)
> > +++
> trunk/blender/release/scripts/modules/bpy/utils.py 
> 2011-02-10 23:48:22
> > UTC (rev 34765)
> > @@ -100,9 +100,6 @@
> >     import traceback
> >     import time
> >
> > -    # must be set back to True on exits
> > -    _bpy_types._register_immediate = False
> > -
> >     t_main = time.time()
> >
> >     loaded_modules = set()
> > @@ -112,7 +109,6 @@
> >
> >     if reload_scripts:
> >     
>    _bpy_types.TypeMap.clear()
> > -       
> _bpy_types.PropertiesMap.clear()
> >
> >         # just unload,
> dont change user defaults, this means we can sync to
> > reload.
> >         # note that they
> will only actually reload of the modification time
> > changes.
> > @@ -121,7 +117,6 @@
> >         
>    addon_disable(module_name,
> default_set=False)
> >
> >     def
> register_module_call(mod):
> > -       
> _bpy_types._register_module(mod.__name__)
> >         register =
> getattr(mod, "register", None)
> >         if register:
> >         
>    try:
> > @@ -132,7 +127,6 @@
> >         
>    print("\nWarning! '%s' has no register
> function, this is now a
> > requirement for registerable scripts." %
> mod.__file__)
> >
> >     def
> unregister_module_call(mod):
> > -       
> _bpy_types._unregister_module(mod.__name__)
> >         unregister =
> getattr(mod, "unregister", None)
> >         if unregister:
> >         
>    try:
> > @@ -199,8 +193,6 @@
> >             
>    for mod in modules_from_path(path,
> loaded_modules):
> >               
>      test_register(mod)
> >
> > -    _bpy_types._register_immediate = True
> > -
> >     # deal with addons seperately
>>    addon_reset_all(reload_scripts)
> >
> > @@ -367,12 +359,9 @@
> >     import bpy_types as
> _bpy_types
> >     import imp
> >
> > -    _bpy_types._register_immediate = False
> > -
> >     def handle_error():
> >         import
> traceback
> >     
>    traceback.print_exc()
> > -       
> _bpy_types._register_immediate = True
> >
> >     # reload if the mtime changes
> >     mod =
> sys.modules.get(module_name)
> > @@ -402,19 +391,13 @@
> >         return None
> >
> >     # 2) try register collected
> modules
> > -    try:
> > -       
> _bpy_types._register_module(module_name)
> > -    except:
> > -        handle_error()
> > -        del
> sys.modules[module_name]
> > -        return None
> > +    # removed, addons need to handle own
> registration now.
> >
> >     # 3) try run the modules
> register function
> >     try:
> >         mod.register()
> >     except:
> >         handle_error()
> > -       
> _bpy_types._unregister_module(module_name)
> >         del
> sys.modules[module_name]
> >         return None
> >
> > @@ -426,8 +409,6 @@
> >         
>    ext =
> _bpy.context.user_preferences.addons.new()
> >         
>    ext.module = module_name
> >
> > -    _bpy_types._register_immediate = True
> > -
> >     mod.__addon_enabled__ = True
> >
> >     if _bpy.app.debug:
> > @@ -454,7 +435,6 @@
> >     
>    mod.__addon_enabled__ = False
> >
> >         try:
> > -           
> _bpy_types._unregister_module(module_name, free=False) 
> # dont
> > free because we may want to enable again.
> >         
>    mod.unregister()
> >         except:
> >         
>    traceback.print_exc()
> > @@ -594,3 +574,42 @@
> >             
>    target_path = ""
> >
> >     return target_path
> > +
> > +
> > +_register_types = _bpy.types.Panel,
> _bpy.types.Operator, _bpy.types.Menu,
> > _bpy.types.Header, _bpy.types.RenderEngine
> > +
> > +
> > +def register_module(module):
> > +    import traceback
> > +    total = 0
> > +    register = _bpy.types.register
> > +    for cls, path, line in
> _bpy_types.TypeMap.get(module, ()):
> > +        if not "bl_rna" in
> cls.__dict__:
> > +            total += 1
> > +            try:
> > +             
>   register(cls)
> > +            except:
> > +             
>   print("bpy.utils.register_module(): failed to
> registering
> > class '%s.%s'" % (cls.__module__, cls.__name__))
> > +             
>   print("\t", path, "line", line)
> > +             
>   traceback.print_exc()
> > +
> > +    if total == 0:
> > +        raise
> Exception("register_module(%r): defines no classes" %
> > module)
> > +
> > +
> > +def unregister_module(module):
> > +    import traceback
> > +    unregister = _bpy.types.unregister
> > +    total = 0
> > +    for cls, path, line in
> _bpy_types.TypeMap.get(module, ()):
> > +        if "bl_rna" in
> cls.__dict__:
> > +            total += 1
> > +            try:
> > +             
>   unregister(cls)
> > +            except:
> > +             
>   print("bpy.utils.unregister_module(): failed to
> > unregistering class '%s.%s'" % (cls.__module__,
> cls.__name__))
> > +             
>   print("\t", path, "line", line)
> > +             
>   traceback.print_exc()
> > +
> > +    if total == 0:
> > +        raise
> Exception("unregister_module(%r): defines no classes" %
> > module)
> >
> > Modified:
> trunk/blender/release/scripts/modules/bpy_types.py
> >
> ===================================================================
> > ---
> trunk/blender/release/scripts/modules/bpy_types.py 
> 2011-02-10 20:54:02
> > UTC (rev 34764)
> > +++
> trunk/blender/release/scripts/modules/bpy_types.py 
> 2011-02-10 23:48:22
> > UTC (rev 34765)
> > @@ -550,87 +550,35 @@
> >         import bpy
> >         return tuple(obj
> for obj in bpy.data.objects if self in [cont.text
> > for cont in obj.game.controllers if cont.type ==
> 'PYTHON'])
> >
> > -import collections
> > -
> > +# values are module: [(cls, path, line), ...]
> >  TypeMap = {}
> > -# Properties (IDPropertyGroup) are different from
> types because they need
> > to be registered
> > -# before adding sub properties to them, so they are
> registered on
> > definition
> > -# and unregistered on unload
> > -PropertiesMap = {}
> >
> > -# Using our own loading function we set this to
> false
> > -# so when running a script directly in the text
> editor
> > -# registers moduals instantly.
> > -_register_immediate = True
> >
> > -
> > -def _unregister_module(module, free=True):
> > -    for t in TypeMap.get(module, ()):
> > -        try:
> > -           
> bpy_types.unregister(t)
> > -        except:
> > -            import
> traceback
> > -           
> print("bpy.utils._unregister_module(): Module '%s' failed
> to
> > unregister class '%s.%s'" % (module, t.__module__,
> t.__name__))
> > -           
> traceback.print_exc()
> > -
> > -    if free == True and module in TypeMap:
> > -        del TypeMap[module]
> > -
> > -    for t in PropertiesMap.get(module,
> ()):
> > -        try:
> > -           
> bpy_types.unregister(t)
> > -        except:
> > -            import
> traceback
> > -           
> print("bpy.utils._unload_module(): Module '%s' failed to
> > unregister class '%s.%s'" % (module, t.__module__,
> t.__name__))
> > -           
> traceback.print_exc()
> > -
> > -    if free == True and module in
> PropertiesMap:
> > -        del
> PropertiesMap[module]
> > -
> > -
> > -def _register_module(module):
> > -    for t in TypeMap.get(module, ()):
> > -        try:
> > -           
> bpy_types.register(t)
> > -        except:
> > -            import
> traceback
> > -            import sys
> > -           
> print("bpy.utils._register_module(): '%s' failed to
> register
> > class '%s.%s'" % (sys.modules[module].__file__,
> t.__module__, t.__name__))
> > -           
> traceback.print_exc()
> > -
> > -
> >  class RNAMeta(type):
> > -    @classmethod
> > -    def _register_immediate(cls):
> > -        return
> _register_immediate
> > -
> >     def __new__(cls, name, bases,
> classdict, **args):
> > +        import traceback
> >         result =
> type.__new__(cls, name, bases, classdict)
> >         if bases and
> bases[0] != StructRNA:
> >         
>    module = result.__module__
> >
> > -            ClassMap =
> TypeMap
> > -
> > -            # Register
> right away if needed
> > -            if
> cls._register_immediate():
> > -             
>   bpy_types.register(result)
> > -             
>   ClassMap = PropertiesMap
> > -
> >             #
> first part of packages only
> >             if
> "." in module:
> >             
>    module = module[:module.index(".")]
> >
> > -           
> ClassMap.setdefault(module, []).append(result)
> > +            sf =
> traceback.extract_stack(limit=2)[0]
> >
> > +           
> TypeMap.setdefault(module, []).append((result, sf[0],
> sf[1]))
> > +
> >         return result
> >
> >
> > -class RNAMetaRegister(RNAMeta, StructMetaIDProp):
> > -    @classmethod
> > -    def _register_immediate(cls):
> > -        return True
> > +import collections
> >
> >
> > +class RNAMetaIDProp(RNAMeta, StructMetaIDProp):
> > +    pass
> > +
> > +
> >  class OrderedMeta(RNAMeta):
> >
> >     def __init__(cls, name, bases,
> attributes):
> > @@ -685,7 +633,7 @@
> >         return
> ops.macro_define(self, opname)
> >
> >
> > -class IDPropertyGroup(StructRNA,
> metaclass=RNAMetaRegister):
> > +class IDPropertyGroup(StructRNA,
> metaclass=RNAMetaIDProp):
> >         __slots__ = ()
> >
> >
> >
> > Modified:
> trunk/blender/release/scripts/op/animsys_update.py
> >
> ===================================================================
> > ---
> trunk/blender/release/scripts/op/animsys_update.py 
> 2011-02-10 20:54:02
> > UTC (rev 34764)
> > +++
> trunk/blender/release/scripts/op/animsys_update.py 
> 2011-02-10 23:48:22
> > UTC (rev 34765)
> > @@ -701,4 +701,8 @@
> >
> >
> >  def register():
> > -    pass
> > +    bpy.utils.register_module(__name__)
> > +
> > +
> > +def unregister():
> > +    bpy.utils.unregister_module(__name__)
> >
> > Modified:
> trunk/blender/release/scripts/op/fcurve_euler_filter.py
> >
> ===================================================================
> > ---
> trunk/blender/release/scripts/op/fcurve_euler_filter.py 
>    2011-02-10
> > 20:54:02 UTC (rev 34764)
> > +++
> trunk/blender/release/scripts/op/fcurve_euler_filter.py 
>    2011-02-10
> > 23:48:22 UTC (rev 34765)
> > @@ -78,13 +78,12 @@
> >         main(context)
> >         return
> {'FINISHED'}
> >
> > -
> >  def register():
> > -    pass
> > +    bpy.utils.register_module(__name__)
> >
> >
> >  def unregister():
> > -    pass
> > +    bpy.utils.unregister_module(__name__)
> >
> >  if __name__ == "__main__":
> >     register()
> >
> > Modified: trunk/blender/release/scripts/op/image.py
> >
> ===================================================================
> > ---
> trunk/blender/release/scripts/op/image.py   2011-02-10
> 20:54:02 UTC
> > (rev 34764)
> >
> > @@ Diff output truncated at 10240 characters. @@
> > _______________________________________________
> > Bf-blender-cvs mailing list
> > Bf-blender-cvs at blender.org
> > http://lists.blender.org/mailman/listinfo/bf-blender-cvs
> >
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
> 




More information about the Bf-committers mailing list