Changeset 129
- Timestamp:
- Thu Jul 13 21:51:38 2006
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
-
server/trunk/update/client/Commit Changes to Server.py
r93 r129 28 28 # need of special handling for ReportRow foreign keys (not solved yet) 29 29 # 060407 - More debuging changes 30 # 060708 - Some fixes to foreign key corrections 30 31 31 32 debug = 1 … … 53 54 54 55 parms = { # data to make sure were are talking to the right server 55 'ScriptVersion': '2006-0 3-26',56 'ScriptVersion': '2006-07-08', 55 56 'FileSignature': Data.Other.get('FileSignature'), 56 57 'Key': Data.Other.get('ServerKey'), # should be saved like file signature … … 69 70 70 71 # this should be returned by a function in Data 71 # this should use tupples as keys72 # using 'table/column': table (same format as 'ForeignKey' table) 71 72 # table and id in report rows needs special treatment <- IMPORTANT - To Do 72 73 foreign_key_xref = { 73 'PrerequisiteID': 'Task', 74 'PriorMeasurementID': 'Measurement', 75 'FirstRow': 'ReportRow', 76 'NextRow': 'ReportRow', 77 'FirstColumn': 'ReportColumn', 78 'NextColumn': 'ReportColumn', 79 'Also': 'ReportType', 74 'Dependency/PrerequisiteID': 'Task', 75 'MeasurementDependency/PriorMeasurementID': 'Measurement', 76 'ResourceGrouping/ResourceGroupID': 'Resource', 77 'Report/FirstRow': 'ReportRow', 78 'ReportRow/NextRow': 'ReportRow', 79 'Report/FirstColumn': 'ReportColumn', 80 'ReportColumn/NextColumn': 'ReportColumn', 81 'ReportType/Also': 'ReportType', 80 82 } 81 # these foreign keys should be specified as (table, column): table82 83 83 84 # server_prior_nextid = {} # set in AdjustIDs, used in FindChanges … … 113 114 114 115 # ask server to reserve rows and return all new changes 116 # ask server for all changes since the last update we received 115 117 if debug: print parms, lastChange, rows_needed 116 118 changes, version, new_server_nextid = server.get_updates_since(parms, lastChange, rows_needed) 117 119 if debug: print changes, version, new_server_nextid 118 119 120 # new_server_nextid is a dict with this format: 120 121 # { tablename: (row_after_last_reserved) } 121 122 # this will be used to set the new server '_' next ids 122 123 123 # maybe server should return all of its next ids -- it does now 124 # if it does, we could add new tables -- we do, see below 125 126 # renumber our new rows, if necessary (do we test this?) 127 # set server version keys to '_'? 128 # or keep track of new rows for use FindChanges (BETTER?) 129 130 # how to handle report rows <-- IMPORTANT - To Do 131 key_adjustment = {} 124 # renumber our new rows, if necessary (do we test this? -- not yet) 125 # set server version keys to '_'? -- probably not 126 # or keep track of new rows for use FindChanges (BETTER?) -- probably not 127 key_adjustment = {} # how much to add to locally assigned IDs 132 128 for tname, v in new_nextID.iteritems(): 133 129 key_adjustment[tname] = new_server_nextid.get(tname, 1) - v 134 130 135 for tname in new_nextID: 131 for tname in new_nextID: # list of all non-alias table names 135 131 newkeys = {} 136 132 # all IDs in table will be adjusted by the same amount … … 140 136 141 137 t = Data.Database.get(tname, {}) 142 for rid, row in t.iteritems(): 143 for cname, value in row.iteritems(): 138 for rid, row in t.iteritems(): # process each row in table 139 for cname, value in row.iteritems(): # look for foreign key columns 144 140 if not cname: continue 145 141 if not isinstance(value, int): continue # does his work for really big numbers? … … 149 145 else: 150 146 # is this a foreign key column? 151 if cname in foreign_key_xref: 152 table = foreign_key_xref[cname] 147 tc = '/'.join(tname, cname) 148 if tc in foreign_key_xref: 149 table = foreign_key_xref[tc] 153 150 elif cname[-2:] == 'ID' and cname[:1] != '_': 154 151 if cname == 'TableID' and tname == 'ReportRow': # report rows are special case … … 310 307 # these problems 311 308 # 312 # Table and ID in report rows needs special treatment <- IMPORTANT - To Do 309 # Table and ID in report rows needs special treatment <- IMPORTANT - To Do -- ?let update handle?? 312 309 313 310 def FixDataProblems(): … … 345 342 DupPair('Assignment', 'TaskID', 'ResourceID') 346 343 DupPair('Dependency', 'TaskID', 'PrerequisiteID') 344 DupPair('ResourceGrouping', 'ResourceID', 'ResourceGroupID') 347 345 DupPair('ColumnType', 'ReportTypeID', 'Name') # prevent duplicate column names in reporttype 348 346 … … 371 369 if not cname or cname == 'ID': continue 372 370 # is this a foreign key column? 373 if cname in foreign_key_xref: 374 table = foreign_key_xref[cname] 371 tc = '/'.join(tname, cname) 372 if tc in foreign_key_xref: 373 table = foreign_key_xref[tc] 375 374 elif cname[-2:] == 'ID' and cname[:1] != '_': 376 table = cname[:-2] 375 if cname == 'TableID' and tname == 'ReportRow': # report rows are special case 376 table = row.get('TableName') 377 if not value or not table: continue # skip invalid combinations 378 else: 379 table = cname[:-2] 377 380 else: # not a foreign key 378 381 continue 379 382 newid = changeids.get((table, value)) # need double prens? 380 if newid: # point sto a dup row383 if newid: # pointed to a dup row 380 383 change[cname] = newid 381 384 if change: -
server/trunk/update/client/Add Database to Server.py
r93 r129 59 59 for tid, t in tables: 60 60 if tid[0] == "_": continue # skip internal tables, if any 61 if tid == 'Next': continue # server can't handle because it doesn't containt 'ID' 61 62 62 63 alias = None # identify aliases (thanks for the code Alex!) -
server/trunk/update/client/Download Database from Server.py
r91 r129 28 28 debug = 1 29 29 30 server_address = Data.Other.get('ServerAddress') or "http://192.168.0. 6:8001"30 server_address = Data.Other.get('ServerAddress') or "http://192.168.0.5:8001" 30 30 server_key = Data.Other.get('ServerKey') or "a6d1" 31 31 if server_key != "a6d1": # only set by this script? … … 71 71 72 72 normal, aliases, exceptions = result 73 73 74 database = {} 74 75 … … 78 79 for key in row.keys(): # get rid of "_" fields??? 79 80 if key[0] == "_": del row[key] 81 if debug: print k, row 80 82 t[row["ID"]] = row 81 83 database[k] = t
