Skip to content

athalhammer/fasterid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fasterid

Identifier generator based on FastAPI and erdi8

Disclaimer

This software intentionally has no license attached. It does not need to comply to the GPL-3.0 license of erdi8 as the erdi8 copyright holder and the author of fasterid are the same person. Please get in touch if you plan to use this in a commercial setting.

Quick start

$ pip install -r requirements.txt
$ cat fasterid.env
    ERDI8_STRIDE = "453459956896834"
    ERDI8_START = "b222222222"
    ERDI8_SAFE = "True"
    FASTERID_FILENAME = "last-id.txt"
    FASTERID_MAX_NUM = 50
    FASTERID_ALWAYS_RDF = "False"
    FASTERID_MAX_PREFIX_LEN = 100
    FASTERID_ID_PROPERTY = "https://schema.org/identifier"
    FASTERID_ID_DEFAULT_PREFIX = "https://example.org/"

$ uvicorn fasterid:app
	INFO:     Started server process [116821]
	INFO:     Waiting for application startup.
	INFO:     Application startup complete.
	INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

$ curl http://127.0.0.1:8000 -X POST
{"@id": "k7zydqrp64"}

# Call http://127.0.0.1:8000/docs for API info in a browser

Test

# From a different terminal
$ while true; do printf "$(curl -X POST http://127.0.0.1:8000)\n" >> ids; done

# After some seconds stop with: CTRL+C
$ head ids
{"@id":"ptzxm3mz85"}
{"@id":"tfzwsfhbb6"}
{"@id":"y2zvyscnd7"}
{"@id":"cnzv657yg8"}
{"@id":"h8ztch49j9"}
{"@id":"mvzsjtymmb"}
{"@id":"rgzrr6txpc"}
{"@id":"w3zqxjq8rd"}
{"@id":"zpzq4wkktf"}
{"@id":"f9zpb8fwwg"}

Advanced

The service accepts also three parameters: prefix, number, and rdf. The first can be used for creating individual identifiers with a prefix, the second is creating a batch with a certain number of ids, the third uses the prefix or the FASTERID_ID_DEFAULT_PREFIX environment setting to create valid RDF. All parameters are optional. For the rdf = true settings the generated erdi8 identifier MUST form a valid absolute IRI together with the provided prefix or FASTERID_ID_DEFAULT_PREFIX. number and prefix and can be configured respecting max batch size and prefix length.

$ curl -X POST http://127.0.0.1:8000 --data '{"number": 5, "prefix": "https://example.com/", "rdf": true}' -H "content-type: application/json" | jq
[
  {
    "@id": "https://example.com/t7t9vt26f4",
    "https://schema.org/identifier": "t7t9vt26f4"
  },
  {
    "@id": "https://example.com/xtt935whh5",
    "https://schema.org/identifier": "xtt935whh5"
  },
  {
    "@id": "https://example.com/cft88hrtk6",
    "https://schema.org/identifier": "cft88hrtk6"
  },
  {
    "@id": "https://example.com/h2t7fvn5n7",
    "https://schema.org/identifier": "h2t7fvn5n7"
  },
  {
    "@id": "https://example.com/mnt6n7hgq8",
    "https://schema.org/identifier": "mnt6n7hgq8"
  }
]

Docker

docker build -t fasterid .
docker run -d -p 80:80 fasterid
# OR
docker run -d -p 80:80 -e FASTERID_ID_DEFAULT_PREFIX="" fasterid
# OR
docker run -d -p 80:80 -e FASTERID_ID_DEFAULT_PREFIX="https://w3id.org/myspace/" -e FASTERID_ALWAYS_RDF="True" fasterid
# OR
docker run --log-driver=awslogs -d -p 80:80 -e FASTERID_ID_DEFAULT_PREFIX="" fasterid
# OR
docker run --log-driver=awslogs -d -v /home/ec2-user/latest-id.txt:/fasterid-0.1.2/last-id.txt  -e FASTERID_ID_DEFAULT_PREFIX="" -p 80:80 fasterid