Examples¶
Building records¶
Use EuringRecord to assemble a valid EURING record from field values.
from euring import EuringRecord
record = EuringRecord("euring2000plus")
record.set("ringing_scheme", "GBB")
record.set("primary_identification_method", "A0")
record.set("identification_number", "1234567890")
record.set("place_code", "AB00")
record.set("geographical_coordinates", "+0000000+0000000")
record.set("accuracy_of_coordinates", "1")
record_str = record.serialize()
record_json = record.serialize(output_format="json")
record_2020 = record.export("euring2020")
If you want to allow missing optional values and keep placeholders, pass
strict=False to the record. serialize() raises ValueError when a field
fails validation.
Exporting records¶
If you store ringing data in your own database, you can map your internal fields to EURING keys and write each record as a line in a pipe-delimited file.
from euring import EuringRecord
def export_records(records, path):
record = EuringRecord("euring2000plus")
errors = []
with open(path, "w", encoding="utf-8", newline="\n") as handle:
for row in records:
record.update(
{
"ringing_scheme": row["ringing_scheme_code"],
"primary_identification_method": row["primary_id_method"],
"identification_number": row["ring_number"],
"place_code": row["place_code"],
"geographical_coordinates": row["coordinates_dms"],
"accuracy_of_coordinates": row["accuracy_code"],
"date": row["date_yyyymmdd"],
}
)
try:
handle.write(record.serialize() + "\n")
except ValueError as exc:
errors.append((row["id"], str(exc)))
return errors
This approach satisfies the technical submission notes from the EURING Manual:
EURING data files must use UTF-8 or ASCII encoding; UTF-8 is preferred.
EURING2000+ or EURING2020 formats are preferred for submission.
One record per line; a single file containing all records is preferred.