@@ -112,6 +112,8 @@ def update_server(self):
112112 """
113113 """
114114
115+ changed = False
116+
115117 # Helper methods
116118 def updated_ids (items ):
117119 for value in items .itervalues ():
@@ -123,38 +125,64 @@ def removed_ids(items):
123125 if "updated" not in value :
124126 yield value ["id" ]
125127
128+ def has_updated_ids (items ):
129+ for _ in updated_ids (items ):
130+ return True
131+ return False
132+
133+ def has_removed_ids (items ):
134+ for _ in updated_ids (items ):
135+ return True
136+ return False
137+
138+ def should_update (items ):
139+ return has_updated_ids (items ) or has_removed_ids (items )
140+
126141 # Update the server
127142 server = self .provider .server
128143
129- # Databases
130- server .databases .update_ids ([self .database_id ])
131-
132144 # Items
133- database = server .databases [self .database_id ]
134- database .items .remove_ids (removed_ids (self .items_by_remote_id ))
135- database .items .update_ids (updated_ids (self .items_by_remote_id ))
145+ if should_update (self .items_by_remote_id ):
146+ database = server .databases [self .database_id ]
147+ database .items .remove_ids (removed_ids (self .items_by_remote_id ))
148+ database .items .update_ids (updated_ids (self .items_by_remote_id ))
149+
150+ changed = True
136151
137152 # Base container and container items
138- database .containers .update_ids ([self .base_container_id ])
139- base_container = database .containers [self .base_container_id ]
140- base_container .container_items .remove_ids (
141- removed_ids (self .base_container_items_by_item_id ))
142- base_container .container_items .update_ids (
143- updated_ids (self .base_container_items_by_item_id ))
153+ if should_update (self .base_container_items_by_item_id ):
154+ database .containers .update_ids ([self .base_container_id ])
155+ base_container = database .containers [self .base_container_id ]
156+ base_container .container_items .remove_ids (
157+ removed_ids (self .base_container_items_by_item_id ))
158+ base_container .container_items .update_ids (
159+ updated_ids (self .base_container_items_by_item_id ))
160+
161+ changed = True
144162
145163 # Other containers and container items
146- database .containers .remove_ids (
147- removed_ids (self .containers_by_remote_id ))
148- database .containers .update_ids (
149- updated_ids (self .containers_by_remote_id ))
150-
151- for container in self .containers_by_remote_id .itervalues ():
152- if "updated" not in container :
153- updated_ids = container ["container_items" ]
154- container = database .containers [container ["id" ]]
155-
156- container .container_items .remove_ids (container .container_items )
157- container .container_items .update_ids (updated_ids )
164+ if should_update (self .containers_by_remote_id ):
165+ database .containers .remove_ids (
166+ removed_ids (self .containers_by_remote_id ))
167+ database .containers .update_ids (
168+ updated_ids (self .containers_by_remote_id ))
169+
170+ for container in self .containers_by_remote_id .itervalues ():
171+ if "updated" not in container :
172+ updated_ids = container ["container_items" ]
173+ container = database .containers [container ["id" ]]
174+
175+ container .container_items .remove_ids (
176+ container .container_items )
177+ container .container_items .update_ids (updated_ids )
178+
179+ changed = True
180+
181+ # Only update database if any of the above parts have changed.
182+ if changed :
183+ server .databases .update_ids ([self .database_id ])
184+
185+ return changed
158186
159187 def sync_versions (self ):
160188 """
0 commit comments