{"id":28386273,"url":"https://github.com/carcutter/backendchallenge","last_synced_at":"2026-01-20T18:01:18.715Z","repository":{"id":149553353,"uuid":"605955576","full_name":"carcutter/BackendChallenge","owner":"carcutter","description":null,"archived":false,"fork":false,"pushed_at":"2024-03-27T14:23:18.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":10,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-06-26T13:46:17.798Z","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/carcutter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"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}},"created_at":"2023-02-24T09:13:34.000Z","updated_at":"2023-04-05T09:52:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"92c29940-027b-4d89-a53a-08c9648c7c63","html_url":"https://github.com/carcutter/BackendChallenge","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/carcutter/BackendChallenge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carcutter%2FBackendChallenge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carcutter%2FBackendChallenge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carcutter%2FBackendChallenge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carcutter%2FBackendChallenge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carcutter","download_url":"https://codeload.github.com/carcutter/BackendChallenge/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carcutter%2FBackendChallenge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28607961,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T16:10:39.856Z","status":"ssl_error","status_checked_at":"2026-01-20T16:10:39.493Z","response_time":117,"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":"2025-05-30T13:41:46.572Z","updated_at":"2026-01-20T18:01:18.671Z","avatar_url":"https://github.com/carcutter.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Car Cutter - Backend Challenge\n==========\n\nTask\n-----\n\n### As a backend developer you get the task to implement an API route using Python\n\n... which accepts json data from our customers and store certain parts of it to the filesystem.\u003c/br\u003e\nSince this is a pretty simple task, we want you to think of best practices, edge cases and good software engineering.\n\nPlease fork our repo and implement the challenge in `src/core/challenge_api.py`.\n\nCustomers will post some json data to this api route, and we want to store each `Vehicle` in the `Vehicle-List` to a single file.\nThis file should be stored to a folder named like the `user_id` and the filename should be the `id` with a \".json\" extension.\n\nOnce you are done, just create a pull request to `base:develop`. Please leave a comment what you think about the task and how long it took you to finish.\n\nRun It\n-----\n\nServe the API route with:\n```bash\n$ python src/cli.py api-server vehicle-features\n```\n\nBy default, the API is now reachable at `http://127.0.0.1:8080/backend/` \u003c/br\u003e\nOur customers will post json files to the route `/challenge`.\nWe provide a [json schema](https://github.com/carcutter/BackendChallenge/blob/develop/json/vehicle-features.v1.schema.json) and an [example](\n    https://github.com/carcutter/BackendChallenge/blob/develop/json/vehicle-features.v1.example.json).\n\nExpect our customers to post their data with different approaches like:\n```bash\ncurl --location --request POST 'http://localhost:8080/backend/challenge' \\\n  --header \"Content-Type: application/json\" \\\n  --data @json/vehicle-features.v1.example.json\n```\nor\n```bash\ncurl --request POST 'http://localhost:8080/backend/challenge' \\\n  --header \"Content-Type: application/json\" \\\n  --form data=@json/vehicle-features.v1.example.json\n```\n\n\nSetup\n-----\nWe use Python 3.7 with Flask to run the http server.\n\n\n#### Virtual Environment (API and CLI)\n\nYou can use [pyenv](https://github.com/pyenv/pyenv)\nto manage different versions of Python on your local PC.\n\nTo complete the setup run the following command inside the repository\ndirectory. Whenever you enter the repository folder then, `pyenv` will\nautomatically use Python 3.7:\n\n```bash\npyenv install 3.7.13\npyenv local 3.7.13\npython3 --version  # verify whether we're indeed using Python 3.7\n```\n\nWe need a virtual environment for local development.\nInside the repository directory run:\n\n```bash\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\n```\n\nFormatting\n----------\n\nTo format your code before committing run `make format` or\n[integrate black into your IDE](https://black.readthedocs.io/en/stable/integrations/editors.html).\n\nCaveat: Black either puts all function arguments into a single line or\none argument per line. To split a long line of arguments into several lines,\nyou must add a trailing comma *after* the last argument.\nFor example, `transform(argument1, argument2,)` will be\nconverted to multiple lines by *Black*. The following example on the other hand\nwill be collapsed into a single line, because it lacks a trailing comma:\n\n```python\ntransform(\n    argument1,\n    argument2\n)\n```\n\n### PyCharm\n\nIf you're using PyCharm and you want your files to be auto-formatted on save\nfollow these steps:\n\n- Setup the virtualenv environment `venv` as outlined above. *Black* should\n  automatically be installed, because it's listed in `requirements.txt`.\n  As a short-cut (without local development possibility) you can run:\n  `python3 -m venv venv \u0026\u0026 venv/bin/python install black==22.3.0`\n- Install the [*File Watchers* plugin](https://plugins.jetbrains.com/plugin/7177-file-watchers)\n- In the *File Watchers* plugin, setup black with the following settings:\n  - File Type: Python\n  - Program: `$PyInterpreterDirectory$/black`\n  - Arguments: `--line-length=140 $FilePath$`\n  - Output paths to refresh: `$FilePath$`\n  - Working Directory: `$ProjectFileDir$`\n  - Uncheck \"Auto-save edited files to trigger the watcher\"\n  - Uncheck \"Trigger the watcher on external changes\"\n\n\n### VSCode\n\nThe repository already contains the required settings for VSCode in\n`.vscode`. If you want to automatically format when you save a file, you\ncan additionally enable the setting *Format on Save* in your VSCode.\n\n\nUnit Tests\n----------\n\nUnit tests require the following dependencies: pytest, coverage\n\n```bash\npip install coverage pytest\nmake unit-test\nmake coverage\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarcutter%2Fbackendchallenge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarcutter%2Fbackendchallenge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarcutter%2Fbackendchallenge/lists"}