Skip to content

GraphQL slice (#356): minor polish — empty-path guard and PVA charset table #366

@gilesknap

Description

@gilesknap

Two small follow-ups noticed while reviewing PR #360 commit e5217785 (slice #356).

1. if api.path: guard in GraphQLTransport.connect is dead code

# src/fastcs/transports/graphql/transport.py
for api in controller_apis:
    if api.path:
        validate_graphql_id(api.path[0])
self._server = GraphQLServer(controller_apis)

If a controller_api.path is empty, validation is silently skipped — but GraphQLServer._create_app immediately does id = controller_api.path[0], which raises IndexError. The guard buys nothing.

The other three transports' connect methods (RestTransport, EpicsCATransport, EpicsPVATransport) all call path[0] unconditionally and would also fail on an empty path — fail-fast there, opaquely deeper here. (The empty-path case itself is already tracked: any snippet that drops pv_prefix but doesn't call set_id would fail at runtime; #363 covers the snippet side.)

Suggested fix: drop the if api.path: guard so GraphQL fails fast at the same boundary as the others. If we ever decide empty paths should be tolerated, that's a foundation-level decision that belongs in FastCS.__init__, not per-transport.

2. Charset table missing PVA's 60-char PV name limit

docs/how-to/multiple-transports.md (the new "Choosing controller ids across transports" section, also added in this slice) shows the limit for CA but not PVA, even though validate_pva_id (slice #355) enforces the same 60-char ceiling:

| EPICS CA  | `[A-Za-z0-9_-]+`, plus the 60-char PV name limit |
| EPICS PVA | `[A-Za-z0-9_-]+` |

Either repeat the 60-char note on the PVA row or hoist it to a sentence under the table that calls out "both EPICS transports also enforce a 60-character PV-name ceiling on the longest derivable prefix."

Both are small; bundling here so they don't each need their own issue.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions