Project

General

Profile

Statistics
| Revision:

# Date Author Comment
5098 09/28/2012 09:29 AM Aaron Marcuse-Kubitza

tnrs_db: Profile the TNRS requests. This involves using a finally block to ensure that the profiling stats are printed even if the program exits with an error.

5097 09/28/2012 09:13 AM Aaron Marcuse-Kubitza

tnrs_db: Reduced the chunk size to avoid slowing down the TNRS server

5096 09/28/2012 09:07 AM Aaron Marcuse-Kubitza

inputs/.TNRS/tnrs/tnrs.make: Added log option which outputs to the terminal instead when set to ""

5095 09/28/2012 09:01 AM Aaron Marcuse-Kubitza

tnrs_db: Added log messages for Making TNRS request and Storing TNRS response data so that if the TNRS daemon pauses, it's obvious which step it's waiting on

5094 09/28/2012 08:58 AM Aaron Marcuse-Kubitza

sql.py: insert(): ignore optimization: Fixed bug where needed to run insert_select() recoverably so that the aborted transaction is rolled back after a DuplicateKeyException or NullValueException

5093 09/28/2012 08:43 AM Aaron Marcuse-Kubitza

tnrs_db: If tnrs.repeated_tnrs_request() stil throws InvalidResponse, skip the current set in case its data caused the error. Note that it will still be tried again the next time tnrs_db is run.

5092 09/28/2012 08:34 AM Aaron Marcuse-Kubitza

mappings/VegCore-VegBIEN.csv: Don't forward scientificName to taxonoccurrence.authortaxoncode when importing just taxonpaths, as for TNRS

5091 09/28/2012 08:30 AM Aaron Marcuse-Kubitza

repeated_tnrs_request(): When retrying after an invalid response, output protocol info for debugging

5090 09/28/2012 08:29 AM Aaron Marcuse-Kubitza

inputs/Makefile: Import logs: Don't download .TNRS/tnrs/tnrs.make.log by default because it changes each time `make inputs/.TNRS/tnrs/tnrs-remake` is run, and any version downloaded for debugging should be preserved. It can still be downloaded by setting the tnrs_log env var.

5089 09/28/2012 08:17 AM Aaron Marcuse-Kubitza

tnrs_client, tnrs_db: Use new tnrs.repeated_tnrs_request()

5088 09/28/2012 08:16 AM Aaron Marcuse-Kubitza

tnrs.py: Added repeated_tnrs_request() to retry a TNRS request which returned an invalid response

5087 09/28/2012 08:05 AM Aaron Marcuse-Kubitza

db_xml.py: put_table(): Fixed bug where pkeys_loc needed to be initialized. Note that this bug was only triggered when importing a table with zero rows (in this case, the initial empty TNRS.tnrs table), because otherwise it would be set in the loop.

5086 09/28/2012 07:57 AM Aaron Marcuse-Kubitza

inputs/Makefile: Import logs: Also download inputs/.TNRS/tnrs/tnrs.make.log

5085 09/28/2012 07:56 AM Aaron Marcuse-Kubitza

inputs/Makefile: Import logs: Use new $(rsync*) to also sync datasources starting with ., such as .TNRS

5084 09/28/2012 07:55 AM Aaron Marcuse-Kubitza

lib/common.Makefile: rsync: Added $(rsync*) to rsync all files, including those starting with "."

5083 09/28/2012 07:43 AM Aaron Marcuse-Kubitza

tnrs.py: parse_response(): Raise custom InvalidResponse exception instead of SystemExit, so callers can catch the exception and respond to it

5082 09/28/2012 07:38 AM Aaron Marcuse-Kubitza

mappings/VegCore-VegBIEN.csv: taxonpath.taxonomicnamewithauthor _join_words mappings: Added space after taxon rank prefix (var., etc.) for infraspecific ranks

5081 09/27/2012 11:28 AM Aaron Marcuse-Kubitza

import_all: Start the tnrs daemon using `make inputs/.TNRS/tnrs/tnrs-remake &`

5080 09/27/2012 11:25 AM Aaron Marcuse-Kubitza

Added inputs/.TNRS/tnrs/tnrs.make to run tnrs_db on VegBIEN

5079 09/27/2012 11:25 AM Aaron Marcuse-Kubitza

Added tnrs_db to scrub the taxonpaths in VegBIEN using TNRS

5078 09/27/2012 11:19 AM Aaron Marcuse-Kubitza

Regenerated vegbien.ERD exports

5077 09/27/2012 11:17 AM Aaron Marcuse-Kubitza

