Changeset 166

Show
Ignore:
Timestamp:
Tue Aug 22 22:03:45 2006
Author:
Brian
Message:

Fixed several problems in scripts client uses to communicate with server. It works much better now.

Files:

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-07-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_nextID         
      118         # 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 values  
      450                         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-03-26',  
      56         'ScriptVersion': '2006-08-22',  
    56 56         'FileSignature': file_signature,  
    57 57         'Key': server_key,