Changeset 358

Show
Ignore:
Timestamp:
Fri Dec 28 09:48:03 2007
Author:
Brian
Message:

GanttPV Server - corrected all tests to work with current version of server

Files:

Legend:

Unmodified
Added
Removed
Modified
  • server/trunk/update/test/big_test_data.py

    r197 r358  
    1 1 #!/usr/local/bin/python  
    2 2 # big_test_data.py -- this is a CGI script  
    3   # Copyright 2006 by Brian C. Christensen  
      3 # Copyright 2006, 2007 by Brian C. Christensen  
    3 3  
    4 4 #    This file is part of GanttPV.  
     
    22 22 # 060406 - Brian - big data that would mess up the test script  
    23 23  
    24   update2 = [{'Holiday': [], 'ColumnType': [{'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 1, 'Edit': False, 'T': 'A', 'ID': 1}, {'Name': 'Name', 'ReportTypeID': 1, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'A', 'ID': 2}, {'Name': 'StartDate', 'ReportTypeID': 1, 'DataType': 'd', 'AccessType': 'd', 'Label': 'Start Date', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 3}, {'Name': 'TargetEndDate', 'ReportTypeID': 1, 'DataType': 'd', 'AccessType': 'd', 'Label': 'Target\nEnd Date', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 4}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 2, 'Edit': False, 'T': 'B', 'ID': 5}, {'Name': 'Name', 'ReportTypeID': 2, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 6}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 3, 'Edit': False, 'T': 'A', 'ID': 7}, {'Name': 'ProjectID', 'ReportTypeID': 3, 'DataType': 'i', 'AccessType': 'd', 'Label': 'Project\nID', 'Width': 80, 'Edit': False, 'T': 'A', 'ID': 8}, {'Name': 'Name', 'ReportTypeID': 3, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'A', 'ID': 9}, {'Name': 'StartDate', 'ReportTypeID': 3, 'DataType': 'd', 'AccessType': 'd', 'Label': 'Start Date', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 10}, {'Name': 'DurationHours', 'ReportTypeID': 3, 'DataType': 'i', 'AccessType': 'd', 'Label': 'Duration', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 11}, {'Name': 'CalculatedStartDate', 'ReportTypeID': 3, 'DataType': 'd', 'AccessType': 'd', 'Label': 'Start Date\n(Calculated)', 'Width': 80, 'Edit': False, 'T': 'A', 'ID': 12}, {'Name': 'CalculatedEndDate', 'ReportTypeID': 3, 'DataType': 'd', 'AccessType': 'd', 'Label': 'End Date\n(Calculated)', 'Width': 80, 'Edit': False, 'T': 'A', 'ID': 13}, {'Name': 'Day/Gantt', 'DataType': 'g', 'AccessType': 's', 'ReportTypeID': 3, 'Edit': False, 'T': 'X', 'ID': 14}, {'Name': 'Day/Hours', 'DataType': 'i', 'AccessType': 's', 'ReportTypeID': 3, 'Edit': False, 'T': 'X', 'ID': 15}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 4, 'Edit': False, 'T': 'B', 'ID': 16}, {'Name': 'Resource/Name', 'ReportTypeID': 4, 'DataType': 't', 'AccessType': 'i', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 17}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 5, 'Edit': False, 'T': 'B', 'ID': 18}, {'Name': 'Prerequisite/Name', 'ReportTypeID': 5, 'DataType': 't', 'AccessType': 'i', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 19}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 6, 'Edit': False, 'T': 'A', 'ID': 20}, {'Name': 'Name', 'ReportTypeID': 6, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'A', 'ID': 21}, {'Name': 'SelectColumn', 'ReportTypeID': 6, 'DataType': 't', 'AccessType': 'd', 'Label': 'Select\nColumn', 'Width': 80, 'Edit': False, 'T': 'A', 'ID': 22}, {'Name': 'SelectValue', 'ReportTypeID': 6, 'DataType': 'i', 'AccessType': 'd', 'Label': 'Select\nValue', 'Width': 80, 'Edit': False, 'T': 'A', 'ID': 23}, {'Name': 'ProjectID', 'DataType': 'i', 'AccessType': 'd', 'Label': 'Project\nID', 'ReportTypeID': 6, 'Edit': False, 'T': 'A', 'ID': 24}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 7, 'Edit': False, 'T': 'B', 'ID': 25}, {'Name': 'Width', 'ReportTypeID': 7, 'DataType': 'i', 'AccessType': 'd', 'Width': 40, 'Edit': True, 'T': 'B', 'ID': 26}, {'Name': 'Label', 'ReportTypeID': 7, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 27}, {'Name': 'Periods', 'ReportTypeID': 7, 'DataType': 'i', 'AccessType': 'd', 'Width': 40, 'Edit': True, 'T': 'B', 'ID': 28}, {'Name': 'FirstDate', 'ReportTypeID': 7, 'DataType': 'd', 'AccessType': 'd', 'Label': 'First\nDate', 'Width': 80, 'Edit': True, 'T': 'B', 'ID': 29}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 8, 'Edit': False, 'T': 'A', 'ID': 30}, {'Name': 'ShortName', 'ReportTypeID': 8, 'DataType': 't', 'AccessType': 'd', 'Label': 'Short\nName', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 31}, {'Name': 'Name', 'ReportTypeID': 8, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'A', 'ID': 32}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 9, 'Edit': False, 'T': 'B', 'ID': 33}, {'Name': 'Task/Name', 'ReportTypeID': 9, 'DataType': 't', 'AccessType': 'i', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 34}, {'Name': 'Day/Hours', 'DataType': 'i', 'AccessType': 's', 'ReportTypeID': 9, 'Edit': False, 'T': 'X', 'ID': 35}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 10, 'Edit': False, 'T': 'A', 'ID': 36}, {'Name': 'Name', 'ReportTypeID': 10, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'A', 'ID': 37}, {'Name': 'Date', 'ReportTypeID': 10, 'DataType': 'd', 'AccessType': 'd', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 38}, {'Name': 'Hours', 'ReportTypeID': 10, 'DataType': 'i', 'AccessType': 'd', 'Width': 40, 'Edit': True, 'T': 'A', 'ID': 39}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 11, 'Edit': False, 'T': 'A', 'ID': 40}, {'Name': 'Also', 'ReportTypeID': 11, 'DataType': 'i', 'AccessType': 'd', 'Width': 40, 'Edit': False, 'T': 'A', 'ID': 41}, {'Name': 'Name', 'ReportTypeID': 11, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': False, 'T': 'A', 'ID': 42}, {'Name': 'TableA', 'ReportTypeID': 11, 'DataType': 't', 'AccessType': 'd', 'Label': 'Table\nA', 'Width': 100, 'Edit': False, 'T': 'A', 'ID': 43}, {'Name': 'TableB', 'ReportTypeID': 11, 'DataType': 't', 'AccessType': 'd', 'Label': 'Table\nB', 'Width': 100, 'Edit': False, 'T': 'A', 'ID': 44}, {'Name': 'Label', 'ReportTypeID': 11, 'DataType': 't', 'AccessType': 'd', 'Width': 120, 'Edit': True, 'T': 'A', 'ID': 45}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 12, 'Edit': False, 'T': 'B', 'ID': 46}, {'Name': 'DataType', 'DataType': 't', 'AccessType': 'd', 'Label': 'Data Type', 'ReportTypeID': 12, 'Edit': False, 'T': 'B', 'ID': 47}, {'Name': 'AccessType', 'DataType': 't', 'AccessType': 'd', 'Label': 'Access Type', 'ReportTypeID': 12, 'Edit': False, 'T': 'B', 'ID': 48}, {'Name': 'Edit', 'DataType': 'b', 'AccessType': 'd', 'ReportTypeID': 12, 'Edit': False, 'T': 'B', 'ID': 49}, {'Name': 'Name', 'ReportTypeID': 12, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': False, 'T': 'B', 'ID': 50}, {'Name': 'Label', 'ReportTypeID': 12, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 51}], 'ReportType': [{'SuggestedColumns': ',Name,,;,StartDate,,;,TargetEndDate,,', 'TableA': 'Project', 'ID': 1, 'Name': 'Project'}, {'SuggestedColumns': 'Project,Name,,;,Name,,', 'Name': 'Project/Report', 'TableB': 'Report', 'Also': 1, 'TableA': 'Project', 'ID': 2}, {'SuggestedColumns': ',Name,,;,StartDate,,;,EffortHoura,,;,DurationHours,,;,CalculatedStartDate,,;,Day/Gantt,,21', 'TableA': 'Task', 'ID': 3, 'Name': 'Task'}, {'SuggestedColumns': 'Task,Name,,;,EffortHoura,,;,DurationHours,,;,Resource/Name,,', 'Name': 'Task/Assignment', 'TableB': 'Assignment', 'Also': 3, 'TableA': 'Task', 'ID': 4}, {'SuggestedColumns': 'Task,Name,,;,Prerequisite/Name,,', 'Name': 'Task/Dependency', 'TableB': 'Dependency', 'Also': 3, 'TableA': 'Task', 'ID': 5}, {'TableA': 'Report', 'ID': 6, 'Name': 'Report'}, {'TableB': 'ReportColumn', 'Also': 6, 'TableA': 'Report', 'ID': 7, 'Name': 'Report/ReportColumn'}, {'TableA': 'Resource', 'ID': 8, 'Name': 'Resource'}, {'SuggestedColumns': 'Resource,Name,,;,Task/Name,,', 'Name': 'Resource/Assignment', 'TableB': 'Assignment', 'Also': 8, 'TableA': 'Resource', 'ID': 9}, {'SuggestedColumns': ',Name,,;,Date,,;,Hours,,', 'TableA': 'Holiday', 'ID': 10, 'Name': 'Holiday'}, {'TableA': 'ReportType', 'ID': 11, 'Name': 'ReportType'}, {'TableB': 'ColumnType', 'Also': 11, 'TableA': 'ReportType', 'ID': 12, 'Name': 'ReportType/ColumnType'}], 'Assignment': [], 'Project': [{'ID': 1, 'Name': 'All Projects'}, {'ID': 2, 'Name': 'New Project'}], 'Dependency': [], 'Other': [{'WeekHours': [8, 8, 8, 8, 8, 0, 0], 'FileSignature': 100, 'LastChange': 2, 'ID': 1}], 'ReportColumn': [{'A': 'Name', 'ColumnTypeID': 2, 'B': 'Name', 'TypeA': 'CHAR', 'Label': 'Name', 'Width': 140, 'NextColumn': 2, 'Periods': 0, 'TypeB': 'CHAR', 'ID': 1, 'ReportID': 1}, {'A': 'StartDate', 'ColumnTypeID': 3, 'TypeA': 'DATE', 'Label': 'Start Date', 'Width': 80, 'NextColumn': 3, 'Periods': 0, 'ID': 2, 'ReportID': 1}, {'A': 'TargetEndDate', 'ColumnTypeID': 4, 'TypeA': 'DATE', 'Label': 'Target Date', 'Width': 80, 'NextColumn': 0, 'Periods': 0, 'ID': 3, 'ReportID': 1}, {'A': 'Name', 'ColumnTypeID': 42, 'TypeA': 'CHAR', 'Label': 'Name', 'Width': 140, 'NextColumn': 12, 'Periods': 0, 'ID': 4, 'ReportID': 2}, {'A': 'Name', 'ColumnTypeID': 32, 'TypeA': 'CHAR', 'Label': 'Name', 'Width': 140, 'NextColumn': 0, 'Periods': 0, 'ID': 5, 'ReportID': 3}, {'A': 'Name', 'ColumnTypeID': 9, 'TypeA': 'CHAR', 'Label': 'Name', 'Width': 140, 'NextColumn': 7, 'Periods': 0, 'ID': 6, 'ReportID': 4}, {'A': 'StartDate', 'ColumnTypeID': 10, 'TypeA': 'DATE', 'Label': 'Start Date', 'Width': 80, 'NextColumn': 8, 'Periods': 0, 'ID': 7, 'ReportID': 4}, {'A': 'DurationHours', 'ColumnTypeID': 11, 'TypeA': 'INT', 'Label': 'Duration', 'Width': 80, 'NextColumn': 9, 'Periods': 0, 'ID': 8, 'ReportID': 4}, {'A': 'CalculatedStartDate', 'ColumnTypeID': 12, 'TypeA': 'DATE', 'Label': 'Start Date\n(Calculated)', 'Width': 80, 'NextColumn': 10, 'Periods': 0, 'ID': 9, 'ReportID': 4}, {'A': 'CalculatedEndDate', 'ColumnTypeID': 13, 'TypeA': 'DATE', 'Label': 'End Date\n(Calculated)', 'Width': 80, 'NextColumn': 11, 'Periods': 0, 'ID': 10, 'ReportID': 4}, {'ColumnTypeID': 14, 'Time': 'Day', 'TypeA': 'CHART', 'NextColumn': 0, 'ReportID': 4, 'FirstDate': '2006-03-16', 'ID': 11, 'Periods': 21}, {'ColumnTypeID': 50, 'ReportID': 2, 'ID': 12, 'Width': 140}], 'Report': [{'Name': 'Project/Report List', 'FirstColumn': 1, 'ProjectID': 1, 'FirstRow': 1, 'ReportTypeID': 2, 'ID': 1}, {'Name': 'Report Options', 'FirstColumn': 4, 'ProjectID': 1, 'FirstRow': 8, 'ReportTypeID': 12, 'ID': 2}, {'Name': 'Resource List', 'FirstColumn': 5, 'ProjectID': 1, 'FirstRow': 71, 'ReportTypeID': 8, 'ID': 3}, {'Web': 1, 'Name': 'Gantt Chart', 'FirstColumn': 6, 'SelectValue': 2, 'ProjectID': 2, 'SelectColumn': 'ProjectID', 'FirstRow': 4, 'ReportTypeID': 3, 'ID': 4}], 'Resource': [{'ID': 1, 'Name': 'First Resource'}], 'ReportRow': [{'TableID': 1, 'NextRow': 5, 'TableName': 'Project', 'ID': 1, 'ReportID': 1}, {'TableID': 2, 'NextRow': 3, 'TableName': 'Project', 'ID': 2, 'ReportID': 1}, {'TableID': 4, 'ParentRow': 2, 'TableName': 'Report', 'ReportID': 1, 'ID': 3}, {'TableID': 1, 'TableName': 'Task', 'ID': 4, 'ReportID': 4}, {'TableName': 'Report', 'NextRow': 6, 'TableID': 1, 'ParentRow': 1, 'ID': 5, 'ReportID': 1}, {'TableName': 'Report', 'NextRow': 7, 'TableID': 2, 'ReportID': 1, 'Hidden': True, 'ID': 6, 'ParentRow': 1}, {'TableName': 'Report', 'NextRow': 2, 'TableID': 3, 'ParentRow': 1, 'ID': 7, 'ReportID': 1}, {'TableID': 1, 'NextRow': 20, 'TableName': 'ReportType', 'ID': 8, 'ReportID': 2}, {'TableID': 2, 'NextRow': 24, 'TableName': 'ReportType', 'ID': 9, 'ReportID': 2}, {'TableID': 3, 'NextRow': 26, 'TableName': 'ReportType', 'ID': 10, 'ReportID': 2}, {'TableID': 4, 'NextRow': 35, 'TableName': 'ReportType', 'ID': 11, 'ReportID': 2}, {'TableID': 5, 'NextRow': 37, 'TableName': 'ReportType', 'ID': 12, 'ReportID': 2}, {'TableName': 'ReportType', 'NextRow': 39, 'TableID': 6, 'ReportID': 2, 'Hidden': True, 'ID': 13}, {'TableName': 'ReportType', 'NextRow': 44, 'TableID': 7, 'ReportID': 2, 'Hidden': True, 'ID': 14}, {'TableID': 8, 'NextRow': 49, 'TableName': 'ReportType', 'ID': 15, 'ReportID': 2}, {'TableID': 9, 'NextRow': 52, 'TableName': 'ReportType', 'ID': 16, 'ReportID': 2}, {'TableID': 10, 'NextRow': 55, 'TableName': 'ReportType', 'ID': 17, 'ReportID': 2}, {'TableName': 'ReportType', 'NextRow': 59, 'TableID': 11, 'ReportID': 2, 'Hidden': True, 'ID': 18}, {'TableName': 'ReportType', 'NextRow': 65, 'TableID': 12, 'ReportID': 2, 'Hidden': True, 'ID': 19}, {'TableName': 'ColumnType', 'NextRow': 21, 'TableID': 1, 'ParentRow': 8, 'ID': 20, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 22, 'TableID': 2, 'ParentRow': 8, 'ID': 21, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 23, 'TableID': 3, 'ParentRow': 8, 'ID': 22, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 9, 'TableID': 4, 'ParentRow': 8, 'ID': 23, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 25, 'TableID': 5, 'ParentRow': 9, 'ID': 24, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 10, 'TableID': 6, 'ParentRow': 9, 'ID': 25, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 27, 'TableID': 7, 'ParentRow': 10, 'ID': 26, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 28, 'TableID': 8, 'ParentRow': 10, 'ID': 27, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 29, 'TableID': 9, 'ParentRow': 10, 'ID': 28, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 30, 'TableID': 10, 'ParentRow': 10, 'ID': 29, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 31, 'TableID': 11, 'ParentRow': 10, 'ID': 30, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 32, 'TableID': 12, 'ParentRow': 10, 'ID': 31, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 33, 'TableID': 13, 'ParentRow': 10, 'ID': 32, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 34, 'TableID': 14, 'ParentRow': 10, 'ID': 33, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 11, 'TableID': 15, 'ReportID': 2, 'Hidden': True, 'ID': 34, 'ParentRow': 10}, {'TableName': 'ColumnType', 'NextRow': 36, 'TableID': 16, 'ParentRow': 11, 'ID': 35, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 12, 'TableID': 17, 'ParentRow': 11, 'ID': 36, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 38, 'TableID': 18, 'ParentRow': 12, 'ID': 37, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 13, 'TableID': 19, 'ParentRow': 12, 'ID': 38, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 40, 'TableID': 20, 'ReportID': 2, 'Hidden': True, 'ID': 39, 'ParentRow': 13}, {'TableName': 'ColumnType', 'NextRow': 41, 'TableID': 21, 'ReportID': 2, 'Hidden': True, 'ID': 40, 'ParentRow': 13}, {'TableName': 'ColumnType', 'NextRow': 42, 'TableID': 22, 'ReportID': 2, 'Hidden': True, 'ID': 41, 'ParentRow': 13}, {'TableName': 'ColumnType', 'NextRow': 43, 'TableID': 23, 'ReportID': 2, 'Hidden': True, 'ID': 42, 'ParentRow': 13}, {'TableName': 'ColumnType', 'NextRow': 14, 'TableID': 24, 'ReportID': 2, 'Hidden': True, 'ID': 43, 'ParentRow': 13}, {'TableName': 'ColumnType', 'NextRow': 45, 'TableID': 25, 'ReportID': 2, 'Hidden': True, 'ID': 44, 'ParentRow': 14}, {'TableName': 'ColumnType', 'NextRow': 46, 'TableID': 26, 'ReportID': 2, 'Hidden': True, 'ID': 45, 'ParentRow': 14}, {'TableName': 'ColumnType', 'NextRow': 47, 'TableID': 27, 'ReportID': 2, 'Hidden': True, 'ID': 46, 'ParentRow': 14}, {'TableName': 'ColumnType', 'NextRow': 48, 'TableID': 28, 'ReportID': 2, 'Hidden': True, 'ID': 47, 'ParentRow': 14}, {'TableName': 'ColumnType', 'NextRow': 15, 'TableID': 29, 'ReportID': 2, 'Hidden': True, 'ID': 48, 'ParentRow': 14}, {'TableName': 'ColumnType', 'NextRow': 50, 'TableID': 30, 'ParentRow': 15, 'ID': 49, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 51, 'TableID': 31, 'ParentRow': 15, 'ID': 50, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 16, 'TableID': 32, 'ParentRow': 15, 'ID': 51, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 53, 'TableID': 33, 'ParentRow': 16, 'ID': 52, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 54, 'TableID': 34, 'ParentRow': 16, 'ID': 53, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 17, 'TableID': 35, 'ReportID': 2, 'Hidden': True, 'ID': 54, 'ParentRow': 16}, {'TableName': 'ColumnType', 'NextRow': 56, 'TableID': 36, 'ParentRow': 17, 'ID': 55, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 57, 'TableID': 37, 'ParentRow': 17, 'ID': 56, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 58, 'TableID': 38, 'ParentRow': 17, 'ID': 57, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 18, 'TableID': 39, 'ParentRow': 17, 'ID': 58, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 60, 'TableID': 40, 'ReportID': 2, 'Hidden': True, 'ID': 59, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 61, 'TableID': 41, 'ReportID': 2, 'Hidden': True, 'ID': 60, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 62, 'TableID': 42, 'ReportID': 2, 'Hidden': True, 'ID': 61, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 63, 'TableID': 43, 'ReportID': 2, 'Hidden': True, 'ID': 62, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 64, 'TableID': 44, 'ReportID': 2, 'Hidden': True, 'ID': 63, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 19, 'TableID': 45, 'ReportID': 2, 'Hidden': True, 'ID': 64, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 66, 'TableID': 46, 'ReportID': 2, 'Hidden': True, 'ID': 65, 'ParentRow': 19}, {'TableName': 'ColumnType', 'NextRow': 67, 'TableID': 47, 'ReportID': 2, 'Hidden': True, 'ID': 66, 'ParentRow': 19}, {'TableName': 'ColumnType', 'NextRow': 68, 'TableID': 48, 'ReportID': 2, 'Hidden': True, 'ID': 67, 'ParentRow': 19}, {'TableName': 'ColumnType', 'NextRow': 69, 'TableID': 49, 'ReportID': 2, 'Hidden': True, 'ID': 68, 'ParentRow': 19}, {'TableName': 'ColumnType', 'NextRow': 70, 'TableID': 50, 'ReportID': 2, 'Hidden': True, 'ID': 69, 'ParentRow': 19}, {'TableName': 'ColumnType', 'TableID': 51, 'ParentRow': 19, 'Hidden': True, 'ID': 70, 'ReportID': 2}, {'TableID': 1, 'TableName': 'Resource', 'ID': 71, 'ReportID': 3}], 'Prerequisite': [{'TotalFloatHours': 0, 'Name': 'New Name!!!', 'hES': 10992, 'ProjectID': 2, 'hLS': 10992, 'hEF': 11000, 'CalculatedEndDate': '2006-04-10', 'CalculatedEndHour': 0, 'FreeFloatHours': 0, 'hLF': 11000, 'CalculatedStartDate': '2006-04-07', 'ID': 1, 'CalculatedStartHour': 0}]}, {'Task': 'Prerequisite', 'OtherData': 'Other'}, {'NextID': {'Task': 2, 'Resource': 2, 'Holiday': 1, 'Assignment': 1, 'Project': 3, 'Dependency': 1, 'ReportType': 13, 'Report': 5, 'ColumnType': 52, 'ReportRow': 71, 'ReportColumn': 13}}]  
      24 update2 = [{'Holiday': [], 'ColumnType': [{'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 1, 'Edit': False, 'T': 'A', 'ID': 1}, {'Name': 'Name', 'ReportTypeID': 1, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'A', 'ID': 2}, {'Name': 'StartDate', 'ReportTypeID': 1, 'DataType': 'd', 'AccessType': 'd', 'Label': 'Start Date', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 3}, {'Name': 'TargetEndDate', 'ReportTypeID': 1, 'DataType': 'd', 'AccessType': 'd', 'Label': 'Target\nEnd Date', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 4}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 2, 'Edit': False, 'T': 'B', 'ID': 5}, {'Name': 'Name', 'ReportTypeID': 2, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 6}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 3, 'Edit': False, 'T': 'A', 'ID': 7}, {'Name': 'ProjectID', 'ReportTypeID': 3, 'DataType': 'i', 'AccessType': 'd', 'Label': 'Project\nID', 'Width': 80, 'Edit': False, 'T': 'A', 'ID': 8}, {'Name': 'Name', 'ReportTypeID': 3, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'A', 'ID': 9}, {'Name': 'StartDate', 'ReportTypeID': 3, 'DataType': 'd', 'AccessType': 'd', 'Label': 'Start Date', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 10}, {'Name': 'DurationHours', 'ReportTypeID': 3, 'DataType': 'i', 'AccessType': 'd', 'Label': 'Duration', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 11}, {'Name': 'CalculatedStartDate', 'ReportTypeID': 3, 'DataType': 'd', 'AccessType': 'd', 'Label': 'Start Date\n(Calculated)', 'Width': 80, 'Edit': False, 'T': 'A', 'ID': 12}, {'Name': 'CalculatedEndDate', 'ReportTypeID': 3, 'DataType': 'd', 'AccessType': 'd', 'Label': 'End Date\n(Calculated)', 'Width': 80, 'Edit': False, 'T': 'A', 'ID': 13}, {'Name': 'Day/Gantt', 'DataType': 'g', 'AccessType': 's', 'ReportTypeID': 3, 'Edit': False, 'T': 'X', 'ID': 14}, {'Name': 'Day/Hours', 'DataType': 'i', 'AccessType': 's', 'ReportTypeID': 3, 'Edit': False, 'T': 'X', 'ID': 15}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 4, 'Edit': False, 'T': 'B', 'ID': 16}, {'Name': 'Resource/Name', 'ReportTypeID': 4, 'DataType': 't', 'AccessType': 'i', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 17}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 5, 'Edit': False, 'T': 'B', 'ID': 18}, {'Name': 'Prerequisite/Name', 'ReportTypeID': 5, 'DataType': 't', 'AccessType': 'i', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 19}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 6, 'Edit': False, 'T': 'A', 'ID': 20}, {'Name': 'Name', 'ReportTypeID': 6, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'A', 'ID': 21}, {'Name': 'SelectColumn', 'ReportTypeID': 6, 'DataType': 't', 'AccessType': 'd', 'Label': 'Select\nColumn', 'Width': 80, 'Edit': False, 'T': 'A', 'ID': 22}, {'Name': 'SelectValue', 'ReportTypeID': 6, 'DataType': 'i', 'AccessType': 'd', 'Label': 'Select\nValue', 'Width': 80, 'Edit': False, 'T': 'A', 'ID': 23}, {'Name': 'ProjectID', 'DataType': 'i', 'AccessType': 'd', 'Label': 'Project\nID', 'ReportTypeID': 6, 'Edit': False, 'T': 'A', 'ID': 24}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 7, 'Edit': False, 'T': 'B', 'ID': 25}, {'Name': 'Width', 'ReportTypeID': 7, 'DataType': 'i', 'AccessType': 'd', 'Width': 40, 'Edit': True, 'T': 'B', 'ID': 26}, {'Name': 'Label', 'ReportTypeID': 7, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 27}, {'Name': 'Periods', 'ReportTypeID': 7, 'DataType': 'i', 'AccessType': 'd', 'Width': 40, 'Edit': True, 'T': 'B', 'ID': 28}, {'Name': 'FirstDate', 'ReportTypeID': 7, 'DataType': 'd', 'AccessType': 'd', 'Label': 'First\nDate', 'Width': 80, 'Edit': True, 'T': 'B', 'ID': 29}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 8, 'Edit': False, 'T': 'A', 'ID': 30}, {'Name': 'ShortName', 'ReportTypeID': 8, 'DataType': 't', 'AccessType': 'd', 'Label': 'Short\nName', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 31}, {'Name': 'Name', 'ReportTypeID': 8, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'A', 'ID': 32}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 9, 'Edit': False, 'T': 'B', 'ID': 33}, {'Name': 'Task/Name', 'ReportTypeID': 9, 'DataType': 't', 'AccessType': 'i', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 34}, {'Name': 'Day/Hours', 'DataType': 'i', 'AccessType': 's', 'ReportTypeID': 9, 'Edit': False, 'T': 'X', 'ID': 35}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 10, 'Edit': False, 'T': 'A', 'ID': 36}, {'Name': 'Name', 'ReportTypeID': 10, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'A', 'ID': 37}, {'Name': 'Date', 'ReportTypeID': 10, 'DataType': 'd', 'AccessType': 'd', 'Width': 80, 'Edit': True, 'T': 'A', 'ID': 38}, {'Name': 'Hours', 'ReportTypeID': 10, 'DataType': 'i', 'AccessType': 'd', 'Width': 40, 'Edit': True, 'T': 'A', 'ID': 39}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 11, 'Edit': False, 'T': 'A', 'ID': 40}, {'Name': 'Also', 'ReportTypeID': 11, 'DataType': 'i', 'AccessType': 'd', 'Width': 40, 'Edit': False, 'T': 'A', 'ID': 41}, {'Name': 'Name', 'ReportTypeID': 11, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': False, 'T': 'A', 'ID': 42}, {'Name': 'TableA', 'ReportTypeID': 11, 'DataType': 't', 'AccessType': 'd', 'Label': 'Table\nA', 'Width': 100, 'Edit': False, 'T': 'A', 'ID': 43}, {'Name': 'TableB', 'ReportTypeID': 11, 'DataType': 't', 'AccessType': 'd', 'Label': 'Table\nB', 'Width': 100, 'Edit': False, 'T': 'A', 'ID': 44}, {'Name': 'Label', 'ReportTypeID': 11, 'DataType': 't', 'AccessType': 'd', 'Width': 120, 'Edit': True, 'T': 'A', 'ID': 45}, {'Name': 'ID', 'DataType': 'i', 'AccessType': 'd', 'ReportTypeID': 12, 'Edit': False, 'T': 'B', 'ID': 46}, {'Name': 'DataType', 'DataType': 't', 'AccessType': 'd', 'Label': 'Data Type', 'ReportTypeID': 12, 'Edit': False, 'T': 'B', 'ID': 47}, {'Name': 'AccessType', 'DataType': 't', 'AccessType': 'd', 'Label': 'Access Type', 'ReportTypeID': 12, 'Edit': False, 'T': 'B', 'ID': 48}, {'Name': 'Edit', 'DataType': 'b', 'AccessType': 'd', 'ReportTypeID': 12, 'Edit': False, 'T': 'B', 'ID': 49}, {'Name': 'Name', 'ReportTypeID': 12, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': False, 'T': 'B', 'ID': 50}, {'Name': 'Label', 'ReportTypeID': 12, 'DataType': 't', 'AccessType': 'd', 'Width': 140, 'Edit': True, 'T': 'B', 'ID': 51}], 'ReportType': [{'SuggestedColumns': ',Name,,;,StartDate,,;,TargetEndDate,,', 'TableA': 'Project', 'ID': 1, 'Name': 'Project'}, {'SuggestedColumns': 'Project,Name,,;,Name,,', 'Name': 'Project/Report', 'TableB': 'Report', 'Also': 1, 'TableA': 'Project', 'ID': 2}, {'SuggestedColumns': ',Name,,;,StartDate,,;,EffortHoura,,;,DurationHours,,;,CalculatedStartDate,,;,Day/Gantt,,21', 'TableA': 'Task', 'ID': 3, 'Name': 'Task'}, {'SuggestedColumns': 'Task,Name,,;,EffortHoura,,;,DurationHours,,;,Resource/Name,,', 'Name': 'Task/Assignment', 'TableB': 'Assignment', 'Also': 3, 'TableA': 'Task', 'ID': 4}, {'SuggestedColumns': 'Task,Name,,;,Prerequisite/Name,,', 'Name': 'Task/Dependency', 'TableB': 'Dependency', 'Also': 3, 'TableA': 'Task', 'ID': 5}, {'TableA': 'Report', 'ID': 6, 'Name': 'Report'}, {'TableB': 'ReportColumn', 'Also': 6, 'TableA': 'Report', 'ID': 7, 'Name': 'Report/ReportColumn'}, {'TableA': 'Resource', 'ID': 8, 'Name': 'Resource'}, {'SuggestedColumns': 'Resource,Name,,;,Task/Name,,', 'Name': 'Resource/Assignment', 'TableB': 'Assignment', 'Also': 8, 'TableA': 'Resource', 'ID': 9}, {'SuggestedColumns': ',Name,,;,Date,,;,Hours,,', 'TableA': 'Holiday', 'ID': 10, 'Name': 'Holiday'}, {'TableA': 'ReportType', 'ID': 11, 'Name': 'ReportType'}, {'TableB': 'ColumnType', 'Also': 11, 'TableA': 'ReportType', 'ID': 12, 'Name': 'ReportType/ColumnType'}], 'Assignment': [], 'TableAlias': [{'ID': 1, 'Prerequisite': 'Task', 'OtherData': 'Other'}], 'Project': [{'ID': 1, 'Name': 'All Projects'}, {'ID': 2, 'Name': 'New Project'}], 'Dependency': [], 'Other': [{'WeekHours': [8, 8, 8, 8, 8, 0, 0], 'FileSignature': 100, 'LastChange': 2, 'ID': 1}], 'ReportColumn': [{'A': 'Name', 'ColumnTypeID': 2, 'B': 'Name', 'TypeA': 'CHAR', 'Label': 'Name', 'Width': 140, 'NextColumn': 2, 'Periods': 0, 'TypeB': 'CHAR', 'ID': 1, 'ReportID': 1}, {'A': 'StartDate', 'ColumnTypeID': 3, 'TypeA': 'DATE', 'Label': 'Start Date', 'Width': 80, 'NextColumn': 3, 'Periods': 0, 'ID': 2, 'ReportID': 1}, {'A': 'TargetEndDate', 'ColumnTypeID': 4, 'TypeA': 'DATE', 'Label': 'Target Date', 'Width': 80, 'NextColumn': 0, 'Periods': 0, 'ID': 3, 'ReportID': 1}, {'A': 'Name', 'ColumnTypeID': 42, 'TypeA': 'CHAR', 'Label': 'Name', 'Width': 140, 'NextColumn': 12, 'Periods': 0, 'ID': 4, 'ReportID': 2}, {'A': 'Name', 'ColumnTypeID': 32, 'TypeA': 'CHAR', 'Label': 'Name', 'Width': 140, 'NextColumn': 0, 'Periods': 0, 'ID': 5, 'ReportID': 3}, {'A': 'Name', 'ColumnTypeID': 9, 'TypeA': 'CHAR', 'Label': 'Name', 'Width': 140, 'NextColumn': 7, 'Periods': 0, 'ID': 6, 'ReportID': 4}, {'A': 'StartDate', 'ColumnTypeID': 10, 'TypeA': 'DATE', 'Label': 'Start Date', 'Width': 80, 'NextColumn': 8, 'Periods': 0, 'ID': 7, 'ReportID': 4}, {'A': 'DurationHours', 'ColumnTypeID': 11, 'TypeA': 'INT', 'Label': 'Duration', 'Width': 80, 'NextColumn': 9, 'Periods': 0, 'ID': 8, 'ReportID': 4}, {'A': 'CalculatedStartDate', 'ColumnTypeID': 12, 'TypeA': 'DATE', 'Label': 'Start Date\n(Calculated)', 'Width': 80, 'NextColumn': 10, 'Periods': 0, 'ID': 9, 'ReportID': 4}, {'A': 'CalculatedEndDate', 'ColumnTypeID': 13, 'TypeA': 'DATE', 'Label': 'End Date\n(Calculated)', 'Width': 80, 'NextColumn': 11, 'Periods': 0, 'ID': 10, 'ReportID': 4}, {'ColumnTypeID': 14, 'Time': 'Day', 'TypeA': 'CHART', 'NextColumn': 0, 'ReportID': 4, 'FirstDate': '2006-03-16', 'ID': 11, 'Periods': 21}, {'ColumnTypeID': 50, 'ReportID': 2, 'ID': 12, 'Width': 140}], 'Report': [{'Name': 'Project/Report List', 'FirstColumn': 1, 'ProjectID': 1, 'FirstRow': 1, 'ReportTypeID': 2, 'ID': 1}, {'Name': 'Report Options', 'FirstColumn': 4, 'ProjectID': 1, 'FirstRow': 8, 'ReportTypeID': 12, 'ID': 2}, {'Name': 'Resource List', 'FirstColumn': 5, 'ProjectID': 1, 'FirstRow': 71, 'ReportTypeID': 8, 'ID': 3}, {'Web': 1, 'Name': 'Gantt Chart', 'FirstColumn': 6, 'SelectValue': 2, 'ProjectID': 2, 'SelectColumn': 'ProjectID', 'FirstRow': 4, 'ReportTypeID': 3, 'ID': 4}], 'Resource': [{'ID': 1, 'Name': 'First Resource'}], 'ReportRow': [{'TableID': 1, 'NextRow': 5, 'TableName': 'Project', 'ID': 1, 'ReportID': 1}, {'TableID': 2, 'NextRow': 3, 'TableName': 'Project', 'ID': 2, 'ReportID': 1}, {'TableID': 4, 'ParentRow': 2, 'TableName': 'Report', 'ReportID': 1, 'ID': 3}, {'TableID': 1, 'TableName': 'Task', 'ID': 4, 'ReportID': 4}, {'TableName': 'Report', 'NextRow': 6, 'TableID': 1, 'ParentRow': 1, 'ID': 5, 'ReportID': 1}, {'TableName': 'Report', 'NextRow': 7, 'TableID': 2, 'ReportID': 1, 'Hidden': True, 'ID': 6, 'ParentRow': 1}, {'TableName': 'Report', 'NextRow': 2, 'TableID': 3, 'ParentRow': 1, 'ID': 7, 'ReportID': 1}, {'TableID': 1, 'NextRow': 20, 'TableName': 'ReportType', 'ID': 8, 'ReportID': 2}, {'TableID': 2, 'NextRow': 24, 'TableName': 'ReportType', 'ID': 9, 'ReportID': 2}, {'TableID': 3, 'NextRow': 26, 'TableName': 'ReportType', 'ID': 10, 'ReportID': 2}, {'TableID': 4, 'NextRow': 35, 'TableName': 'ReportType', 'ID': 11, 'ReportID': 2}, {'TableID': 5, 'NextRow': 37, 'TableName': 'ReportType', 'ID': 12, 'ReportID': 2}, {'TableName': 'ReportType', 'NextRow': 39, 'TableID': 6, 'ReportID': 2, 'Hidden': True, 'ID': 13}, {'TableName': 'ReportType', 'NextRow': 44, 'TableID': 7, 'ReportID': 2, 'Hidden': True, 'ID': 14}, {'TableID': 8, 'NextRow': 49, 'TableName': 'ReportType', 'ID': 15, 'ReportID': 2}, {'TableID': 9, 'NextRow': 52, 'TableName': 'ReportType', 'ID': 16, 'ReportID': 2}, {'TableID': 10, 'NextRow': 55, 'TableName': 'ReportType', 'ID': 17, 'ReportID': 2}, {'TableName': 'ReportType', 'NextRow': 59, 'TableID': 11, 'ReportID': 2, 'Hidden': True, 'ID': 18}, {'TableName': 'ReportType', 'NextRow': 65, 'TableID': 12, 'ReportID': 2, 'Hidden': True, 'ID': 19}, {'TableName': 'ColumnType', 'NextRow': 21, 'TableID': 1, 'ParentRow': 8, 'ID': 20, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 22, 'TableID': 2, 'ParentRow': 8, 'ID': 21, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 23, 'TableID': 3, 'ParentRow': 8, 'ID': 22, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 9, 'TableID': 4, 'ParentRow': 8, 'ID': 23, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 25, 'TableID': 5, 'ParentRow': 9, 'ID': 24, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 10, 'TableID': 6, 'ParentRow': 9, 'ID': 25, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 27, 'TableID': 7, 'ParentRow': 10, 'ID': 26, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 28, 'TableID': 8, 'ParentRow': 10, 'ID': 27, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 29, 'TableID': 9, 'ParentRow': 10, 'ID': 28, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 30, 'TableID': 10, 'ParentRow': 10, 'ID': 29, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 31, 'TableID': 11, 'ParentRow': 10, 'ID': 30, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 32, 'TableID': 12, 'ParentRow': 10, 'ID': 31, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 33, 'TableID': 13, 'ParentRow': 10, 'ID': 32, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 34, 'TableID': 14, 'ParentRow': 10, 'ID': 33, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 11, 'TableID': 15, 'ReportID': 2, 'Hidden': True, 'ID': 34, 'ParentRow': 10}, {'TableName': 'ColumnType', 'NextRow': 36, 'TableID': 16, 'ParentRow': 11, 'ID': 35, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 12, 'TableID': 17, 'ParentRow': 11, 'ID': 36, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 38, 'TableID': 18, 'ParentRow': 12, 'ID': 37, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 13, 'TableID': 19, 'ParentRow': 12, 'ID': 38, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 40, 'TableID': 20, 'ReportID': 2, 'Hidden': True, 'ID': 39, 'ParentRow': 13}, {'TableName': 'ColumnType', 'NextRow': 41, 'TableID': 21, 'ReportID': 2, 'Hidden': True, 'ID': 40, 'ParentRow': 13}, {'TableName': 'ColumnType', 'NextRow': 42, 'TableID': 22, 'ReportID': 2, 'Hidden': True, 'ID': 41, 'ParentRow': 13}, {'TableName': 'ColumnType', 'NextRow': 43, 'TableID': 23, 'ReportID': 2, 'Hidden': True, 'ID': 42, 'ParentRow': 13}, {'TableName': 'ColumnType', 'NextRow': 14, 'TableID': 24, 'ReportID': 2, 'Hidden': True, 'ID': 43, 'ParentRow': 13}, {'TableName': 'ColumnType', 'NextRow': 45, 'TableID': 25, 'ReportID': 2, 'Hidden': True, 'ID': 44, 'ParentRow': 14}, {'TableName': 'ColumnType', 'NextRow': 46, 'TableID': 26, 'ReportID': 2, 'Hidden': True, 'ID': 45, 'ParentRow': 14}, {'TableName': 'ColumnType', 'NextRow': 47, 'TableID': 27, 'ReportID': 2, 'Hidden': True, 'ID': 46, 'ParentRow': 14}, {'TableName': 'ColumnType', 'NextRow': 48, 'TableID': 28, 'ReportID': 2, 'Hidden': True, 'ID': 47, 'ParentRow': 14}, {'TableName': 'ColumnType', 'NextRow': 15, 'TableID': 29, 'ReportID': 2, 'Hidden': True, 'ID': 48, 'ParentRow': 14}, {'TableName': 'ColumnType', 'NextRow': 50, 'TableID': 30, 'ParentRow': 15, 'ID': 49, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 51, 'TableID': 31, 'ParentRow': 15, 'ID': 50, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 16, 'TableID': 32, 'ParentRow': 15, 'ID': 51, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 53, 'TableID': 33, 'ParentRow': 16, 'ID': 52, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 54, 'TableID': 34, 'ParentRow': 16, 'ID': 53, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 17, 'TableID': 35, 'ReportID': 2, 'Hidden': True, 'ID': 54, 'ParentRow': 16}, {'TableName': 'ColumnType', 'NextRow': 56, 'TableID': 36, 'ParentRow': 17, 'ID': 55, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 57, 'TableID': 37, 'ParentRow': 17, 'ID': 56, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 58, 'TableID': 38, 'ParentRow': 17, 'ID': 57, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 18, 'TableID': 39, 'ParentRow': 17, 'ID': 58, 'ReportID': 2}, {'TableName': 'ColumnType', 'NextRow': 60, 'TableID': 40, 'ReportID': 2, 'Hidden': True, 'ID': 59, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 61, 'TableID': 41, 'ReportID': 2, 'Hidden': True, 'ID': 60, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 62, 'TableID': 42, 'ReportID': 2, 'Hidden': True, 'ID': 61, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 63, 'TableID': 43, 'ReportID': 2, 'Hidden': True, 'ID': 62, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 64, 'TableID': 44, 'ReportID': 2, 'Hidden': True, 'ID': 63, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 19, 'TableID': 45, 'ReportID': 2, 'Hidden': True, 'ID': 64, 'ParentRow': 18}, {'TableName': 'ColumnType', 'NextRow': 66, 'TableID': 46, 'ReportID': 2, 'Hidden': True, 'ID': 65, 'ParentRow': 19}, {'TableName': 'ColumnType', 'NextRow': 67, 'TableID': 47, 'ReportID': 2, 'Hidden': True, 'ID': 66, 'ParentRow': 19}, {'TableName': 'ColumnType', 'NextRow': 68, 'TableID': 48, 'ReportID': 2, 'Hidden': True, 'ID': 67, 'ParentRow': 19}, {'TableName': 'ColumnType', 'NextRow': 69, 'TableID': 49, 'ReportID': 2, 'Hidden': True, 'ID': 68, 'ParentRow': 19}, {'TableName': 'ColumnType', 'NextRow': 70, 'TableID': 50, 'ReportID': 2, 'Hidden': True, 'ID': 69, 'ParentRow': 19}, {'TableName': 'ColumnType', 'TableID': 51, 'ParentRow': 19, 'Hidden': True, 'ID': 70, 'ReportID': 2}, {'TableID': 1, 'TableName': 'Resource', 'ID': 71, 'ReportID': 3}], 'Prerequisite': [{'StartDate': '2007-12-26', 'TotalFloatHours': 0, 'Name': 'New Name!!!', 'hES': 14576, 'ProjectID': 2, 'hLS': 14576, 'hEF': 14584, 'CalculatedEndDate': '2007-12-27', 'CalculatedEndHour': 0, 'FreeFloatHours': 0, 'hLF': 14584, 'CalculatedStartDate': '2007-12-26', 'ID': 1, 'CalculatedStartHour': 0}]}, {'Task': 'Prerequisite', 'OtherData': 'Other'}, {'NextID': {'Task': 2, 'Resource': 2, 'Holiday': 1, 'Assignment': 1, 'TableAlias': 2, 'Project': 3, 'Dependency': 1, 'Other': 2, 'ReportType': 13, 'Report': 5, 'ColumnType': 52, 'ReportRow': 71, 'ReportColumn': 13}}]  
  • server/trunk/update/test/test_update_server.py

    r165 r358  
    1 1 #!/usr/local/bin/python  
    2 2 # test_update_server.py -- test script  
    3   # Copyright 2006 by Brian C. Christensen  
      3 # Copyright 2006, 2007 by Brian C. Christensen  
    3 3  
    4 4 #    This file is part of GanttPV.  
     
    35 35 # 060406 - Brian - updated to use standard test directory  
    36 36 # 060407 - Brian - test resource filter  
      37 # 071228 - Brian - corrected all tests to work with current version of server  
    37 38  
    38 39 import  os  
     
    79 80             print "for key %s, expected %s, found %s" % (k, v, `b.get(k)`)  
    80 81             xpass = 0  
      82     for k, v in b.iteritems():  
      83         if k not in a:  
      84             print "unexpected key %s with value %s" % (k, v)  
      85             xpass = 0  
    81 86     return xpass  
    82 87  
     
    88 93     for k, v in a.iteritems():  # the v's are dicts  
    89 94         compare_dicts(v, b.get(k))  
      95     for k, v in b.iteritems():  
      96         if k not in a:  
      97             print "unexpected key %s" % k  
      98             xpass = 0  
    90 99     return xpass  
    91 100  
     
    94 103     # compare dict  
    95 104     if len(a) != len(b):  
    96           print "expected %d keys, found %d" % (len(a), len(b))  
      105         print "top dict expected %d keys, found %d" % (len(a), len(b))  
    96 105         xpass = 0  
    97 106     for k, v in a.iteritems():  # dict layer  
     
    100 109         # compare arrays  
    101 110         if len(c) != len(d):  
    102               print "expected %s, found %s" % (len(c), len(d))  
      111             print "%s array expected %s, found %s" % (k, len(c), len(d))  
    102 111             xpass = 0  
    103 112         for e, f in zip(c, d):  # second level list  
    104 113             # compare dicts  
    105 114             compare_dicts(e, f)  # lowest level dict  
      115     for k, v in b.iteritems():  
      116         if k not in a:  
      117             print "unexpected key %s" % k  
      118             xpass = 0  
    106 119     return xpass  
    107 120  
     
    110 123     global xpass  
    111 124     if len(a) != len(b):  
    112           print "expected %s, found %s" % (len(a), len(b))  
      125         print "array1 expected %s, found %s" % (len(a), len(b))  
    112 125         xpass = 0  
    113 126     for c, d in zip(a, b):  # first level list  
    114 127         if len(c) != len(d):  
    115               print "expected %s, found %s" % (len(c), len(d))  
      128             print "array2 expected %s, found %s" % (len(c), len(d))  
    115 128             xpass = 0  
    116 129         for e, f in zip(c, d):  # second level list  
     
    120 133     return xpass  
    121 134  
    122   def compare_values(a, b):  
      135 def compare_values(label, a, b):  
    122 135     global xpass  
    123 136     if a != b:  
    124           print "expected %s, found %s" % (`a`, `b`)  
      137         print "%s - expected %s, found %s" % (label, `a`, `b`)  
    124 137         xpass = 0  
    125 138     return xpass  
     
    135 148  
    136 149 # test of server  
    137   def DoStuff():  
      150 def RunTests():  
    137 150  
    138 151     update_count = 0  
      152     all_changes = []  
    139 153  
    140 154 ### these lines would be used in a web script  
     
    144 158 ##    self.ReportID = report  
    145 159  
    146   #    server = xmlrpclib.ServerProxy("http://localhost:8001")  
    147       server = xmlrpclib.ServerProxy("http://192.168.0.5:8001")  
      160     server = xmlrpclib.ServerProxy("http://localhost:8001")  
      161 #    server = xmlrpclib.ServerProxy("http://192.168.0.11:8046")  
    148 162  
    149       Test("make sure I can talk to server:")  
      163     Test("make sure I can talk to server (giveback & givebackab):")  
    149 163     result = server.giveback("different data")  
    150       compare_values("different data", result)  
      164     compare_values('giveback result', "different data", result)  
    150 164     Result(result)  
    151 165      
    152 166     result = server.givebackab("a", "b")  
    153       compare_values("ab", result)  
      167     compare_values('giveback add result', "ab", result)  
    153 167     Result(result)  
    154 168  
    155 169     result = server.givebackab(1, 5)  
    156       compare_values(6, result)  
      170     compare_values('give back add result', 6, result)  
    156 170     Result(result)  
    157 171  
    158       Test("activated test db:")  
      172     Test("ask server to create a test database (activate_test_database):")  
    158 172     parms = {  
    159 173         'S': 10,  
     
    171 185     Result(result)  
    172 186  
    173       Test("request all next id's (deprecated function):")  
    174       nextids = {'Task': 2, 'Resource': 2, 'Holiday': 1, 'Assignment': 1, 'Project': 3,  
    175           'Dependency': 1, 'ReportType': 13, 'Report': 5, 'ColumnType': 52, 'ReportRow': 71,  
    176           'ReportColumn': 13}  
      187     Test("verify test database has expected tables and row counts (get_next_ids [deprecated function]):")  
      188     nextids = {'Task': 2, 'Resource': 2, 'Holiday': 1, 'Assignment': 1,  
      189                'TableAlias': 2, 'Project': 3, 'Dependency': 1,  
      190                'Other': 2, 'ReportType': 13, 'Report': 5, 'ColumnType': 52,  
      191                'ReportRow': 71, 'ReportColumn': 13}  
    177 192     result = server.get_next_ids()  
    178 193     compare_dicts(nextids, result)  
    179 194     Result(result)  
    180 195  
    181       Test("web - clear session:")  
      196     Test("web - attempt to clear non-existing session (clear_session):")  
    181 196     web_parms_s = {  
    182           'S': 100,  # Session  will generate a key if I don't provide one  
    183           'Key': '44445555',  # web file key and web change key  
      197         'S': 99,  # Session  will generate a key if I don't provide one  
      198         'Key': '44445555',  # web file key and web change key - not used  
    184 199         }  
    185 200     result = server.clear_session(web_parms_s)  
    186       compare_values(1, result)  
      201     compare_values('return code', 1, result)  
    186 201     Result(result)  
    187 202  
    188       Test("web - add database to session:")  
      203     web_parms_s = {  
      204         'S': 100,  # Session  will generate a key if I don't provide one  
      205         'Key': '44445555',  # web file key and web change key - not used  
      206         }  
      207     result = server.clear_session(web_parms_s)  # clear session for next tests  
      208  
      209     Test("web - try to add non-existing database (add_database_to_session):")  
      210     web_parms_s = {  
      211         'S': 100,  # Session  will generate a key if I don't provide one  
      212         'Key': 'XXXXYYYY',  # web file key and web change key  
      213         }  
      214     invalid_key, session = server.add_database_to_session(web_parms_s)  
      215     compare_values('session number', 100, session)  
      216     compare_values('return code', 0, invalid_key)  
      217     Result((invalid_key, session))  
      218  
      219     Test("web - try to add existing database (add_database_to_session):")  
    189 220     web_parms_s = {  
    190 221         'S': 100,  # Session  will generate a key if I don't provide one  
     
    194 225         }  
    195 226     valid_key, session = server.add_database_to_session(web_parms_s)  
    196       compare_values(100, session)  
    197       compare_values(1, valid_key)  
      227     compare_values('session number', 100, session)  
      228     compare_values('return code', 1, valid_key)  
    198 229     Result((valid_key, session))  
    199 230  
    200       Test("update - make report web visible:")  
      231     Test("update - make report web visible (commit_changes):")  
    200 231     web_parms = {  
    201 232         'Web': "",  # use web access permissions  
     
    209 240     changes.append(change)  
    210 241     result, updates = server.commit_changes(web_parms, changes)  
    211       compare_values([], result)  
    212       compare_values(update_count, updates)  
      242     compare_values('returned value', [], result)  
      243     compare_values('update count', update_count, updates)  
    213 244     Result(result)  
      245     all_changes.append(changes)  
    214 246  
    215 247     Test("web - create database report - databases:")  
     
    225 257 """  
    226 258     result = server.get_html_report(web_parms)  
    227       compare_values(page, result[:len(page)])  
      259     compare_values('page text', page, result[:len(page)])  
    227 259     Result(result)  
    228 260  
     
    240 272 """  
    241 273     result = server.get_html_report(web_parms)  
    242       compare_values(page, result[:len(page)])  
      274     compare_values('page text', page, result[:len(page)])  
    242 274     Result(result)  
    243 275  
     
    255 287 """  
    256 288     result = server.get_html_report(web_parms)  
    257       compare_values(page, result[:len(page)])  
      289     compare_values('page text', page, result[:len(page)])  
    257 289     Result(result)  
    258 290  
     
    268 300     changes.append(change)  
    269 301     result, updates = server.commit_changes(parms, changes)  
    270       compare_values(len(returned_error), len(result))  
      302     compare_values('', len(returned_error), len(result))  
    270 302     compare_dicts(returned_error[0], result[0])  
    271       compare_values(-1, updates)  
      303     compare_values('', -1, updates)  
    271 303     Result(result)  
    272 304  
     
    282 314     changes.append(change)  
    283 315     result, updates = server.commit_changes(parms, changes)  
    284       compare_values(3, result)  
    285       compare_values(-1, updates)  
      316     compare_values('', 3, result)  
      317     compare_values('', -1, updates)  
    286 318     Result((result, updates))  
    287 319  
    288       Test("client - send an valid single field change with edit permission:")  
      320     Test("client - send an valid two field change with edit permission:")  
    288 320     parms = {  
    289 321         "FileSignature": 100,  
     
    293 325     update_count += 1  
    294 326     changes = []  
    295       change = { "Table": "Task", "ID": 1, "Name": "New Name!!!", "_Name": "First Task" }  
      327     change = { "Table": "Task", "ID": 1,  
      328                "Name": "New Name!!!", "_Name": "First Task",  
      329                "StartDate": '2007-12-26' }  # prior value was null  
    296 330     changes.append(change)  
    297 331     result, updates = server.commit_changes(parms, changes)  
    298       compare_values([], result)  
    299       compare_values(update_count, updates)  
      332     compare_values('', [], result)  
      333     compare_values('update count', update_count, updates)  
    300 334     Result((result, updates))  
      335     all_changes.append(changes)  
    301 336  
    302 337     Test("client - request all of the changes committed so far:")  
     
    305 340         "Key": "2222"  # change permission key  
    306 341         }  
    307       two_changes = [[{'Table': 'Report', 'ID': 4, 'Web': 1}], [{'Table': 'Task', '_Name': 'First Task', 'Name': 'New Name!!!', 'ID': 1}]]  
    308       expected_nextids = {'Task': 2, 'Resource': 2, 'Holiday': 1, 'Assignment': 1, 'Project': 3, 'Dependency': 1, 'ReportType': 13, 'Report': 5, 'ColumnType': 52, 'ReportRow': 71, 'ReportColumn': 13}  
      342     two_changes = [[{'Table': 'Report', 'ID': 4, 'Web': 1}],  
      343                    [{'Table': 'Task', '_Name': 'First Task', 'Name': 'New Name!!!', 'ID': 1, 'StartDate': '2007-12-26'}]]  
      344     expected_nextids = {'Task': 2, 'Resource': 2, 'Holiday': 1, 'Assignment': 1,  
      345                'TableAlias': 2, 'Project': 3, 'Dependency': 1,  
      346                'Other': 2, 'ReportType': 13, 'Report': 5, 'ColumnType': 52,  
      347                'ReportRow': 71, 'ReportColumn': 13}  # same as before  
    309 348     result, version, nextids = server.get_updates_since(parms, 0, {})  
    310 349     compare_aad(two_changes, result)  
    311       compare_values(update_count, version)  
      350     compare_values('update count', update_count, version)  
    311 350     compare_dicts(expected_nextids, nextids)  
    312 351     Result((result, version, nextids))  
     
    322 361         }  
    323 362     result = server.get_database(parms)  
    324       compare_values(3, len(result))  
      363     compare_values('num values returned', 3, len(result))  
      364     print 'part 1'  
    325 365     compare_dad(big_test_data.update2[0], result[0])  
      366     print 'part 2'  
    326 367     compare_dicts(big_test_data.update2[1], result[1])  
      368     print 'part 3'  
    327 369     compare_dd(big_test_data.update2[2], result[2])  
    328       Result(result, 0)  
      370 #    Result(result, 0)  
      371     Result(result)  
    329 372  
    330       Test("client - send an invalid multi field change:")  
      373     Test("client - send an invalid multi field change:")  # incorrect prior values  
    330 373     parms = {  
    331 374         "FileSignature": 100,  
     
    340 383     changes.append(change)  
    341 384     result, updates = server.commit_changes(parms, changes)  
    342       compare_values(len(returned_error), len(result))  
      385     compare_values('', len(returned_error), len(result))  
    342 385     compare_dicts(returned_error[0], result[0])  
    343       compare_values(-1, updates)  
      386     compare_values('', -1, updates)  
    343 386     Result(result)  
    344 387  
     
    356 399         ]  
    357 400     result, updates = server.commit_changes(parms, changes_A)  
    358       compare_values([], result)  
    359       compare_values(update_count, updates)  
      401     compare_values('', [], result)  
      402     compare_values('update count', update_count, updates)  
    360 403     Result((result, updates))  
      404     all_changes.append(changes_A)  
    361 405  
    362 406     Test("client - reserve ids for next update")  
     
    365 409         "Key": "2222"  # change permission key  
    366 410         }  
    367       # IMPORTANT - server is wrong, it needs to have next resource id = 2  <-- TODO  
    368       the_nextids = {'Task': 2, 'Resource': 3, 'Holiday': 1, 'Dependency': 1, 'Assignment': 1, 'Project': 3, 'ResourceDay': 1, 'ResourceMeasurement': 3, 'ReportType': 14, 'Measurement': 2, 'Report': 6, 'ColumnType': 54, 'ReportRow': 71, 'ReportColumn': 16}  
      411     # this indicates how many new rows of each type we have created  
    369 412     reserve_rows = { "Measurement": 1, 'Resource': 1, 'ResourceMeasurement': 2,   
    370 413                      'Report': 1, 'ReportColumn': 3,  
     
    372 415                      'ResourceDay': 0,    # make sure server creates table for future records  
    373 416                    }  
      417     # the server responds by reserving enough ID's for all of our new rows  
      418     the_nextids = {'Task': 2, 'Resource': 3, 'Holiday': 1, 'Dependency': 1, 'Assignment': 1,  
      419                    'Project': 3, 'ResourceDay': 1, 'ResourceMeasurement': 3, 'ReportType': 14,  
      420                    'Measurement': 2, 'Report': 6, 'ColumnType': 54, 'ReportRow': 71,  
      421                    'ReportColumn': 16, 'TableAlias': 2, 'Other': 2}  
      422     # we are asking the server for only the most recent update (from the prior test)  
    374 423     updates, current_version, nextids = server.get_updates_since(parms, update_count-1, reserve_rows)  
    375 424     compare_aad([changes_A], updates)  
    376       compare_values(update_count, current_version)  
      425     compare_values('update count', update_count, current_version)  
    376 425     compare_dicts(the_nextids, nextids)  
    377 426     Result((updates, current_version, nextids))  
     
    383 432         "Key": "2222"  # change permission key  
    384 433         }  
    385       update_count += 1  
      434     update_count += 2  # the server will also create an update for the report rows that it must add  
    385 434     changes = [   # IMPORTANT ReportType.Also is a foreign key <-- TO DO!!!  
    386 435         { "Table": "Other", "ID": 1, "WebName": "Test Database" },  
     
    410 459         ]  
    411 460     result, updates = server.commit_changes(parms, changes)  
    412       compare_values([], result)  
    413       compare_values(update_count, updates)  
      461     compare_values('', [], result)  
      462     compare_values('update count', update_count, updates)  
    414 463     Result((result, updates))  
      464     all_changes.append(changes)  
      465  
      466     Test("client - verify all changes on server")  
      467     parms = {  
      468         "FileSignature": 100,  
      469         "Key": "2222"  # change permission key  
      470         }  
      471     reserve_rows = { }  # don't reserve any row ID's  
      472     the_nextids['ReportRow'] += 10  # the server is expected to add 10 report rows  
      473     # we are asking the server for all changes from prior tests  
      474     updates, current_version, nextids = server.get_updates_since(parms, 0, reserve_rows)  
      475     for i in range(len(all_changes)):  
      476         print 'Change %d' % i  
      477         compare_aad([all_changes[i]], [updates[i]])  
      478     compare_values('update count', update_count, current_version)  
      479     compare_dicts(the_nextids, nextids)  
      480     # print 'server updates\n', updates[-1]  
      481     table_count = {}  # count the number of rows added by each table  
      482     new_rows = 0  
      483     for u in updates[-1]:  
      484         if u.get('_zzStatus') == 'deleted':  
      485             new_rows += 1  
      486         name = u['Table']  
      487         if name in table_count:  
      488             table_count[name] += 1  
      489         else:  
      490             table_count[name] = 1  
      491     compare_values('server added rows', 10, new_rows)  
      492     compare_values('server changed report records', 2, table_count['Report'])  
      493     compare_values('server changed report row records', 12, table_count['ReportRow'])  
      494     Result((updates, current_version, nextids))  
      495  
    415 496  
    416   DoStuff()  
      497 RunTests()  
  • server/trunk/update/server/current/Configuration.ini

    r222 r358  
    16 16 # GanttPV saves this number in downloaded files and uses it to share updates with the server  
    17 17  
    18   server_ip = 192.168.0.7  
      18 server_ip = 127.0.0.1  
      19 # server_ip = 192.168.0.7  
    19 20  
    20 21 # server port number  
  • server/trunk/update/server/ganttpv_update_server.py

    r278 r358  
    188 188 def clear_session(parms):  
    189 189     session = parms.get('S')  
    190       key = parms.get('Key')  # should check for a key  
      190     # key = parms.get('Key')  # should check for a key??  
    190 190     if session in current_sessions: # use the key they provide if any  
    191 191         del current_sessions[session]  
      192         return 2  
    192 193     return 1  
    193 194  
     
    723 724         NonesOut(c)  
    724 725         changes.append(c)  
    725       GetUpdates().append(changes)  
      726     if changes:  
      727         GetUpdates().append(changes)  
    726 728     if debug: print "end SaveLocalChanges"  
    727 729  
     
    916 918     while tries:  
    917 919         try:  
      920             print "Starting server on address %s:%s" % (server_ip, server_port)  
    918 921             server = SimpleXMLRPCServer.SimpleXMLRPCServer((server_ip, server_port))  
    919 922             print "Found socket"