/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to mandos

  • Committer: Teddy Hogeborn
  • Date: 2015-05-31 17:46:06 UTC
  • Revision ID: teddy@recompile.se-20150531174606-a6h51c59ldl76hze
mandos: More Python 3 fixes.

mandos (alternate_dbus_interfaces/wrapper): If Python 3, then do not
                                            use black magic, and use
                                            correct function
                                            attributes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1111
1111
                interface_names.add(alt_interface)
1112
1112
                # Is this a D-Bus signal?
1113
1113
                if getattr(attribute, "_dbus_is_signal", False):
1114
 
                    # Extract the original non-method undecorated
1115
 
                    # function by black magic
1116
 
                    nonmethod_func = (dict(
1117
 
                        zip(attribute.func_code.co_freevars,
1118
 
                            attribute.__closure__))
1119
 
                                      ["func"].cell_contents)
 
1114
                    if sys.version == 2:
 
1115
                        # Extract the original non-method undecorated
 
1116
                        # function by black magic
 
1117
                        nonmethod_func = (dict(
 
1118
                            zip(attribute.func_code.co_freevars,
 
1119
                                attribute.__closure__))
 
1120
                                          ["func"].cell_contents)
 
1121
                    else:
 
1122
                        nonmethod_func = attribute
1120
1123
                    # Create a new, but exactly alike, function
1121
1124
                    # object, and decorate it to be a new D-Bus signal
1122
1125
                    # with the alternate D-Bus interface name
 
1126
                    if sys.version == 2:
 
1127
                        new_function = types.FunctionType(
 
1128
                            nonmethod_func.func_code,
 
1129
                            nonmethod_func.func_globals,
 
1130
                            nonmethod_func.func_name,
 
1131
                            nonmethod_func.func_defaults,
 
1132
                            nonmethod_func.func_closure)
 
1133
                    else:
 
1134
                        new_function = types.FunctionType(
 
1135
                            nonmethod_func.__code__,
 
1136
                            nonmethod_func.__globals__,
 
1137
                            nonmethod_func.__name__,
 
1138
                            nonmethod_func.__defaults__,
 
1139
                            nonmethod_func.__closure__)
1123
1140
                    new_function = (dbus.service.signal(
1124
 
                        alt_interface, attribute._dbus_signature)
1125
 
                                    (types.FunctionType(
1126
 
                                        nonmethod_func.func_code,
1127
 
                                        nonmethod_func.func_globals,
1128
 
                                        nonmethod_func.func_name,
1129
 
                                        nonmethod_func.func_defaults,
1130
 
                                        nonmethod_func.func_closure)))
 
1141
                        alt_interface,
 
1142
                        attribute._dbus_signature)(new_function))
1131
1143
                    # Copy annotations, if any
1132
1144
                    try:
1133
1145
                        new_function._dbus_annotations = dict(