input.Makefile: Save partial outputs of aborted src make scripts
input.Makefile: Fixed bug in `%: %.make` rule to use $< instead of $*
mappings/DwC2-VegBIEN.specimens.csv: minimumElevationInMeters: Remove any "ca." prefix
xml_func.py: _replace: Strip whitespace from the returned string
csvs.py: Added TsvReader to support TSV quirks. Added reader_class(). reader_and_header(): Use reader_class() to automatically use TsvReader instead of csv.reader for TSVs. Added is_tsv() and use it where `dialect.delimiter == '\t'` was used.
strings.py: Added extract_line_ending() and remove_line_ending(). ensure_newl(): Use new remove_line_ending(). Moved Parsing section to top since it is used by the other sections.
csvs.py: stream_info(): Set dialect.quoting = csv.QUOTE_NONE for TSVs because they usually don't quote fields. Factored dialect detecting code into new function sniff().
input.Makefile: verify: Added reverify option, which can be turned off to prevent regenerating the verify/%.out file from the DB (which can be time-consuming), and instead just diff verify/%.out with verify/%.ref
count_error_rows: Allow input to be specified as last arg(s) in addition to as stdin
exc.py: ExPercentTracker: When diplaying fraction of iters that had errors, don't duplicate the iter_text ("row", etc.) in the numerator
bin/map: Use new ExPercentTracker iter_num tracking to track distinct row #s with errors
exc.py: ExPercentTracker: Track iter_nums of Exceptions as well, to distinguish how many distinct iters had errors
Added bin/count_error_rows to count distinct rows with errors in `map` error messages
input.Makefile: Changed "%.out: .make" rule to ": %.make" so that any file can be built from a corresponding .make file. This will allow flat files to be retrieved dynamically by running an associated .make file.
xml_func.py: FormatException: Inherit from ExceptionWithCause instead of SyntaxError because a FormatException signals a different kind of error condition (related to the input value rather than the function syntax)
xml_func.py: Renamed SyntaxException to SyntaxError because it's a user error signaling invalid mappings syntax
xml_func.py: SyntaxException: Use ExceptionWithCause to combine msg and cause's msg because it now combines them on one line, which is needed for bin/error_stats to work properly
exc.py: ExceptionWithCause: Prepend msg to cause's msg separated by ': ' instead of '\ncause: '
xml_func.py: Changed SyntaxException to FormatException where the error was with the input data format rather than the mapping syntax
mappings/VegX-VegBIEN.organisms.csv: slopeaspect: Apply new conversion _compass
xml_func.py: Added _compass to convert a compass direction (N, NE, NNE, etc.) into a degree heading
Added angles.py
inputs/SpeciesLink/maps: Updated to use new TAPIR download
input.Makefile: All targets can be specified with an optional trailing slash. This enables using tab completion to complete a target name which is also a subdir name, since tab completion appends a trailing slash.
bin/tapir/tapir2flat.php: Fixed bug in row assembly where XML elements that weren't found were left out of the array, causing the columns to shift to the left
xml_func.py: _map: Factored replacing code out into new function repl(), which can also be used by other XML funcs
bin/tapir/tapir2flat.php: Turned off exiting after 3 successive failures, because it causes the import to abort and it doesn't seem to restart where it left off
main Makefile: Added instructions to install PHP PEAR and HTTP_Request on Mac OS X
Makefile: Added PHP section, which installs php-http-request
Moved _archive/tapir2flatClient/trunk/client/ to bin/tapir/
_archive/tapir2flatClient/trunk/client/tapir2flat.php: Upgraded to use fputcsv(). This should fix errors caused by embedded delimeters. configurableParams.php: Set default delimeter to ','.
mappings/verify.specimens.sql: # species: Don't join at all on genus because DISTINCT is on the plantname_id rather than the plantname, which is already unique for a given genus because plantname_unique includes parent_id
mappings/verify.specimens.sql: # species: Fixed to join separately on plantname_ancestor for genus and species
input.Makefile: Moved log and trace files to new import subdir. Moved subdir-adding code from inputs/Makefile to input.Makefile.
mappings/verify.specimens.sql: Updated for schema changes
inputs/*: Added any missing standard subdirs
inputs/Makefile: Added %/-add to re-add existing dirs
inputs/Makefile: %-add: `svn mkdir` the datasource's standard subdirs
schemas/postgresql.nimoy.conf: Increased work_mem (for sorting) and maintenance_work_mem (for vacuum)
schemas/postgresql.nimoy.conf: Reset shared_buffers to initial value 24MB because although kernel.shmmax is 32MB, only values up to 26MB seem to work
schemas/postgresql.nimoy.conf: Set shared_buffers to SHMMAX
Optimized schemas/postgresql.nimoy.conf
Added schemas/postgresql.nimoy.conf
bin/map: When profiling, print the profile_to destination file
Added schemas/postgresql.conf
xml_func.py: _date: When converting month name to number, wrap any ValueError in a SyntaxException
xml_func.py: XML functions that assume their last argument is a value (_map, etc.): Use new helper function pop_value() to retrieve this value. Return None if value is None because this indicates the input is empty.
xml_func.py: _date: Use format.str2int instead of int to convert date parts to int so that strange formatting will be parsed correctly
format.py: clean_numeric(): Also fix some OCR errors
filter_errors: Default to outputing only the first match
xpath.py: Added append() to recursively append subpath to every leaf of a path tree. parse(): Use append() to fix bug in split path parsing where subpath was not added to every leaf of the tree, only the main leaf of the main branch and the main leaves of the other branches of the last element.
exc.py: Changed to store multiple tracebacks in an exception, in case an exception is caught and re-raised inside an ExceptionWithCause wrapper. This preserves more of the traceback in this situation, because you get the ExceptionWithCause's traceback as well.
input.Makefile: import: Removed verbose=1 because verbose mode is now automatically on (except in test mode)
bin/map: verbose mode defaults to off in test mode and on otherwise
bin/map: In verbose mode, print which input rows will be processed
bin/map: n option: Defaults to 1 in test mode. Empty string "" is interpreted as None (previously n would have to be unset to specify None).
bin/map: Added section comments to env var config retrieval. Reordered env var config retrieval to put DB config last, since these options are input-type specific and complex, and putting them first hides the more general other options.
inputs/SALVIAS*/maps/VegX.plots.csv: Updated _units for % -> decimal conversion to use new syntax
xml_func.py: _units: If value can't be converted to float, wrap the ValueError in a SyntaxException
units.py: convert(): Added support for unit conversions. Added initial unit conversion for % -> unitless. str2quantity(): Fixed regexp to match % as units. Set Quantity.__repr__ to quantity2str.
units.py: convert(): Put "units None" test after "quantity.units units" test because a destination of no units might require a conversion for some input units (e.g. % -> unitless requires a division by 100)
inputs/SALVIAS*/maps/VegX.organisms.csv: Habit: Ignore invalid values instead of generating a SyntaxException
xml_dom.py: minidom modifications: Escape as many text strings as we use directly. This still leaves the tagName used by xml.dom.minidom.Element.writexml: It uses 'writer.write(indent+"<" + self.tagName)' and doesn't escape the tagName.
xml_func.py: Made everything Unicode-safe by using strings.ustr instead of str
schemas/tree_cross-links.sql: Added comment for how to get the namedplace trigger from the provided plantname trigger
vegbien.sql: Fixed bug in tree cross-link algorithm where recursion to descendants' ancestors did not use new to refer to the current node's plantname_id
vegbien.sql: Fixed bug in tree cross-link algorithm to also insert ancestors for top-level nodes, because they now need an ancestor entry for themselves
Added separate SQL file for tree cross-links code. A link to this can be e-mailed to people to review.
vegbien.sql: Modified tree cross-link algorithm to add an "ancestor" for this node. This is useful for queries, because you don't have to separately test if the leaf node is the one you're looking for, in addition to that leaf node's ancestors.
README.TXT: Added instructions how to stop all running imports
vegbien.sql: Added namedplace_update_ancestors and plantname_update_ancestors triggers to populate ancestor cross-links in new namedplace_ancestor and plantname_ancestor tables
sql.py: insert() (and try_insert()): Added optional returning param to provide name of an inserted column (usually pkey) to return
env_password: Print Usage message if run without initial "."
Added bin/stop_imports to stop all running imports
import_all: Print Usage message if was run without initial "."
Renamed import-all to import_all to match convention of using underscores
inputs/CTFS: Added remaining non-data src files
Added CTFS data dictionary inputs/CTFS/src/ctfs-comments_worksheet.xls
import-all: Fixed to display the datasource name in the job name instead of 'make ${input}import &'
import-all: disown each new import process to ignore SIGHUP
Added jobspecs to extract jobspecs (%#) from (possibly filtered) `jobs` output
README.TXT: Changed `make import &` to `. bin/import-all`
main Makefile: import: Before running imports, print message that `. bin/import-all` can be used to import all inputs at once
Added import-all to import all inputs at once
mappings/DwC2-VegBIEN.specimens.csv: Mapped establishmentMeans, which contains growthform, iscultivated, isnative, etc. combined
inputs/SALVIAS-CSV/maps/VegX.organisms.csv: habit: Updated mapping to match equivalent SALVIAS mapping
xml_func.py: _map: Instead of _closed special entry, make all maps closed by default and open them if special entry "*=*" is present. Support using a _map to filter values by interpreting special entry "*=" as removing all values not explicitly specified, and by interpreting special value "*" as keeping input value the same.
xml_func.py: _date: On error "month must be in 1..12", try swapping month and day
row: Support getting multiple rows. Document that does not handle embedded newlines.
mappings/Makefile: Removed no longer needed DwC-VegBIEN.specimens.no_empty.csv
input.Makefile: Removed no longer needed $(join) command
input.Makefile: Removed no longer needed src join maps
input.Makefile: Generate VegBIEN maps from full via maps in order to include all input columns if a src map was provided. This causes the VegBIEN join process to produce all the "No join mapping" errors for that datasource, not just those for fields in the (non-full) via map. maps/src.join.*.csv should no longer be needed for producing "No join mapping" errors.
mappings/Makefile: Generate DwC-VegBIEN.specimens.csv from new intermediate DwC.ci-VegBIEN.specimens.csv using $(removeEmpty) so that "No join mapping" errors will be reported when maps are joined to it. Deprecate DwC-VegBIEN.specimens.no_empty.csv because it's now identical to DwC-VegBIEN.specimens.csv.
Added inputs/NY/maps/src.specimens.csv