schemas/vegbien.sql: taxonpath: Made it datasource-general and uniquely identified only by its taxonomicnamewithauthor so that the taxonpaths imported by the TNRS datasource will be matched and used directly when the other datasources are imported

5076 09/27/2012 11:10 AM Aaron Marcuse-Kubitza

schemas/vegbien.sql: taxonpath: taxonpath_unique_within_datasource_by_name unique index: Just do duplicate elimination on the taxonomicnamewithauthor, since that is now a required field and is generated by concatenating all the other fields. Note that the inserted row counts change slightly because the concatenation makes some names equal that are split among the fields differently, such as when the genus is included in the species field.

5075 09/27/2012 10:51 AM Aaron Marcuse-Kubitza

db_xml.py: put(): Added _alt optimization that just returns the first arg if it's non-NULL

5074 09/27/2012 10:49 AM Aaron Marcuse-Kubitza

sql_gen.py: Added is_nullable()

5073 09/27/2012 10:49 AM Aaron Marcuse-Kubitza

schemas/vegbien.sql: taxonpath.taxonomicnamewithauthor: Made it NOT NULL, so that all taxonpaths would have a concatenated name to feed to TNRS

5072 09/27/2012 10:37 AM Aaron Marcuse-Kubitza

mappings/VegCore-VegBIEN.csv: taxonomic terms: Changed _first to _alt because some datasources have NULL values in scientificNameWithAuthorship or scientificName, so it can't just be used in place of the joined-together taxonomic ranks

5071 09/27/2012 10:19 AM Aaron Marcuse-Kubitza

db_xml.py: put(): Parse input columns and process values in separate loops, so that structural XML function optimization code can be inserted between them

5070 09/27/2012 10:12 AM Aaron Marcuse-Kubitza

sql_io.py: put_table(): Removed comment that can support in_tables of any fixed-size iterable type, because the iterable must be ordered so that the first table can be treated specially

5069 09/27/2012 10:09 AM Aaron Marcuse-Kubitza

sql_io.py: put_table(): Support in_tables of any fixed-size iterable type

5068 09/27/2012 09:13 AM Aaron Marcuse-Kubitza

mappings/Veg+-VegCore.csv: cationExchangeCapacity->cationExchangeCapacity_cmol_kg mapping: Removed ? prefix because a mapping to only one set of units is unambiguous (if additional units for cationExchangeCapacity are found, this will become an ambiguous mapping). Note that canon automatically removes punctuation from VegCore terms, so this mapping would previously have had the ? prefix autoremoved anyway (both in inputs/*/*/map.csv and recently also in Veg+-VegCore.csv).

5067 09/27/2012 09:06 AM Aaron Marcuse-Kubitza

mappings/Makefile: .Veg+-VegCore.csv.last_cleanup: Translate VegCore terms using itself so that any mapping to another Veg+ term automatically becomes a mapping to a VegCore term. .VegX-VegCore.csv.last_cleanup: Translate VegCore terms using Veg+-VegCore.csv to keep the terms up to date.

5066 09/27/2012 09:04 AM Aaron Marcuse-Kubitza

mappings/VegX-VegCore.csv: Translated VegCore terms using Veg+-VegCore.csv

5065 09/27/2012 09:00 AM Aaron Marcuse-Kubitza

mappings/Makefile: .VegCore.csv.last_cleanup, .VegCore-VegBIEN.csv.last_cleanup: Apply Veg+-VegCore.csv so that terms can easily be renamed just by adding a mapping in Veg+-VegCore.csv, which will auto-translate all places that use the term. .VegCore-VegBIEN.csv.last_cleanup: Canonicalize to VegCore.csv so case changes in VegCore terms will automatically propagate to VegCore-VegBIEN.csv.

5064 09/27/2012 08:46 AM Aaron Marcuse-Kubitza

mappings/VegCore-VegBIEN.csv: Mapped verbatimScientificNameWithAuthorship, so that it links a verbatim taxonpath to the scrubbed taxonpath created from the primary taxonomic terms

5063 09/27/2012 08:36 AM Aaron Marcuse-Kubitza

mappings/VegCore.csv: Renamed unscrubbedScientificNameWithAuthorship to the more standard verbatimScientificNameWithAuthorship, which is available now that the original taxondetermination terms use the original* prefix

5062 09/27/2012 08:31 AM Aaron Marcuse-Kubitza

mappings/VegCore.csv: Renamed verbatim* taxonomic terms to original* because in most datasources, they are in fact for the original taxon determination of the organism (which can be a completely different name than the primary determination), rather than merely unscrubbed versions of the primary taxonomic name elements. Note that SALVIAS's orig_* terms do appear to be merely unscrubbed versions, but it's not a problem to add an additional taxon determination for them.

