Changeset 2367

Show
Ignore:
Timestamp:
07/28/07 03:23:12 (1 year ago)
Author:
abaumann
Message:

Update the ListWrapper? class, and use it wherever possible.

Rather than the previous prototype, where a new instance of the
wrapper class was instantiated on every access, this now overrides the
SWIG-generated constructors in a slightly messy way, but instantiates
the wrapper only once at construction time.

It doesn't make sense to define an add method, as that is for
numeric addition. It may make sense to define an append() method, but
I've left that for later (keeping the list wrapper read-only has some
benefits IMO).

Also provide default NULL values for some parameters, where that makes
sense, and clean up a couple of other minor formatting nits I noticed.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/wrapper/opensync-data.i

    r2223 r2367  
    198198        uid = property(get_uid, set_uid) 
    199199        changetype = property(get_changetype, set_changetype) 
    200         data = property(get_data,set_data) 
     200        data = property(get_data, set_data) 
    201201        objformat = property(get_objformat) 
    202202        objtype = property(get_objtype, set_objtype) 
  • trunk/wrapper/opensync-format.i

    r2366 r2367  
    100100 
    101101%pythoncode %{ 
    102         num_edges = property(num_edges) 
    103102        config = property(get_config, set_config) 
     103         
     104        # extend the SWIG-generated constructor, so that we can setup our list-wrapper classes 
     105        __oldinit = __init__ 
     106        def __init__(self, *args): 
     107                self.__oldinit(*args) 
     108                self.edges = _ListWrapper(self.num_edges, self.nth_edge) 
    104109%} 
    105110} 
     
    292297 
    293298%pythoncode %{ 
    294         @property 
    295         def objformats(self): 
    296                 return _ListWrapper(self.num_objformats, self.nth_objformat, self.register_objformat) 
    297  
    298         @property 
    299         def converters(self): 
    300                 return _ListWrapper(self.num_converters, self.nth_converter, self.register_converter) 
    301  
    302         @property 
    303         def filters(self): 
    304                 return _ListWrapper(self.num_filters, self.nth_filter, self.register_filter) 
     299        # extend the SWIG-generated constructor, so that we can setup our list-wrapper classes 
     300        __oldinit = __init__ 
     301        def __init__(self, *args): 
     302                self.__oldinit(*args) 
     303                self.objformats = _ListWrapper(self.num_objformats, self.nth_objformat) 
     304                self.converters = _ListWrapper(self.num_converters, self.nth_converter) 
     305                self.filters = _ListWrapper(self.num_filters, self.nth_filter) 
    305306%} 
    306307} 
  • trunk/wrapper/opensync-group.i

    r2359 r2367  
    1414        } 
    1515 
    16         void load_groups(const char *path) { 
     16        void load_groups(const char *path = NULL) { 
    1717                Error *err = NULL; 
    1818                bool ret = osync_group_env_load_groups(self, path, &err); 
     
    5151 
    5252%pythoncode %{ 
    53         num_groups = property(num_groups) 
     53        # extend the SWIG-generated constructor, so that we can setup our list-wrapper classes 
     54        __oldinit = __init__ 
     55        def __init__(self, *args): 
     56                self.__oldinit(*args) 
     57                self.groups = _ListWrapper(self.num_groups, self.nth_group) 
    5458%} 
    5559} 
     
    232236        name = property(get_name, set_name) 
    233237        configdir = property(get_configdir, set_configdir) 
    234         num_members = property(num_members) 
    235         num_objtypes = property(num_objtypes) 
    236         num_filters = property(num_filters) 
    237238        last_synchronization = property(get_last_synchronization, set_last_synchronization) 
    238239        use_merger = property(get_use_merger, set_use_merger) 
    239240        use_converter = property(get_use_converter, set_use_converter) 
     241         
     242        # extend the SWIG-generated constructor, so that we can setup our list-wrapper classes 
     243        __oldinit = __init__ 
     244        def __init__(self, *args): 
     245                self.__oldinit(*args) 
     246                self.members = _ListWrapper(self.num_members, self.nth_member) 
     247                self.objtypes = _ListWrapper(self.num_objtypes, self.nth_objtype) 
     248                self.filters = _ListWrapper(self.num_filters, self.nth_filter) 
    240249%} 
    241250} 
     
    407416        } 
    408417 
    409         %pythoncode %{ 
    410                 pluginname = property(get_pluginname, set_pluginname) 
    411                 name = property(get_name, set_name) 
    412                 configdir = property(get_configdir, set_configdir) 
    413                 config = property(get_config, set_config) 
    414                 id = property(get_id) 
    415                 num_objtypes = property(num_objtypes) 
    416                 start_type = property(get_start_type, set_start_type) 
    417                 capabilities = property(get_capabilities, set_capabilities) 
    418                 merger = property(get_merger) 
    419         %} 
     418%pythoncode %{ 
     419        pluginname = property(get_pluginname, set_pluginname) 
     420        name = property(get_name, set_name) 
     421        configdir = property(get_configdir, set_configdir) 
     422        config = property(get_config, set_config) 
     423        id = property(get_id) 
     424        start_type = property(get_start_type, set_start_type) 
     425        capabilities = property(get_capabilities, set_capabilities) 
     426        merger = property(get_merger) 
     427         
     428        # extend the SWIG-generated constructor, so that we can setup our list-wrapper classes 
     429        __oldinit = __init__ 
     430        def __init__(self, *args): 
     431                self.__oldinit(*args) 
     432                self.objtypes = _ListWrapper(self.num_objtypes, self.nth_objtype) 
     433%} 
    420434} 
  • trunk/wrapper/opensync-helper.i

    r1774 r2367  
    9696 
    9797%pythoncode %{ 
    98         num_entries = property(num_entries) 
     98        # extend the SWIG-generated constructor, so that we can setup our list-wrapper classes 
     99        __oldinit = __init__ 
     100        def __init__(self, *args): 
     101                self.__oldinit(*args) 
     102                self.entries = _ListWrapper(self.num_entries, self.nth_entry) 
    99103%} 
    100104} 
  • trunk/wrapper/opensync-merger.i

    r2223 r2367  
    4040%pythoncode %{ 
    4141        name = property(get_name) 
     42 
     43        # extend the SWIG-generated constructor, so that we can setup our list-wrapper classes 
     44        __oldinit = __init__ 
     45        def __init__(self, *args): 
     46                self.__oldinit(*args) 
     47                self.keys = _ListWrapper(self.get_key_count, self.get_nth_key) 
    4248%} 
    4349} 
  • trunk/wrapper/opensync-plugin.i

    r2223 r2367  
    110110        } 
    111111 
    112         void load(const char *path) { 
     112        void load(const char *path = NULL) { 
    113113                Error *err = NULL; 
    114114                bool ret = osync_plugin_env_load(self, path, &err); 
     
    154154 
    155155%pythoncode %{ 
    156         # map the nth_plugin() function to a list of all plugin
    157         # FIXME: ideally, this should be an iterator, and should allow appending etc. 
    158         def plugins(self): 
    159                 return [self.nth_plugin(n) for n in range(self.num_plugins())] 
    160         plugins = property(plugins
     156        # extend the SWIG-generated constructor, so that we can setup our list-wrapper classe
     157        __oldinit = __init__ 
     158        def __init__(self, *args): 
     159                self.__oldinit(*args) 
     160               self.plugins = _ListWrapper(self.num_plugins, self.nth_plugin
    161161%} 
    162162}; 
     
    299299        capabilities = property(get_capabilities, set_capabilities) 
    300300 
    301         # map the nth_objtype() function to a list of all objtypes 
    302         # FIXME: ideally, this should be an iterator, and should allow appending etc. 
    303         def objtypes(self): 
    304                 return [self.nth_objtype(n) for n in range(self.num_objtypes())] 
    305         objtypes = property(objtypes
     301        # extend the SWIG-generated constructor, so that we can setup our list-wrapper classes 
     302        __oldinit = __init__ 
     303        def __init__(self, *args): 
     304                self.__oldinit(*args) 
     305               self.objtypes = _ListWrapper(self.num_objtypes, self.nth_objtype
    306306%} 
    307307} 
     
    442442 
    443443        /* returns a list of strings */ 
     444/* 
    444445        PyObject *get_objformats() { 
    445446                const OSyncList *list = osync_objtype_sink_get_objformats(self); 
    446447                return osynclist_to_pylist(list, SWIGTYPE_p_char); 
    447448        } 
     449*/ 
    448450 
    449451%pythoncode %{ 
    450452        name = property(get_name, set_name) 
    451         num_objformats = property(num_objformats) 
    452453        enabled = property(is_enabled, set_enabled) 
    453454        available = property(is_available, set_available) 
     
    455456        read = property(get_read, set_read) 
    456457        slowsync = property(get_slowsync, set_slowsync) 
    457         objformats = property(get_objformats) 
    458458        callback_obj = property(get_callback_obj) 
     459         
     460        # extend the SWIG-generated constructor, so that we can setup our list-wrapper classes 
     461        __oldinit = __init__ 
     462        def __init__(self, *args): 
     463                self.__oldinit(*args) 
     464                self.objformats = _ListWrapper(self.num_objformats, self.nth_objformat) 
    459465%} 
    460466} 
  • trunk/wrapper/opensync.i

    r2365 r2367  
    6464        class _ListWrapper: 
    6565                """Utility class to wrap a common idiom in OpenSync as a Python list.""" 
    66                 def __init__(self, lenf, getf, addf=None): 
    67                         self.__len = lenf 
    68                         self.__get = getf 
    69                         self.__add = addf 
     66                def __init__(self, lenf, getf): 
     67                        self.__lenf = lenf 
     68                        self.__getf = getf 
    7069                 
    7170                def __len__(self): 
    72                         return self.__len() 
     71                        return self.__lenf() 
    7372                 
    7473                def __getitem__(self, num): 
     
    7776                        if num < 0 or num >= len(self): 
    7877                                raise IndexError 
    79                         return self.__get(num) 
    80                  
    81                 def __add__(self, element): 
    82                         if self.__add: 
    83                                 self.__add(element) 
    84                         else: 
    85                                 raise NotImplementedError 
     78                        return self.__getf(num) 
    8679%} 
    8780