Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
9e72a12
added new items to gitignore
denniswu28 Sep 11, 2026
20ec72a
upd gitignore
denniswu28 Sep 15, 2026
5002e8f
Exclude personal ignore rules from the feature branch
denniswu28 Sep 16, 2026
7b919c3
Add private SSH and SFTP data sources
denniswu28 Sep 16, 2026
d856bb7
Fix Sphinx API documentation warnings
denniswu28 Sep 16, 2026
28f1a1b
Run CI for dev branch changes
denniswu28 Sep 16, 2026
e33baa1
Fix transport tests on Python 3.9 and macOS
denniswu28 Sep 17, 2026
6e705b9
Handle exited SSH process groups on macOS
denniswu28 Sep 17, 2026
960b8d8
Wait for concurrent SSH process cleanup
denniswu28 Sep 17, 2026
b1e9303
Match private data documentation to existing style
denniswu28 Sep 17, 2026
e10a884
Simplify remote catalogs and require download approval
denniswu28 Sep 18, 2026
0b4b17f
Align private data prose with existing conventions
denniswu28 Sep 21, 2026
dd0e5c4
updated gitignore
denniswu28 Sep 21, 2026
dbf427a
Initialize remote datasets through extensible data backends
denniswu28 Sep 22, 2026
2e229cc
Align remote workflow documentation and simplify examples
denniswu28 Sep 22, 2026
7da898c
Simplify data sources and review clone downloads by default
denniswu28 Sep 23, 2026
17a3cb5
Document source selection and approved download workflows
denniswu28 Sep 23, 2026
4d00814
Update private data demos and clear notebook outputs
denniswu28 Sep 23, 2026
2939174
Store each data entry's catalog in its own TSV
denniswu28 Sep 24, 2026
0548d7a
Handle every template in status, commit and checkout
denniswu28 Sep 24, 2026
4b49dd0
Track several templates per branch and add rm --cached
denniswu28 Sep 24, 2026
fe09f10
Download each template's files from its own source
denniswu28 Sep 24, 2026
2eb1635
Catalog remote files with URL templates in hallmark add
denniswu28 Sep 24, 2026
62f984b
Replace init --from with ls-remote and URL templates in add
denniswu28 Sep 24, 2026
f76412d
Rename download and clone --filter to --include
denniswu28 Sep 24, 2026
9d5e7dc
Hide empty sections in hallmark status
denniswu28 Sep 24, 2026
a30ede2
Document remote templates in add and update the demos
denniswu28 Sep 24, 2026
53e85f5
Fix ls-remote CLI test on Python 3.9
denniswu28 Sep 24, 2026
0d31c6a
upd gitignore
denniswu28 Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 23 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ name: CI

on:
push:
branches: [ "main" ]
branches: [ "main", "dev" ]
pull_request:
branches: [ "main" ]
branches: [ "main", "dev" ]

jobs:
build:
Expand Down Expand Up @@ -35,3 +35,24 @@ jobs:
- name: Test with pytest
run: |
pytest

ssh-transport:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v3
with:
python-version: "3.9"
- name: Install Linux SSH server
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y openssh-server
- name: Install Hallmark and tests
run: python -m pip install -e . pytest
- name: Exercise disposable OpenSSH server and client
env:
HALLMARK_RUN_SSH_TESTS: "1"
run: python -m pytest test/test_ssh_integration.py test/test_transport.py -q
9 changes: 7 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,10 @@ __pycache__/
# Ignore Sphinx build output by default
_build/

