Parent Directory
|
Revision Log
Sticky Revision: |
made a copy
* Thuban/Model/table.py (OldTableInterfaceMixin): Removed. (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin anymore * Thuban/Model/transientdb.py (TransientTableBase) (AutoTransientTable): Do not derive from OldTableInterfaceMixin anymore * test/test_table.py: Removed since the old interface it tests is gone.
(DBFTable.ReadValue): Use the new read_attribute method of the dbf objects
Make the table interface distinguish between row ids (an integer that uniquely identifies a row) and row ordinals (a simple row count from 0 to NumRows() - 1) * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal) (PostGISTable.RowOrdinalToId): New methods to conver between row ids and row ordinals (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword parameter row_is_ordinal to indicate whether the row parameter is the row id or the ordinal * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal) (TransientTableBase.RowOrdinalToId) (AutoTransientTable.RowIdToOrdinal) (AutoTransientTable.RowOrdinalToId): Same new methods as in PostGISTable. (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue) (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue): Same new parameter as in PostGISTable. * Thuban/Model/table.py (DBFTable.RowIdToOrdinal) (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal) (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable. (DBFTable.ReadValue, DBFTable.ReadRowAsDict) (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new parameter as in PostGISTable. * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal) (DataTable.RowOrdinalToId): New methods to convert between row ids and row ordinals. (TableGrid.SelectRowById): New method to select a row based on its ID as opposed to its ordinal (DataTable.GetValue, TableGrid.OnRangeSelect) (TableGrid.OnSelectCell, LayerTableGrid.select_shapes) (QueryTableFrame.OnQuery, QueryTableFrame.get_selected) (LayerTableFrame.__init__): Convert between row ids and row ordinals as appropriate * test/postgissupport.py (PostGISDatabase.__init__): Add doc-string. (PostGISDatabase.initdb): The optional third item in a tuple in tables is now a (key, value) list with additional arguments to pass to upload_shapefile (upload_shapefile): New parameter gid_offset to allow gids that are not the same as the shapeids in the shapefile (PostgreSQLServer.get_default_static_data_db): Use the new gid_offset to make the gids in landmarks 1000 higher than the shapeids in the shapefile * test/test_viewport.py (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the new shapeids in the landmarks table * test/test_transientdb.py (TestTransientTable.run_iceland_political_tests) (TestTransientTable.test_transient_joined_table): Add tests for the new table methods and new keywords arguments. * test/test_postgis_db.py (TestPostGISTable.test_read_row_as_dict_row_count_mode) (TestPostGISTable.test_read_value_row_count_mode) (TestPostGISTable.test_row_id_to_ordinal) (TestPostGISTable.test_row_oridnal_to_id): New test for the new table methods and the new arguments (TestPostGISShapestorePoint.test_shapes_in_region) (TestPostGISShapestorePoint.test_shape_raw_data) (TestPostGISShapestorePoint.test_shape_points) (TestPostGISShapestorePoint.test_shape_shapeid) (TestPostGISShapestorePoint.test_all_shapes) (TestPostGISTable.test_simple_query) (TestPostGISTable.test_simple_query) (TestPostGISTable.test_simple_query) (TestPostGISTable.test_read_value) (TestPostGISTable.test_read_row_as_dict): Adapt to the new shapeids in the landmarks table * test/test_memory_table.py (TestMemoryTable.test_read_row_as_dict_row_count_mode) (TestMemoryTable.test_read_value_row_count_mode) (TestMemoryTable.test_row_id_to_ordinal) (TestMemoryTable.test_row_oridnal_to_id): New test for the new table methods and the new arguments * test/test_dbf_table.py (TestDBFTable.test_read_row_as_dict_row_count_mode) (TestDBFTable.test_read_value_row_count_mode) (TestDBFTable.test_row_id_to_ordinal) (TestDBFTable.test_row_oridnal_to_id): New test for the new table methods and the new arguments
Fix some bugs in Thuban and the test suite that were uncovered by changes introduced in Python 2.3: * Thuban/Model/table.py (DBFTable.__init__): Make sure the filename is an absolute name * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the filename is an absolute name * test/test_save.py (SaveSessionTest.testRasterLayer): Use a unique filename to save to and use the correct relative filename in the expected output. (SaveSessionTest.test_dbf_table): Use the correct relative filename in the expected output. * test/test_layer.py (TestLayer.test_raster_layer): Update the test to check whether the filename is absolute.
(table_to_dbf, table_to_csv): Renamed parameter records to rows and add docstring.
(table_to_dbf, table_to_csv): Added 'records' parameter which is a list of records that restricts which records are saved. Fixes RTbug #1997.
* Thuban/Model/table.py (_find_dbf_column_names): New. Helper function for table_to_dbf (table_to_dbf): Deal with names longer than the 10 character limit * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add doc-string (TestTableToDBF.test_table_to_dbf_long_col_names): New test for long column names
* Thuban/Model/table.py (DBFTable.__init__): Omit the extension when determining the title from the filename. * test/test_dbf_table.py (TestDBFTable.test_title): Update to reflect changes in the way the title is derived from the filename
Remove the Precision methods again. They're too DBF specific to be part of the table interface and they're only used in table_to_dbf anyway. * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a fixed precision of 12 for doubles. (TransientTableBase.Precision): Removed (AutoTransientTable.Width): Delegate to self.table. * Thuban/Model/table.py (DBFTable.Precision) (MemoryTable.Precision): Removed. (MemoryTable.Width): Use a fixed precision of 12 for doubles. (table_to_dbf): Use a fixed precision of 12 for floats unless the column object specifies something else.
(DBFTable.Width, MemoryTable.Width): Return width (in characters) for a column. (DBFTable.Precision, MemoryTable.Precision): Return decimal precision. (table_to_dbf): Write table to dbf file. (table_to_csv): Write table to csv file.
(DBFTable, MemoryTable): mix-in TitledObject and call its init-method with a default title. Remove Title() method.
Give the tables titles so that the GUI can display more meaningful names. For now the titles are fixed but depend on e.g. filenames or the titles of the joined tables. * Thuban/Model/transientdb.py (TransientTable.Title) (TransientJoinedTable.Title, AutoTransientTable.Title): New. * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New. * test/test_transientdb.py (TestTransientTable.test_auto_transient_table_title): New. Test for the Title method (TestTransientTable.test_transient_joined_table) (TestTransientTable.test_transient_table): Add test for the Title methods * test/test_memory_table.py (TestMemoryTable.test_title): New. Test for the Title method * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for the Title method
* Thuban/Model/table.py (DBFTable.FileName): New. Accessor method for the filename * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test for the FileName method (TestDBFTableWriting.test_write): Fix spelling of filename
Implement a way to discover dependencies between tables and shapestores. * Thuban/Model/transientdb.py (TransientTableBase.Dependencies) (TransientJoinedTable.Dependencies) (AutoTransientTable.SimpleQuery): New. Implement the dependencies interface (TransientJoinedTable.__init__): Keep tack of the original table objects in addition to the corresponding transient tables. * Thuban/Model/table.py (DBFTable.Dependencies) (MemoryTable.Dependencies): New. Implement the dependencies interface * Thuban/Model/data.py (ShapeTable): New. Helper class for ShapefileStore (ShapefileStore.__init__): Use ShapeTable instead of AutoTransientTable (ShapefileStore.Table, ShapefileStore.Shapefile): Add doc-strings (ShapefileStore.FileName, ShapefileStore.FileType): New. Accessor methods for filename and type (ShapefileStore.Dependencies): New. Implement the dependencies interface (DerivedShapeStore): New class to replace SimpleStore. The main difference to SimpleStore is that it depends not on a shapefile but another shapestore which expresses the dependencies a bit better (SimpleStore.__init__): Add deprecation warning. * test/test_dbf_table.py (TestDBFTable.test_dependencies): New. Test for the Dependencies method. * test/test_memory_table.py (TestMemoryTable.test_dependencies): New. Test for the Dependencies method. * test/test_transientdb.py (TestTransientTable.test_auto_transient_table_dependencies): New. Test for the Dependencies method. (TestTransientTable.test_transient_joined_table): Add test for the Dependencies method. * test/test_session.py (TestSessionSimple.setUp) (TestSessionSimple.tearDown): New. Implement a better way to destroy the sessions. (TestSessionSimple.test_initial_state) (TestSessionSimple.test_add_table): Bind session to self.session so that it's destroyed by tearDown (TestSessionSimple.test_open_shapefile): New. Test for OpenShapefile and the object it returns
* Thuban/Model/table.py (Table): Remove this compatibility alias for DBFTable. * test/test_table.py: Import DBFTable as Table because that alias doesn't exist anymore. * Thuban/UI/classgen.py: Remove some unused imports
Convert all table users to use the new table interface. This only covers Thuban itself, not GREAT-ER or other applications built on Thuban yet, so the compatibility interface stays in place for the time being but it now issues DeprecationWarnings. Finally, the new Table interface has a new method, HasColumn. * Thuban/Model/table.py (OldTableInterfaceMixin): All methods issue deprecation warnings when they're. The warnings refer to the caller of the method. (OldTableInterfaceMixin.__deprecation_warning): New. Helper method for the deprecation warnings * test/test_table.py: Ignore the deprecation warnings for the old table in the tests in this module. The purpose of the tests is to test the old interface, after all. * test/test_transientdb.py (TestTransientTable.run_iceland_political_tests): Use the constants for the types. Add a test for HasColumn (TestTransientTable.test_transient_joined_table): Adapt to new table interface. Add a test for HasColumn (TestTransientTable.test_transient_table_read_twice): Adapt to new table interface * Thuban/Model/transientdb.py (TransientTableBase.HasColumn) (AutoTransientTable.HasColumn): Implement the new table interface method (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange) (AutoTransientTable.UniqueValues): Adapt to new table interface * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType): Adapt to new table interface * test/test_layer.py (TestLayer.open_shapefile): Helper method to simplify opening shapefiles a bit easier. (TestLayer.test_arc_layer, TestLayer.test_polygon_layer) (TestLayer.test_point_layer): Use the new helper method (TestLayer.test_get_field_type): New. Test for the GetFieldType method * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for the new table method * test/test_memory_table.py (TestMemoryTable.test_has_column): Test for the new table method HasColumn
Convert the table implementations to a new table interface. All tables use a common mixin class to provide backwards compatibility until all table users have been updated. * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to provide backwards compatibility for table classes implementing the new interface (DBFTable, MemoryTable): Implement the new table interface. Use OldTableInterfaceMixin as base for compatibility (DBFColumn, MemoryColumn): New. Column description for DBFTable and MemoryTable resp. * test/test_dbf_table.py: New. Test cases for the DBFTable with the new table interface. * test/test_memory_table.py: New. Test cases for the MemoryTable with the new table interface. * test/test_table.py: Document the all tests in this file as only for backwards compatibility. The equivalent tests for the new interface are in test_memory_table.py and test_dbf_table.py (MemoryTableTest.test_read): field_info should be returning tuples with four items (MemoryTableTest.test_write): Make doc-string a more precise. * Thuban/Model/transientdb.py (TransientTableBase): Convert to new table interface. Derive from from OldTableInterfaceMixin for compatibility. (TransientTableBase.create): New intance variable column_map to map from names and indices to column objects (TransientTable.create): Use the new table interface of the input table (AutoTransientTable): Convert to new table interface. Derive from from OldTableInterfaceMixin for compatibility. (AutoTransientTable.write_record): Removed. It's not implemented yet and we still have to decide how to handle writing with the new table and data framework. * test/test_transientdb.py (TestTransientTable.run_iceland_political_tests) (TestTransientTable.test_transient_joined_table): Use the new table interface
(MemoryTable): New. Quite simple table implementation that operates on a list of tuples. All of the data are kept in the memory.
Next step of table implementation. Introduce a transient database using SQLite that some of the data is copied to on demand. This allows us to do joins and other operations that require an index for good performance with reasonable efficiency. Thuban now needs SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I haven't tested that. * Thuban/Model/transientdb.py: New. Transient database implementation. * test/test_transientdb.py: New. Tests for the transient DB classes. * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New classes to help automatically remove temporary files and directories. (Session.__init__): New instance variables temp_dir for the temporary directory and transient_db for the SQLite database (Session.temp_directory): New. Create a temporary directory if not yet done and return its name. Use AutoRemoveDir to have it automatically deleted (Session.TransientDB): Instantiate the transient database if not done yet and return it. * Thuban/Model/data.py (ShapefileStore.__init__): Use an AutoTransientTable so that data is copied to the transient DB on demand. (SimpleStore): New class that simply combines a table and a shapefile * Thuban/Model/table.py (Table, DBFTable): Rename Table into DBFTable and update its doc-string to reflect the fact that this is only the table interface to a DBF file. Table is now an alias for DBFTable for temporary backwards compatibility. * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure the last reference to the session goes away so that the temporary files are removed properly. * test/test_load.py (LoadSessionTest.tearDown): Remove the reference to the session to make sure the temporary files are removed.
(Table.field_range): New. Retrive the maximum and minimum values over the entire table for a given field. (Table.GetUniqueValues): New. Retrieve all the unique values in the table for a given field.
Remove unnecessary import. Fix a typo.
Put FIELDTYPE constants back
Put FIELDTYPE constants in common.py. (Table): Add field_info_by_name() to retrieve field information by specifying the field name, not the number.
Make writing records work correctly: (Table.__init__): Keep track of whether the DBF is open for writing (Table.write_record): Open the DBF file for writing when necessary
(Table.write_record, Table.__init__): Open dbf files only for reading by default. Use a new writable dbf object for writing.
* Thuban/Model/table.py (Table.write_record): New method to write records. (Table.__init__): Open the DBF file for writing too. * Thuban/UI/controls.py (RecordTable.SetValue): Write the value into the underlying table.
(Table.Destroy): New. Close the DBF file.
import all the source files
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, enter a numeric revision.
[email protected] | ViewVC Help |
Powered by ViewVC 1.1.26 |