5061 09/27/2012 08:14 AM Aaron Marcuse-Kubitza

sql.py: pkey(): Get the table's actual primary key column, rather than just using the first column in the table. Continue to return the first column in the table if the table has no primary key.

5060 09/27/2012 07:31 AM Aaron Marcuse-Kubitza

inputs/.TNRS/tnrs/postprocess.sql: Use :table var instead of hardcoding the table name

5059 09/27/2012 07:30 AM Aaron Marcuse-Kubitza

inputs/.TNRS/tnrs/postprocess.sql: Also add a primary key on Name_submitted, to prevent duplicate entries

5058 09/27/2012 07:27 AM Aaron Marcuse-Kubitza

inputs/.TNRS/tnrs/: Added postprocess.sql which makes Name_submitted NOT NULL

5057 09/27/2012 07:25 AM Aaron Marcuse-Kubitza

sql.py: insert(): ignore mode: Also ignore NullValueException

5056 09/27/2012 07:24 AM Aaron Marcuse-Kubitza

input.Makefile: Staging tables installation: %/install: Support custom postprocess.sql which specifies commands to run after the table is imported

5055 09/27/2012 07:10 AM Aaron Marcuse-Kubitza

import_all: Added import of .TNRS datasource, which happens synchronously before other datasources are imported

5054 09/27/2012 07:08 AM Aaron Marcuse-Kubitza

Moved tnrs table from public (schemas/vegbien.sql) to its own TNRS schema, which is created by a new .TNRS datasource. Note that .TNRS is included in the automated testing, but not yet in the import.

5053 09/27/2012 06:57 AM Aaron Marcuse-Kubitza

mappings/VegCore-VegBIEN.csv: Restored subplotID -> if subplot cond mapping, which had been overwritten

5052 09/27/2012 06:46 AM Aaron Marcuse-Kubitza

inputs/ACAD/Specimen/map.csv: Remapped scientificName to scientificNameWithAuthorship

5051 09/27/2012 06:06 AM Aaron Marcuse-Kubitza

sql_io.py: append_csv(): Using INSERT: Use ignore mode to support inserting rows into a table with a unique constraint

5050 09/27/2012 06:05 AM Aaron Marcuse-Kubitza

sql.py: insert(): Added ignore optimization that just suppresses any DuplicateKeyException on the client side, to avoid needing to create a wrapper function just to insert-ignore one row

5049 09/27/2012 05:23 AM Aaron Marcuse-Kubitza

mappings/VegCore-VegBIEN.csv: Synchronized verbatim* and non-verbatim taxonomic terms' mappings

5048 09/27/2012 05:08 AM Aaron Marcuse-Kubitza

mappings/VegCore.csv: Added special term unscrubbedScientificNameWithAuthorship

5047 09/27/2012 05:05 AM Aaron Marcuse-Kubitza

mappings/VegCore.csv: Added verbatimSubspecies, verbatimVariety, verbatimForma, verbatimCultivar (already mapped in VegCore-VegBIEN.csv)

5046 09/27/2012 05:04 AM Aaron Marcuse-Kubitza

mappings/Makefile: .VegCore.csv.last_cleanup: Also remake VegCore-VegBIEN.unsourced_terms.csv here, not just in .VegCore-VegBIEN.csv.last_cleanup, so that the unsourced_terms.csv will be remade if the user adds the missing sources to VegCore.csv

5045 09/27/2012 05:03 AM Aaron Marcuse-Kubitza

mappings/Makefile: VegCore-VegBIEN.unsourced_terms.csv: Factored remake code into its own make target

5044 09/27/2012 04:51 AM Aaron Marcuse-Kubitza

mappings/VegCore-VegBIEN.csv: verbatim* taxonomic terms: Added taxonomicnamewithauthor mappings analogous to those for the non-verbatim taxonomic terms

5043 09/27/2012 04:29 AM Aaron Marcuse-Kubitza

mappings/VegCore.csv: Added verbatimScientificNameWithAuthorship

5042 09/27/2012 03:50 AM Aaron Marcuse-Kubitza

Added inputs/.public/, which stores mappings that manipulate VegBIEN itself

5041 09/27/2012 03:49 AM Aaron Marcuse-Kubitza

forwarding.Makefile: Differentiate between subdirs which can be sent a command and subdirs which will receive a command broadcast to "all" subdirs

