After the photometry pipeline produces a measurement, Node v1 optionally submits it to AAVSO’s WebObs API using the Extended File Format. The submission module is intentionally non-throwing: it returns a result dict withDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/skyrobot804/node_v1/llms.txt
Use this file to discover all available pages before exploring further.
status="error" rather than raising, so the node can continue processing subsequent frames even if a submission fails. The complete audit trail is written to disk regardless of whether the POST succeeds, giving you a local record of every formatted observation.
Extended File Format
AAVSO WebObs requires observations to be submitted as the AAVSO Extended File Format. Node v1 builds this document in_format_extended() for each measurement. A single-observation submission looks like this:
TRANS=NO— magnitudes are not transformed to a standard photometric system.MTYPE=DIFF— the measurement is differential (not absolute).CNAME=ENSEMBLE/CMAG=na— the weighted ensemble is used rather than a single comparison star, so no individual comparison name or magnitude is listed.KNAME=na/KMAG=na— no check star is used.- The
NOTESfield carries a pipe-delimited block of processing metadata that is not part of the AAVSO spec but is preserved in the audit trail: FWHM, SNR, comparison star count, zero-point scatter, node ID, quality flag, and source FITS filename.
aavso_submission.py
Submission Status
Thesubmit() function always returns a dict whose status key holds one of five values:
| Status | Meaning |
|---|---|
accepted | WebObs responded HTTP 200 and the response body confirms at least one observation was uploaded. |
rejected | WebObs responded HTTP 200 but the response body contains an error, reject, invalid, or fail indicator. |
skipped | Submission was not attempted — either because quality_flag is poor and submit_poor_quality is false, or because AAVSO credentials are not configured. |
dry_run | aavso.dry_run: true is set; the submission file was formatted and saved but no POST was made. |
error | A network error, timeout, unexpected HTTP status, or unrecognisable response body was encountered. |
accepted rather than error, so that future wording changes in AAVSO’s response page do not silently misclassify successful submissions.
Dry Run Mode
Setaavso.dry_run: true to format the Extended File Format document and write it to the audit directory without making any HTTP request. This is the recommended first step when testing a new node, as it lets you inspect the formatted submission and check that all fields are correct before using real credentials:
config.yaml
dry_run: true, submit() returns status="dry_run" and file_path points to the saved submission text. Switching to live submission is a one-line config change (dry_run: false) with no code changes required.
Quality Gate
By default, observations withquality_flag="poor" are skipped without formatting or posting:
aavso_submission.py
config.yaml
Audit Trail
Every call tosubmit() writes up to three files to a date-stamped subdirectory of aavso.audit_dir (default: aavso_submissions/). Files are named using a URL-safe slug of the target name and the BJD of the observation:
<target>_<bjd>.txt — the exact text POSTed to WebObs. Can be inspected or re-submitted manually.
<target>_<bjd>_response.txt — the raw HTTP response body from WebObs, written even if the POST returns a non-200 status. Indispensable for diagnosing rejection reasons.
<target>_<bjd>_record.json — a complete JSON audit record combining the original measurement dict, the observer code, the dry-run flag, the submission status, and the paths to both companion files:
aavso_submission.py
Public API
aavso_submission.py
submit() takes the measurement dict returned by run_pipeline() and the full application config dict. It never raises — all exceptions are caught and converted to status="error" so the caller can continue processing.
Result Dict
One of
accepted, rejected, skipped, dry_run, or error. The primary outcome indicator.Number of observations confirmed accepted by WebObs.
1 on success, 0 otherwise.Number of observations rejected by WebObs.
1 on rejection, 0 otherwise.Absolute path to the saved Extended File Format submission text (
<target>_<bjd>.txt). null if the file could not be written.Absolute path to the raw WebObs HTTP response file (
<target>_<bjd>_response.txt). null in dry-run mode or if the network request was not made.Absolute path to the JSON audit record (
<target>_<bjd>_record.json). null if the record could not be written.A short human-readable description of the outcome, such as
"accepted=1 rejected=0", "quality=poor, submission skipped", or an error description.