{"id":23521241,"url":"https://github.com/dtinit/portmap","last_synced_at":"2026-02-15T10:05:29.954Z","repository":{"id":205373286,"uuid":"713950298","full_name":"dtinit/portmap","owner":"dtinit","description":"A structured search frontend for portability articles to help people find solutions and help us learn about needs","archived":false,"fork":false,"pushed_at":"2024-12-20T19:01:57.000Z","size":400,"stargazers_count":2,"open_issues_count":15,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-20T20:18:25.921Z","etag":null,"topics":["data-portability","data-transfer"],"latest_commit_sha":null,"homepage":"https://portmap.dtinit.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dtinit.png","metadata":{"files":{"readme":"README.md","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}},"created_at":"2023-11-03T15:26:27.000Z","updated_at":"2024-12-20T19:02:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"64bf5eee-e3ea-45c1-8d1f-40059f351f5d","html_url":"https://github.com/dtinit/portmap","commit_stats":null,"previous_names":["dtinit/portmap"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dtinit%2Fportmap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dtinit%2Fportmap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dtinit%2Fportmap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dtinit%2Fportmap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dtinit","download_url":"https://codeload.github.com/dtinit/portmap/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231260790,"owners_count":18349461,"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","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":["data-portability","data-transfer"],"created_at":"2024-12-25T17:11:29.044Z","updated_at":"2026-02-15T10:05:24.922Z","avatar_url":"https://github.com/dtinit.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Portability Map\n\n\u003cbr\u003e\u003cbr\u003e\n\n\u003e A way to search a content repository of portability solutions\n\n\u003cbr\u003e\n\n**PortMap** is an open-source [Django](https://www.djangoproject.com/) project that hosts structured\nquery access to a content repository of portability solutions.\n\nPortMap pulls articles on portability solutions from the\n[portability-articles](https://github.com/dtinit/portability-articles) repository, which is where\nvolunteers can contribute content.\n\nThe articles are organized by topic, data type, source and destination, and cached in a\nPostgreSQL DB. The DB also captures query data so we can learn what users most need to find.\n\nDependency management is by the process recommended in \"Boost Your Django DX\" and in Adam Johnson's\nblog posts: use pip, venv, and requirements.txt. For dev requirements, also use pip to install ipython...\n\nPortMap's original project organization is from [Sidewinder](https://stribny.github.io/sidewinder), a django starter project template,\nwhich set us up with:\n\n- environment variables (and the 'environ' package) instead of juggling multiple configuration files\n- Use HTMX for modern frontends\n- Use django-allauth to provide email-based and 3rd party authentication.\n- Have a custom User model for ultimate flexibility\n- auto reloading, debugging and profiling tools, linters and formatters\n- Log anything you want with structured logging\n- Execute automated tests using the best testing library pytest\n- Write test fixtures efficiently using factoryboy and Faker\n\n## Local development\n\n### First time setup\n\nYou will need Python 3 and pip (`python -m ensurepip --upgrade`). PortMap also requires a PostgreSQL database for storing artices; create one locally named \"portmap\" and start it.\n\n1. Get the private key file from @lisad for accessing the GitHub API. This should not be checked into git, so **please don't put it in this repository!**\n\n2. Make a copy of .env-example and name it .env. This is where your local configuration will be stored; it's not checked into git.\n\n3. In your new .env file, change `DJ_DATABASE_CONN_STRING` to point to your local PostgreSQL database.\n\n4. Also in your .env file, change `GITHUB_PRIVATE_KEY_PEM_FILE=\u003cpath to the key file from step 1\u003e`.\n\n5. Install dependencies with pip.\n\n```bash\npython -m pip install -r requirements.txt\n```\n\n\u003e Note: This may fail if you're missing external dependencies; you'll need to inspect the output and install whatever is missing (e.g. python3-devel, gcc, libpq-devel)\n\n6. Initialize your PostgreSQL database.\n\n```bash\n./manage.py migrate\n```\n\n7. Create a superuser for yourself for accessing the database management portal.\n\n```bash\n./manage.py createsuperuser\n```\n\n8. Start the server. By default it will listen for requests at http://localhost:8000\n\n```bash\n./manage.py runserver\n```\n\n9. To populate your local database with articles from https://github.com/dtinit/portability-articles, go to https://localhost:8000/dj-admin and enter your superuser credentials from step 7. Click on \"Articles\" (under \"Core\"), and then press the \"Populate Articles\" button in the top right.\n\n10. (Optional step for running tests locally) Install playwright dependencies.\n\n```bash\nplaywright install\n```\n\n### Frontend\n\nFrontend dev tools like ESLint are delivered via [npm](https://www.npmjs.com/), which is included with Node.js. To use the tools locally, you'll need to:\n\n1. Install [Node.js](https://nodejs.org).\n2. Run `npm install` wherever you cloned this repository to.\n\n#### Linting with ESLint\n\nYou can run the linter by executing `npm run lint`. If there are no issues, there won't be any output.\n\nTo get linting feedback in your code editor, [check here](https://eslint.org/docs/latest/use/integrations) to find an ESLint integration or instructions for your editor. The configuration file is named [.eslintrc.json](.eslintrc.json), but your editor will probably find it for you.\n\n#### Formatting with Prettier\n\nYou can format JavaScript and CSS files with `npm run format`.\n\nTo enable formatting from your code editor, [check here](https://prettier.io/docs/en/editors) for instructions for your editor. The configuration file is named [.prettierrc](.prettierrc), but your editor will probably find it for you.\n\n### Testing\n\nMake sure playwright is installed (`playwright install`), then run `pytest` to run both unit and end-to-end tests.\n\n## Deployments\n\nDeployments to production are triggered automatically by updates to the main branch, or when this repository receives a \"content update\" notification from https://github.com/dtinit/portability-articles. You can observe the status of deployments [here](https://github.com/dtinit/portmap/actions/workflows/django.yml?query=branch%3Amain).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdtinit%2Fportmap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdtinit%2Fportmap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdtinit%2Fportmap/lists"}