Skip to content

silverorange/python-developer-2026-03

Repository files navigation

silverorange Python Developer Assessment

Introduction

This exercise is designed to assess how you approach tasks required in your position as Python developer at silverorange. We are interested to see how you work as well, as what your final results are; include useful Git commit messages and comments where you think your code may be unclear.

If you have any questions about the exercise, please reach out to us!

Please do not include your name or any other self-identifying information in code or commit messages as silverorange will anonymize your work before reviewing.

Project Setup

This project uses uv to manage Python dependencies and Python versions. You will need uv installed to initialize and run the project. If you are using macOS you can install uv using Homebrew:

brew install uv

Once uv is installed, you can sync and migrate the included Django project:

uv sync
uv run python manage.py migrate

Client-side assets are managed using esbuild. This toolchain is managed using NPM. NPM is bundled with Node.js, which can also be installed using Homebrew:

brew install node

Once NPM is available, install dependencies using NPM:

npm install

With dependencies installed, you can run the project using the following command. This will run the Django development server as well as an esbuild file watcher:

make dev

With the development server running, you can access the application on port 8000. The following links can be used to test:

Tasks

Using the provided Django project, and provided data fixtures for authors and posts:

  1. Create models for posts and authors in the blog app based on the data in JSON files.
  2. Write an importer in Python that imports post and author data files from the data into the SQLite database configured in the Django project.
  3. Update the post index view to load all published posts from the database in reverse chronological order.
    • Update the template to render this list as HTML.
    • Include the post titles and authors in the output.
    • Make clicking a post go to the post details.
  4. Add a post detail route to the blog app that will load a published post from the database from the id in the URL.
    • The URL path should be of the form posts/[id].
    • The view and template should render the post content (title, body, author) as HTML.
    • If the requested post is unavailable, show a 404 page.
    • The post body is formatted as Markdown and the HTML should include the formatted Markdown.
  5. Add basic CSS to the index and detail views. The SCSS file static/src/main.scss is set up as the main entrypoint for the index view and can be used on the detail view as well.
    • Use modern CSS best practices.
    • If you know SCSS you may use SCSS features where appropriate, but they are not required.
    • No designs are provided. Do your best to make these basic pages visually appealing.

Success Criteria

We will evaluate your anonymized implementation based on the following criteria:

  • Modern Python best practices
  • Code legibility
  • Correctness of task implementation
  • Use of provided tools
  • Error handling and security
  • CSS implementation
  • Testability of implementation and/or testing

Coding Standard

Please use Python type hints for your code. Ruff is configured in the project and may be used to format and check your code. Django templates can be checked and formatted using djLint. Both tools can be called using Makefile targets:

make lint-check
make lint-fix

Commits

Your commit history is important to us! Try to make meaningful commit messages that show your progress. Remember to not include your name or any other self-identifying information in your commit messages.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages