# folio_uuid
A python module for creating deterministic UUIDs (UUID v5) outside of FOLIO when migrating data.
# Installation
The module is uploaded to pypi. Just do
pip install folio-uuid
or
pipenv install folio-uuid
# Overview
The UUIDs (v5) are contstructed in the following way:
* The namespace is the same for all "Folio UUIDs": **8405ae4d-b315-42e1-918a-d1919900cf3f**
* The name is contstructed by the following parts, delimited by a colon (**:**)
* **OKAPI_URL** This should be the full OKAPI Url including https. **Example:** *https://okapi-bugfest-juniper.folio.ebsco.com*
* **OBJECT_TYPE_NAME** This should be the name of the type of object that the ID is generated for. In plural. the *file folio_namespaces.py* in this repo has a complete list of the ones currently in use. **Example:** *items*
* **LEGACY_IDENTIFIER** This should be the legacy identifier comming from the source system. The library will perform some normalization* of the identifier if it is a Sierra/Millennium identifier. **Example:** *i3696836*
\* The normalization strips away any dots (.), check digits and campus codes from the identifiers
# Tests/Examples
* The namespace is *8405ae4d-b315-42e1-918a-d1919900cf3f*
* The name, constructed as *OKAPI_URL:OBJECT_TYPE_NAME:LEGACY_IDENTIFIER* would become *https://okapi-bugfest-juniper.folio.ebsco.com:items:i3696836*
* The resulting UUID then becomes *9647225d-d8e9-530d-b8cc-52a53be14e26*
# Bash/linux example
![image](https://user-images.githubusercontent.com/1894384/141293255-a692c61f-4b80-4748-8187-b8bdabe9befa.png)
uuidgen --sha1 -n 8405ae4d-b315-42e1-918a-d1919900cf3f -N https://okapi-bugfest-juniper.folio.ebsco.com:items:i3696836
To install uuidgen on a apt-enabled Linux distribution, use
sudo apt-get install uuid-runtime
# Python Example
def test_deterministic_uuid_generation_holdings():
deterministic_uuid = FolioUUID(
"https://okapi-bugfest-juniper.folio.ebsco.com",
FOLIONamespaces.holdings,
"000000167",
)
assert "a0b4c8a2-01fd-50fd-8158-81bd551412a0" == str(deterministic_uuid)
# References
Wikipedia has an [article on UUID version 5](https://en.wikipedia.org/wiki/Universally_unique_identifier#Versions_3_and_5_(namespace_name-based))
There are many browser-based tools to create singe UUIDs v5. [UUIDTools](https://www.uuidtools.com/v5) is one of them.
Raw data
{
"_id": null,
"home_page": "https://github.com/FOLIO-FSE/folio_uuid",
"name": "folio-uuid",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.7",
"maintainer_email": null,
"keywords": "FOLIO, ILS, LSP, Library Systems, MARC21, Library data, UUID",
"author": "Theodor Tolstoy",
"author_email": "github.teddes@tolstoy.se",
"download_url": "https://files.pythonhosted.org/packages/a7/62/229b41a78af7cbfe8a9e5ca5930b603dc0e1a35389fb7806f8b54df2bb83/folio_uuid-0.2.10.tar.gz",
"platform": null,
"description": "# folio_uuid\nA python module for creating deterministic UUIDs (UUID v5) outside of FOLIO when migrating data.\n\n# Installation\nThe module is uploaded to pypi. Just do \n\n\tpip install folio-uuid\n\t\nor \n\n\tpipenv install folio-uuid \n\n# Overview\nThe UUIDs (v5) are contstructed in the following way:\n* The namespace is the same for all \"Folio UUIDs\": **8405ae4d-b315-42e1-918a-d1919900cf3f**\n* The name is contstructed by the following parts, delimited by a colon (**:**)\n\t* **OKAPI_URL** This should be the full OKAPI Url including https. **Example:** *https://okapi-bugfest-juniper.folio.ebsco.com*\n\t* **OBJECT_TYPE_NAME** This should be the name of the type of object that the ID is generated for. In plural. the *file folio_namespaces.py* in this repo has a complete list of the ones currently in use. **Example:** *items*\n\t* **LEGACY_IDENTIFIER** This should be the legacy identifier comming from the source system. The library will perform some normalization* of the identifier if it is a Sierra/Millennium identifier. **Example:** *i3696836*\n\n\\* The normalization strips away any dots (.), check digits and campus codes from the identifiers\n\n# Tests/Examples\n* The namespace is *8405ae4d-b315-42e1-918a-d1919900cf3f*\n* The name, constructed as *OKAPI_URL:OBJECT_TYPE_NAME:LEGACY_IDENTIFIER* would become *https://okapi-bugfest-juniper.folio.ebsco.com:items:i3696836*\n* The resulting UUID then becomes *9647225d-d8e9-530d-b8cc-52a53be14e26*\n\n# Bash/linux example\n![image](https://user-images.githubusercontent.com/1894384/141293255-a692c61f-4b80-4748-8187-b8bdabe9befa.png)\n\n\tuuidgen --sha1 -n 8405ae4d-b315-42e1-918a-d1919900cf3f -N https://okapi-bugfest-juniper.folio.ebsco.com:items:i3696836\nTo install uuidgen on a apt-enabled Linux distribution, use \n\n\tsudo apt-get install uuid-runtime\n\n# Python Example\n\tdef test_deterministic_uuid_generation_holdings():\n\t deterministic_uuid = FolioUUID(\n\t\t\"https://okapi-bugfest-juniper.folio.ebsco.com\",\n\t\tFOLIONamespaces.holdings,\n\t\t\"000000167\",\n\t )\n\t assert \"a0b4c8a2-01fd-50fd-8158-81bd551412a0\" == str(deterministic_uuid)\n\t \n\t \n# References\nWikipedia has an [article on UUID version 5](https://en.wikipedia.org/wiki/Universally_unique_identifier#Versions_3_and_5_(namespace_name-based))\n\nThere are many browser-based tools to create singe UUIDs v5. [UUIDTools](https://www.uuidtools.com/v5) is one of them.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A library for generating predictive uuids for FOLIO data migrations",
"version": "0.2.10",
"project_urls": {
"Homepage": "https://github.com/FOLIO-FSE/folio_uuid",
"Repository": "https://github.com/FOLIO-FSE/folio_uuid"
},
"split_keywords": [
"folio",
" ils",
" lsp",
" library systems",
" marc21",
" library data",
" uuid"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d26d9ce575a7f60860dc222b2a225a82d5868e9e40ced30da3b6c3e15295db8f",
"md5": "94b53b3636585717fa01fab7b7d7b3b1",
"sha256": "f0c07aa436579280720f957d9554e91ee6dc94206322626304df33747123f0ea"
},
"downloads": -1,
"filename": "folio_uuid-0.2.10-py3-none-any.whl",
"has_sig": false,
"md5_digest": "94b53b3636585717fa01fab7b7d7b3b1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.7",
"size": 6941,
"upload_time": "2024-06-10T02:54:50",
"upload_time_iso_8601": "2024-06-10T02:54:50.304299Z",
"url": "https://files.pythonhosted.org/packages/d2/6d/9ce575a7f60860dc222b2a225a82d5868e9e40ced30da3b6c3e15295db8f/folio_uuid-0.2.10-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a762229b41a78af7cbfe8a9e5ca5930b603dc0e1a35389fb7806f8b54df2bb83",
"md5": "480f5f6d056f0b3e2df77af3b3f43bb2",
"sha256": "7a5dcbd3db7513ee1ee9217a287f364d74feab5f3e1c1f4bf795ef048d08665c"
},
"downloads": -1,
"filename": "folio_uuid-0.2.10.tar.gz",
"has_sig": false,
"md5_digest": "480f5f6d056f0b3e2df77af3b3f43bb2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.7",
"size": 6160,
"upload_time": "2024-06-10T02:54:51",
"upload_time_iso_8601": "2024-06-10T02:54:51.830149Z",
"url": "https://files.pythonhosted.org/packages/a7/62/229b41a78af7cbfe8a9e5ca5930b603dc0e1a35389fb7806f8b54df2bb83/folio_uuid-0.2.10.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-10 02:54:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "FOLIO-FSE",
"github_project": "folio_uuid",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "folio-uuid"
}