Changeset 166
- Timestamp:
- Tue Aug 22 22:03:45 2006
- Files:
-
- server/trunk/update/client/Commit Changes to Server.py (modified) (diff)
- server/trunk/update/client/Add Database to Server.py (modified) (diff)
- server/trunk/update/client/Download Database from Server.py (modified) (diff)
- server/trunk/update/client/Update with Changes from Server.py (deleted)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
server/trunk/update/client/Commit Changes to Server.py
r134 r166 29 29 # 060407 - More debuging changes 30 30 # 060708 - Some fixes to foreign key corrections 31 # 060821 - fixes to logic that applies changes from server 31 32 32 33 debug = 1 … … 54 55 55 56 parms = { # data to make sure were are talking to the right server 56 'ScriptVersion': '2006-0 7-08',57 'ScriptVersion': '2006-08-22', 56 57 'FileSignature': Data.Other.get('FileSignature'), 57 58 'Key': Data.Other.get('ServerKey'), # should be saved like file signature … … 95 96 return old, new 96 97 98 def LocalRowsAdded(): 99 """Have we added any rows that the server doesn't know about?""" 100 count = 0 101 old_nextID, new_nextID = SplitOldNew(Data.NextID) 102 for k, v in new_nextID.iteritems(): 103 old = old_nextID.get(k) or 0 104 if old < v: 105 count += v - old 106 return count 107 97 108 def GetChangesFromServer(): 98 109 """ Rows added by client need to be assigned new row numbers from the server. … … 105 116 rows_needed = {} 106 117 old_nextID, new_nextID = SplitOldNew(Data.NextID) 107 server_prior_nextid = old_nextID118 # server_prior_nextid = old_nextID # this is our version, really need server's version 107 118 for k, v in new_nextID.iteritems(): 108 119 servernext = old_nextID.get(k, 1) … … 118 129 changes, version, new_server_nextid = server.get_updates_since(parms, lastChange, rows_needed) 119 130 if debug: print changes, version, new_server_nextid 131 120 132 # new_server_nextid is a dict with this format: 121 133 # { tablename: (row_after_last_reserved) } 122 134 # this will be used to set the new server '_' next ids 123 135 server_prior_nextid = {} 136 for tname, v in new_server_nextid.iteritems(): 137 # server's new nextid less what we asked them to reserve 138 server_prior_nextid[tname] = v - (rows_needed.get(tname) or 0) 139 124 140 # renumber our new rows, if necessary (do we test this? -- not yet) 125 141 # set server version keys to '_'? -- probably not … … 159 175 fk_server_nextid = old_nextID.get(table, 1) 160 176 if value >= fk_server_nextid: # points to a new row 161 if debug: print "adjusting fk " + cname + "'", value, "'"177 if debug: print "adjusting fk in %s at %s from %d to %d" % (tname, cname, value, value + key_adjustment.get(table, 0)) 161 177 row[cname] = value + key_adjustment.get(table, 0) 162 178 newkeys[row['ID']] = row … … 261 277 262 278 c_old, c_new = SplitOldNew(c) 263 for k in c_new.iteritems(): # check for conflicts 279 for k, v in c_new.iteritems(): # check for conflicts 263 279 if k in ["Table", "ID"]: continue 264 280 265 281 db_value = row.get(k) # what we have 266 new_value = c_new.get(k) # what the server has 282 new_value = v # c_new.get(k) # what the server has 266 282 old_value = c_old.get(k) # what the server thinks we have 267 283 … … 342 358 DupPair('Assignment', 'TaskID', 'ResourceID') 343 359 DupPair('Dependency', 'TaskID', 'PrerequisiteID') 344 # DupPair('ResourceGrouping', 'ResourceID', 'ResourceGroupID') 360 if 'ResourceGrouping' in Data.Database: 361 DupPair('ResourceGrouping', 'ResourceID', 'ResourceGroupID') 345 362 DupPair('ColumnType', 'ReportTypeID', 'Name') # prevent duplicate column names in reporttype 346 363 … … 431 448 change = {} # build a change before adding to changes list 432 449 for k, v in old.iteritems(): 433 if k[0] == ' -': continue # skip saved conflict values450 if k[0] == '_': continue # skip saved conflict values 433 450 change[k] = new.get(k) 434 451 change["_" + k] = v … … 474 491 475 492 def GetData(): # get updates 493 if debug: print "Start GetData" 476 494 try: # how many retries? 477 495 server_changes, version = GetChangesFromServer() # get server ids for new records … … 495 513 496 514 FixDataProblems() # fix certain kinds of invalid data 515 516 # we might need to add report rows based on server data 517 # or resolve conflicts we and the server both changed the same report 518 # (the server gets precedence - our changes are added at the end of the report) 519 Data.AdjustReportRows() 520 521 # the display will be adjusted later 522 if debug: print "Successful end of GetData" 497 523 return 1 498 524 499 525 def SendData(): # send changes 526 if debug: print "Starting SendData" 500 527 # find changes to send 501 528 local_changes = FindChanges() … … 528 555 if debug: print "Refresh Server ERROR", v 529 556 return 0 557 if debug: print "Successful end of SendData" 530 558 return 1 531 559 … … 536 564 # return 537 565 else: # we got the data 566 while LocalRowsAdded(): # new report rows (probably) 567 if debug: print "Local rows added %d" % LocalRowsAdded() 568 if not GetData(): # repeat until we don't add any more rows in response to server 569 if debug: print "Couldn't get data on repeat" 570 return 538 571 if not SendData(): 539 572 if debug: print "Couldn't send data to server" … … 543 576 Data.SetUndo("Commit") # Can't do this until after our changes are sent to the server 544 577 # PROBLEM - don't want risk adding rows until aftter 578 # OK?? Adjusting report rows at the end of GetData 545 579 546 580 # NOTE - not really undoable, should clear undo stack, -
server/trunk/update/client/Add Database to Server.py
r129 r166 25 25 # 060330 - new add script based on old replace script 26 26 # 060403 - prompt for server information 27 # 060821 - record server address and next record ids 27 28 28 29 def DoCall(): … … 79 80 normal[tid] = t.values() # list of values (id's are in the records) 80 81 81 parms = {'FileSignature': Data.Database['Other'][1]['FileSignature'], 82 'Key': server_key, 82 parms = { 83 'ScriptVersion': '2006-08-22', 84 'FileSignature': Data.Database['Other'][1]['FileSignature'], 85 'Key': server_key, 83 86 } 84 87 result = server.add_database(parms, [normal, aliases, exceptions]) … … 88 91 if debug: print "add worked", result 89 92 Data.Database['Other'][1].update(result) # add keys to other 93 Data.Other['ServerAddress'] = server_address 94 Data.Other['ServerKey'] = Data.Other['OwnerKey'] # sent to server w/ requests 95 # record our understanding of the server keys 96 if Data.Database.has_key('NextID'): 97 next = Data.Database['NextID'] 98 for k, v in next.items(): 99 next["_" + k] = v # the server knows about all these rows 90 100 except xmlrpclib.Error, v: 91 101 print "Update Server ERROR", v -
server/trunk/update/client/Download Database from Server.py
r165 r166 54 54 55 55 parms = { # data to make sure were are talking to the right server 56 'ScriptVersion': '2006-0 3-26',56 'ScriptVersion': '2006-08-22', 56 56 'FileSignature': file_signature, 57 57 'Key': server_key,
