{"id":31045121,"url":"https://github.com/dativebase/lingsync2old","last_synced_at":"2025-10-29T05:07:05.302Z","repository":{"id":150185130,"uuid":"48138345","full_name":"dativebase/lingsync2old","owner":"dativebase","description":"Migrate your LingSync corpus to an OLD (Online Linguistic Database)","archived":false,"fork":false,"pushed_at":"2016-08-04T17:30:28.000Z","size":71,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-06T03:01:42.451Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dativebase.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-12-16T22:18:18.000Z","updated_at":"2023-02-28T19:51:40.000Z","dependencies_parsed_at":"2023-05-31T20:16:04.971Z","dependency_job_id":null,"html_url":"https://github.com/dativebase/lingsync2old","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dativebase/lingsync2old","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dativebase%2Flingsync2old","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dativebase%2Flingsync2old/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dativebase%2Flingsync2old/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dativebase%2Flingsync2old/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dativebase","download_url":"https://codeload.github.com/dativebase/lingsync2old/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dativebase%2Flingsync2old/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281563785,"owners_count":26522704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-29T02:00:06.901Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-14T16:57:56.790Z","updated_at":"2025-10-29T05:07:05.283Z","avatar_url":"https://github.com/dativebase.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"================================================================================\n  LingSync-to-OLD Migrator\n================================================================================\n\nThis is a command-line utility that migrates a LingSync corpus to an Online\nLinguistic Database (OLD). Both the source LingSync corpus and the destination\nOLD must be accessible at URLs (possibly local) via HTTP.\n\n\nWarnings/disclaimers\n--------------------------------------------------------------------------------\n\n- DEPENDENCY: requires that the Python Requests library be installed. All other\n  imports are from the standard library.\n\n- It is assumed that the destination OLD is empty. Migrating a LingSync corpus\n  to an OLD that already has data in it may result in errors or corrupted data.\n\n- Some LingSync data points (entire documents or specific fields/attributes)\n  are purposefully not migrated. You will need to check the resulting OLD to\n  verify that the conversion is satisfactory.\n\n\nUsage\n--------------------------------------------------------------------------------\n\nJust run `lingsync2old.py` and you will be prompted for the required arguments::\n\n    $ ./lingsync2old.py\n\nYou can also supploy the required arguments as options::\n\n    $ ./lingsync2old.py \\\n            --ls-url=https://corpus.lingsync.org \\\n            --ls-corpus=my-lingsync-corpus-name \\\n            --ls-username=my-lingsync-username \\\n            --ls-password=my-lingsync-password \\\n            --old-url=my-old-url \\\n            --old-username=my-old-username \\\n            --old-password=my-old-password\n\nFull param/option listing::\n\n    --force-download: boolean that, when `True`, forces the downloading of the\n        LingSync/CouchDB data, even if we have already downloaded it. Default\n        is `False`.\n\n    --force-convert: boolean that, when `True`, forces the converting of the\n        LingSync JSON data to OLD JSON data, even if we have already converted\n        it. Default is `False`.\n\n    --force-file-download: boolean that, when `True`, forces the downloading of\n        a LingSync file (e.g., audio), even if we have already downloaded and\n        saved it.\n\n    --verbose: boolean that makes this script say more about what it's doing.\n\n    --ls-url: The LingSync CouchDB URL that we can make requests to for\n        extracting the LingSync data. Defaults to 'https://corpus.lingsync.org'.\n\n    --ls-corpus: The name of the LingSync corpus that we want to\n        migrate.\n\n    --ls-username: The username of a user who has sufficient privileges to\n        request the LingSync corpus' data from the CouchDB API.\n\n    --ls-password: The password corresponding to the LingSync\n        username.\n\n    --old-url: The OLD URL that we will upload the converted LingSync\n        data to.\n\n    --old-username: The username of a user on the destination OLD who\n        has sufficient privileges to make create, update and delete requests,\n        i.e., an admin or a contributor.\n\n    --old-password: The password corresponding to the OLD username.\n\n\nAlgorithm\n--------------------------------------------------------------------------------\n\nIt's essentially a three-step algorithm:\n\n1. Download. Request LingSync data as JSON using the CouchDB API (and save it\n   locally).\n\n2. Convert. Build a JSON structure (from 1) that the OLD can digest (and save it\n   locally).\n\n3. Upload. Use the output of (2) to send JSON/REST POST requests to the relevant\n   OLD web service.\n\nHere is the general mapping from LingSync documents (or implicit entities) to\nOLD resources.\n\n+------------+-------------+\n| LingSync   | OLD         |\n+============+=============+\n| tags       | tags        |\n+------------+-------------+\n| users      | users       |\n+------------+-------------+\n| speakers   | speakers    |\n+------------+-------------+\n| files      | files       |\n+------------+-------------+\n| datums     | forms       |\n+------------+-------------+\n| datalists  | corpora     |\n+------------+-------------+\n| sessions   | collections |\n+------------+-------------+\n\n\nQuestions\n--------------------------------------------------------------------------------\n\n1. Are there tags in LingSync sessions?\n\n2. Are there files in LingSync sessions?\n\n3. Should we fill in empty values with the values of other attributes. E.g., if\n   the morpheme_break value is empty, should the transcription value be copied\n   to it?\n\n\nTODOs\n--------------------------------------------------------------------------------\n\n- large file (\u003e 20MB) upload to OLD still not implemented.\n\n- downloading LingSync image files still not implemented.\n\n- make this script sensitive to OLD versions, and maybe to LingSync ones too.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdativebase%2Flingsync2old","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdativebase%2Flingsync2old","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdativebase%2Flingsync2old/lists"}