feat(scripts): initial commit ingestor #4

Merged
puer-robustus merged 21 commits from ingestor into main 2026-08-22 23:35:37 +02:00
No description provided.
feat(scripts): initial commit ingestor
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline failed
1d11f24375
Author
Owner

@hernani @ijohn For your review.

Running the script (python3 scripts/ingest.py with the necessary python dependencies installed) will create a whole bunch of json files in data/projects which look like this:

{
    "name": "crypto.signText",
    "website": [
        "https://redwax.eu/rst"
    ],
    "description": "Cryptographic signatures brought back to the browser",
    "ngiFund": [
        "ngi-assure"
    ]
}

Now, this in and off itself is not much, as it is just reformatting the ngi grant level data. However, the script has the capabilities to aggregate project level data from multiple grants, IF the variables GRANTID2PROJECT and PROJECT2DESCRIPTION are correctly filled in. The question now is, how do we fill in these data programmatically? @ijohn Is there a way to get the hex data in a more consumable form than parsing the html?

@hernani @ijohn For your review. Running the script (`python3 scripts/ingest.py` with the necessary python dependencies installed) will create a whole bunch of json files in `data/projects` which look like this: ``` { "name": "crypto.signText", "website": [ "https://redwax.eu/rst" ], "description": "Cryptographic signatures brought back to the browser", "ngiFund": [ "ngi-assure" ] } ``` Now, this in and off itself is not much, as it is just reformatting the ngi grant level data. However, the script has the capabilities to aggregate project level data from multiple grants, **IF** the variables `GRANTID2PROJECT` and `PROJECT2DESCRIPTION` are correctly filled in. The question now is, how do we fill in these data programmatically? @ijohn Is there a way to get the hex data in a more consumable form than parsing the html?
style(scripts/ingest.py): add REUSE header
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline failed
0fbfd1f961
Author
Owner

The resulting json files are also not schema compliant yet.

The resulting json files are also not schema compliant yet.
puer-robustus force-pushed ingestor from 0fbfd1f961
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline failed
to a6569922d6
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline failed
2026-07-06 20:29:26 +02:00
Compare
puer-robustus force-pushed ingestor from a6569922d6
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline failed
to e503946643
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-07-10 14:10:12 +02:00
Compare
puer-robustus force-pushed ingestor from e503946643
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
to 024a0492af
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline failed
2026-08-17 16:45:52 +02:00
Compare
Convert easier to edit PROJECT2GRANT dict programmatically into more
performant GRANTID2PROJECT dict.
Be aware that the clashes collection is only filled up if the relevant
properties have been accessed before!
Since NLNet will continue to hand out grants (even if not under the NGI
umbrella), it would be useful to be able to repeatedly import the NGI
provided json file which outlines the given grants ("projects" in _their_
lingo). At the same time, we don't want the data we have
updated/summarized/corrected for the (what we call) project level to be
overwritten by upstream.

Therefore, the current solution is to merge the existing project level json
with the project level jsons we build from the new NGI json grant load. For
projects with a single grant this means that the upstream data will be
authoritative. For multi-grant projects, those attributes where clashes have
been resolved, they stay resolved.
In the process, we might lose some good "short_description", "website" and
"source_code" attribute data for multi-grant projects, but I don't see a way
to reliably and automatically identify the grant which provides the good
data points.
This immediately removes 255 files from data/projects.
Otherwise, the end-of-file diffs which are fixed up by the pre-commit hooks
would always appear in the git diff after a new load.
Too many project level data currently don't fulfill this requirement. We
will have to manually add them if they are not in the upstream NGI JSON or
extract them if they are.
The script fix improves some project data we load.
schema: allow "source" attribute to use either https or git URL
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_metadata/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
d88df16530
puer-robustus changed title from WIP: feat(scripts): initial commit ingestor to feat(scripts): initial commit ingestor 2026-08-22 23:35:05 +02:00
puer-robustus deleted branch ingestor 2026-08-22 23:35:38 +02:00
Sign in to join this conversation.
No reviewers
No labels
app
data
schema
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ISOC-CH/tech-dossier-project-data!4
No description provided.