5040 09/27/2012 03:39 AM Aaron Marcuse-Kubitza

README.TXT: Data import: Starting column-based import: Use import_all, which now supports passing custom vars like by_col=1

5039 09/27/2012 03:37 AM Aaron Marcuse-Kubitza

import_all: Pass any args, such as vars, through to with_all

5038 09/27/2012 03:35 AM Aaron Marcuse-Kubitza

with_all: Support additional command-line args for the make target, such as vars

5037 09/27/2012 03:11 AM Aaron Marcuse-Kubitza

sql_io.py: append_csv(): Check that the CSV's header matches the table's columns

5036 09/27/2012 03:08 AM Aaron Marcuse-Kubitza

schemas/vegbien.sql: Added tnrs table to hold contents of TNRS response

5035 09/27/2012 02:20 AM Aaron Marcuse-Kubitza

input.Makefile: Existing maps discovery: $(anyMap): Inlined patterns used because they are only used here

5034 09/27/2012 01:27 AM Aaron Marcuse-Kubitza

schemas/vegbien.sql: taxonpath_canon_taxonpath_id_self_ref(), placepath_canon_placepath_id_self_ref(): Fixed bug where the pkey could only be prepopulated if it was not already set, in order to support UPDATE as well as INSERT statements

5033 09/27/2012 01:15 AM Aaron Marcuse-Kubitza

schemas/vegbien.sql: taxonpath.canon_taxonpath_id, placepath.canon_placepath_id: Fixed comment describing that the special value 0 creates an automatic self-reference

5032 09/27/2012 01:09 AM Aaron Marcuse-Kubitza

schemas/vegbien.sql: taxonpath.canon_taxonpath_id, placepath.canon_placepath_id: Added trigger to automatically create a self-reference (indicating a scrubbed name) when set to the special value 0

5031 09/27/2012 12:33 AM Aaron Marcuse-Kubitza

input.Makefile: Staging tables installation: `%/install: %/create.sql`: Don't add a row number column to the created table because it is now added automatically to the temp table by column-based import (row-based import now also does not require a pkey for DB inputs)

5030 09/27/2012 12:28 AM Aaron Marcuse-Kubitza

bin/map, db_xml.put_table() (row-based and column-based import): Don't sort the input table by its pkey, in order to support input tables with no pkey. Note that reading the input table in table order and having this match the input flat file's order is only possible with sql_io.import_csv()'s truncation of the table on a failed import, which ensures that the rows will be stored in inserted order.

5029 09/27/2012 12:19 AM Aaron Marcuse-Kubitza

input.Makefile: Staging tables installation: Removed no longer used $(isJoinedTable). Note that it is no longer necessary for joined tables to be suffixed with ".src" to prevent the creation of a row_num column, which collided during joins.

5028 09/27/2012 12:17 AM Aaron Marcuse-Kubitza

csv2db: Removed no longer used has_row_num param

5027 09/27/2012 12:14 AM Aaron Marcuse-Kubitza

sql_io.py: import_csv(): Don't add a row number column to the created table because it is now added automatically to the temp table by column-based import (row-based import now also does not require a pkey for DB inputs)

5026 09/26/2012 11:49 PM Aaron Marcuse-Kubitza

bin/map, db_xml.put_table() (row-based and column-based import): Don't sort the input table by its pkey, in order to support input tables with no pkey. Note that reading the input table in table order and having this match the input flat file's order is only possible with sql_io.import_csv()'s truncation of the table on a failed import, which ensures that the rows will be stored in inserted order.

5025 09/26/2012 11:34 PM Aaron Marcuse-Kubitza

sql_io.py: import_csv(): Only do the import in a savepoint if using COPY FROM, to allow autocommits after each insert and thus make rows visible immediately after they are inserted

5024 09/26/2012 10:53 PM Aaron Marcuse-Kubitza

db_xml.py: put_table(): Subsetting in_table: Add a row number column if in_table does not already have a pkey

5023 09/26/2012 10:48 PM Aaron Marcuse-Kubitza

db_xml.py: put_table(): Subsetting in_table: Copy all of in_table's structure, rather than just the column types, by using sql.copy_table_struct() and sql.insert_select(). This preserves pkeys and NOT NULL constraints, which are useful for column-based import.

5022 09/26/2012 10:47 PM Aaron Marcuse-Kubitza

db_xml.py: put_table(): Subsetting in_table: Create in_table as a completely new sql_gen.Table instead of copying full_in_table and relying on sql.run_query_into() to set is_temp and remove the schema

5021 09/26/2012 10:40 PM Aaron Marcuse-Kubitza

