{"id":44438751,"url":"https://github.com/eaudeweb/scratch","last_synced_at":"2026-02-12T14:29:53.800Z","repository":{"id":41939793,"uuid":"196162737","full_name":"eaudeweb/scratch","owner":"eaudeweb","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-07T13:10:51.000Z","size":8283,"stargazers_count":3,"open_issues_count":8,"forks_count":11,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-05-08T12:25:00.280Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eaudeweb.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":"2019-07-10T08:15:18.000Z","updated_at":"2024-05-07T13:09:51.000Z","dependencies_parsed_at":"2024-05-07T12:25:01.967Z","dependency_job_id":"3d15807e-adcb-482e-a2dd-f9b506e65590","html_url":"https://github.com/eaudeweb/scratch","commit_stats":null,"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/eaudeweb/scratch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eaudeweb%2Fscratch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eaudeweb%2Fscratch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eaudeweb%2Fscratch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eaudeweb%2Fscratch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eaudeweb","download_url":"https://codeload.github.com/eaudeweb/scratch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eaudeweb%2Fscratch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29368640,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2026-02-12T14:29:49.874Z","updated_at":"2026-02-12T14:29:53.795Z","avatar_url":"https://github.com/eaudeweb.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Scratch ![alt text](https://travis-ci.com/eaudeweb/scratch.svg?branch=master) [![Coverage Status](https://coveralls.io/repos/github/eaudeweb/scratch/badge.svg?branch=master)](https://coveralls.io/github/eaudeweb/scratch?branch=master) [![Docker](https://img.shields.io/docker/cloud/build/eaudeweb/scratch?label=Docker\u0026style=flat)](https://hub.docker.com/r/eaudeweb/scratch/builds)\n\n### Python Django Scratch\n\n## Installation\n\n1. Clone project using SSH key:\n\n        git clone git@github.com:eaudeweb/scratch.git\n\n1. Copy docker example files:\n\n        cd scratch/\n        cp docker-compose.override.yml.example docker-compose.override.yml\n        cp docker/app.env.example docker/app.env\n        cp docker/db.env.example docker/db.env\n        cp docker/redis.env.example docker/redis.env\n        cp docker/tika.env.example docker/tika.env\n        cp docker/cachet.env.example docker/cachet.env\n\n    \u003e NOTE:\n    \u003e 1. LDAP variables in `app.env` must be configured manually.\n    \u003e 2. If you're on macOS, you might need to customze docker-compose.override to use the `amd64/elasticsearch:6.8.23` image in elasticsearch services.\n\n        docker-compose up -d\n\n1. Verify if the containers were created:\n\n        docker-compose ps\n\n1. Go into application container:\n\n        docker compose exec web sh\n\n1. Run migrations:\n    ```\n    python manage.py migrate\n    ```\n1. Load CPV codes, TED Countries and UNSPSC codes to the database:\n   ```commandline\n       python manage.py load_initial_data\n    ```\n   \u003e NOTE: Run the command with `--reverse` flag to delete the data added by the command\n1. Run server:\n    ```commandline\n    python manage.py runserver 0.0.0.0:8000\n    ```\n### [Cachet Setup Info](Cachet.md)\n## Running with NGINX\n\nIf you want to use NGINX to serve the project you need to do the following:\n\nComment the web service the ports in docker-compose.yml\n```\n    web:\n      ...\n      ports:\n        - 8000:8000\n```\n\nCreate docker-compose.override.yml from  docker-compose.override.yml.nginx.example\n```\n    cp docker-compose.override.yml.nginx.example docker-compose.override.yml\n```\n\nCreate the stack and start it:\n```\n    docker-compose up\n```\n\n## Testing\n\nYou can run the test suite as follows:\n\n    python manage.py test --settings=scratch.test_settings\n\n## ElasticSearch Web Client\n\nIf you need to debug ElasticSearch during development, you can connect to the\nweb client at http://localhost:1358/?appname=%2A\u0026url=http://localhost:9200/\n\n## Errors\n\n- Bootstrap checks failed: When starting the Elasticsearch container, this error may ocurr. The following command should fix it.\n\n        sudo sysctl -w vm.max_map_count=262144\n- TenderDocument objects have no actual file associated: Due to a failed request to download a tender document,\nTenderDocument objects without an actual document may be created and saved in the db. After the cause of the request\nfailure is resolved, you can fix the incomplete objects already saved in the db by running the following command,\nwhich will download the documents for the instances where they are missing:\n\n   ```commandline\n  python manage.py add_documents\n   ```\n\n## Management Commands\n\n-   **add_award:** Adds Contract Awards for expired UNGM tenders\n-   **deadline_notifications:** Sends e-mails with favourite tenders that have deadline in DEADLINE_NOTIFICATIONS days\n-   **delete_expired_tenders:** Deletes tenders from archive with deadline passed since DELETE_EXPIRED_DAYS days ago or more\n-   **notify:** Sends an e-mail for every new tender or winner(default) or an e-mail with all new tenders and winners(digest parameter specified);\n-   **notify_favourites:** Sends e-mails for favourites tenders, according to digest parameter described previously\n-   **notify_keywords:** Sends e-mails for tenders with keywords, according to digest parameter described previously\n-   **remove_unnecessary_newlines:** Removes newlines Vendors' names\n-   **update_ted:** Add new TED tenders, according to days_ago parameter or beginning with latest published date\n    from database, if not specified\n-   **update_ungm:** Add new UNGM tenders, according to days_ago parameter or beginning with latest published date from\n    database, if not specified\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feaudeweb%2Fscratch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feaudeweb%2Fscratch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feaudeweb%2Fscratch/lists"}