/demo/
/cli_test_repos/
/demo/*
!/demo/private_data_demo.md
!/demo/multi_server_backend.py
!/demo/scientific_workflows_cli.md
!/demo/scientific_workflows_python.ipynb
/cli_test_repos/
doc/temp.md
76 changes: 74 additions & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Features:
-------------

Examples of using ``ParaFrame`` with Python API or Command Line Interface (CLI)
can be found in the Jupyter Notebook tutorials in the ``demos`` folder.
can be found in the Jupyter Notebook tutorials in the ``demo`` folder.

``Installation``
-----------------
Expand All @@ -69,4 +69,76 @@ Or install from source for development purposes::
.. _hallmark: https://github.com/l6a/hallmark
.. _yukon: https://github.com/l6a/yukon
.. _banyan: https://github.com/l6a/banyan
.. _eht: https://eventhorizontelescope.org
.. _eht: https://eventhorizontelescope.org

Private data remotes
--------------------

|hallmark|_ can catalog and download data products stored on HTTP(S), SSH, and
SFTP servers. A data source specifies where the files are stored, while a Git
remote is used to share the history of the data index.
For a private server, |hallmark|_ uses OpenSSH 9.6 or newer with a trusted
host key and key-based authentication that does not require a prompt.

Add remote files to a repository with a URL template, then select files to
download::

hallmark init eht
cd eht
hallmark add 'https://archive.example.org/2026MOVIE/ER2/{src}_{day}.h5'
hallmark commit -m 'Add remote EHT data'
hallmark download --all --dry-run
hallmark download --all

``add`` lists the remote directory and catalogs the matching files, with their
sizes and published checksums, without downloading dataset contents. The URL
up to the first path segment containing a ``{field}`` is recorded as the
template's source; the rest is the filename template, and its fields become
catalog columns. Adding the same URL template again syncs the catalog with the
server, including files that were removed. A branch can track several
templates, local or remote, such as ``{run}.dat`` files in the worktree and
``.h5`` files on a server; ``hallmark rm --cached TEMPLATE`` stops tracking
one. Remote files are committed as catalog entries, not as local objects.

Use ``hallmark ls-remote URL`` to list a directory and print suggested
templates, and ``hallmark add -n 'URL/TEMPLATE'`` to preview the matches.
CyVerse and ordinary browsable HTTPS directories, including DESI, use the same
workflow. SSH listing also works with SFTP-only accounts; no server shell or
Python is required.

Every dataset transfer requires approval. Python callers can inspect
``repo.plan_download()`` and then execute ``repo.download(plan, approved=True)``.
CLI users can run ``hallmark download --interactive`` to choose path globs or
all cataloged files, review recorded sizes, then download, change the selection,
or skip. ``init`` and ``add`` never offer downloads. CLI cloning copies the
complete catalog, then displays a download plan and requests confirmation by
default. Use ``clone --interactive`` for the chooser, or ``clone --no-download``
to copy only the catalog. Without a terminal, clone keeps the catalog, skips
downloading, and prints commands to use later.
SSH and SFTP use standard ``~/.ssh/config`` aliases and the SSH agent.
Use ``hallmark sources desi`` to list the release and collection URLs of a
named source for use with ``ls-remote`` and ``add``. Download selection belongs
to the separate ``download --include`` command.
The older remote ``build`` command is deprecated in favor of ``add``.

Use ``hallmark clone CATALOG PATH`` for an existing Git-hosted ``.hm`` or a
published HTTP/SFTP catalog snapshot. Catalogs can live on GitHub or another
server while their data sources point elsewhere. Git clones preserve the full
catalog and its history. ``clone --include`` narrows the planned downloads
without removing catalog entries. No payloads transfer until the user approves
the plan.

The public ``DataBackend`` interface supports generic HTTP/SSH, CyVerse, and
registered plugins for collaboration-specific APIs and multiple data servers.
See `Data backends <doc/backends.rst>`_ for configuration and an extension example.

Examples and configuration details are described in
`Private data over SSH and SFTP <doc/private_data.rst>`_.

For a sequential CLI walkthrough, see the
`private data demo <demo/private_data_demo.md>`_. It includes catalog
initialization, SSH configuration and explicit download approval.

The `scientific CLI workflows <demo/scientific_workflows_cli.md>`_ and
`scientific Python notebook <demo/scientific_workflows_python.ipynb>`_
follow four examples using EHT, DESI, Roman–Rubin and local DES data.
Loading
Loading