sql.py: add_row_num(): Use if_not_exists in order to abort if the column already exists rather than adding a version #

5020 09/26/2012 10:36 PM Aaron Marcuse-Kubitza

sql.py: add_col(): Added if_not_exists param to abort if the column already exists rather than adding a version #

5019 09/26/2012 10:14 PM Aaron Marcuse-Kubitza

db_xml.py: put_table(): Removed no longer accurate comment that full_in_table will be shadowed (hidden) by the created temp table. (The temp table is now named differently, so the shadowing does not occur.)

5018 09/26/2012 10:02 PM Aaron Marcuse-Kubitza

db_xml.py: put_table(): Replaced no longer accurate Recurse comment with Import data. Rewrapped lines.

5017 09/26/2012 09:12 PM Aaron Marcuse-Kubitza

sql_io.py: import_csv(): Factored insertion code out into new append_csv()

5016 09/26/2012 08:47 PM Aaron Marcuse-Kubitza

README.TXT: Data import: `make test by_col=1`: Replaced errors explanation with pointer to updated explanation in the Testing section

5015 09/26/2012 08:31 PM Aaron Marcuse-Kubitza

xml_func.py: Removed no longer used _name(). Use _join_words() instead.

5014 09/26/2012 08:30 PM Aaron Marcuse-Kubitza

mappings/VegCore-VegBIEN.csv: Use new, more general _join_words() instead of _name()

5013 09/26/2012 08:22 PM Aaron Marcuse-Kubitza

mappings/Veg+-VegCore.csv: Prefix ambiguous terms' VegCore replacement with "?" so it's visually flagged in map.csv, in the same way that unmatched terms are flagged with a "*" prefix

5012 09/26/2012 08:19 PM Aaron Marcuse-Kubitza

mappings/VegCore-VegBIEN.csv: Taxonomic terms: Also join terms together in taxonomicnamewithauthor if scientificNameWithAuthorship is not provided, for use by TNRS

5011 09/26/2012 08:15 PM Aaron Marcuse-Kubitza

xml_func.py: Simplifying functions: Merging: Added _join_words()

5010 09/26/2012 07:57 PM Aaron Marcuse-Kubitza

inputs/ARIZ/Specimen/map.csv: Remapped ScientificNameAuthor to scientificNameWithAuthorship because it contains the binomial in addition to the authority

5009 09/26/2012 07:39 PM Aaron Marcuse-Kubitza

schemas/functions.sql: Added _join_words()

5008 09/26/2012 07:33 PM Aaron Marcuse-Kubitza

input.Makefile: Paths: $(datasrc): Remove any "." prefix from the subdir name. The "." prefix allows a subdir to be hidden from the normal import process.

5007 09/26/2012 06:56 PM Aaron Marcuse-Kubitza

db_xml.py: put_table(): Allow caller to specify custom partition_size

5006 09/26/2012 06:45 PM Aaron Marcuse-Kubitza

tnrs.py: tnrs_request(): Return the CSV stream directly instead of reading it into a string

5005 09/26/2012 06:42 PM Aaron Marcuse-Kubitza

tnrs.py: tnrs_request(): Moved CSV-download-specific functionality from do_request() to the Download section

5004 09/26/2012 06:34 PM Aaron Marcuse-Kubitza

inputs/import.stats.xls: Updated import times

5003 09/25/2012 11:13 PM Aaron Marcuse-Kubitza

tnrs.py: tnrs_request(): Return the response instead of printing it to stdout

5002 09/25/2012 10:59 PM Aaron Marcuse-Kubitza

schemas/py_functions.sql: _namePart(): Fixed bug where it was returning the empty string instead of NULL

5001 09/25/2012 10:46 PM Aaron Marcuse-Kubitza

sql_io.py: import_csv(): Documented that sql.truncate() MUST be run so that the rows will be stored in inserted order, and the row_num added after import will match up with the CSV's row order

5000 09/25/2012 10:35 PM Aaron Marcuse-Kubitza

sql.py: add_row_num(): Add distinguishing comment to ADD COLUMN statement so that it will be cached. The distinguishing comment is required because sometimes column names are truncated, leading to unwanted collisions with previously-cached ADD COLUMN statements. It provides a way of distinguishing the full column name behind a particular ADD COLUMN statement.

4999 09/25/2012 10:24 PM Aaron Marcuse-Kubitza

sql_io.py: import_csv(): Free memory used by deleted rows from any failed import. Documented that sql.create_table() is not rolled back if the import fails, but instead is cached, and will not be re-run if the import is retried.