Skip to main content

A flask based vm booking app.

Project description

vm-booking-app

A RESTful API application where I can store data about VMs used by customers.

Installation

Install using pip:

$ pipenv install
$ flask run

API Usage Examples

Get all users.

$ curl -X GET http://localhost:5000/api/users
{
  "users": [
    {
      "id": 1,
      "email: "user1@gmail.com",
      "username": "user1"
    },
    {
      "id": 2,
      "email: "user2@gmail.com",
      "username": "user2"
    }
  ]
}

Get a user.

Gets a user username.

$ curl -X GET http://localhost:5000/api/users/<slug>
{
  "user": {
    "id": 1,
    "email: "user1@gmail.com",
    "username": "user1"
  }
}

Create a user.

Email and username are required fields.

$ curl -X POST http://localhost:5000/api/users -d '{"email":"user3@gmail.com", "username": "user3"}'
{
  "user": {
    "id": 1,
    "email": "user3@gmail.com",
    "username": "user3"
  }
}

Update a user.

Only email and username can be changed.

$ curl -X PATCH http://localhost:5000/api/users/<slug> -d '{"email":"user4@gmail.com"}'
{
  "user": {
    "id": 1,
    "email": "user4@gmail.com",
    "username": "user4"
  }
}

Delete a user.

$ curl -X DELETE http://localhost:5000/api/users/<slug>
{
  "user": {
    "id": 1,
    "email": "user1@gmail.com",
    "username": "user1"
  }
}

Get all vms.

$ curl -X GET http://localhost:5000/api/vms
{
  "vms": [
    {
      "id": 1,
      "name": "VM1",
      "ip": "10.0.2.3",
      "description": "general purpose vm",
      "status": "running",
      "reservation_start": "21/11/2026",
      "reservation_end": "21/11/2026",
      "user_id": 1
    }
  ]
}

Get a vm.

$ curl -X GET http://localhost:5000/api/vms/<id>
{
  "vm": {
    "id": 1,
    "name": "VM1",
    "ip": "10.0.2.3",
    "description": "general purpose vm",
    "status": "running",
    "reservation_start": "21/11/2026",
    "reservation_end": "21/11/2026",
    "user_id": 1
  }
}

Create a vm.

Name, ip, user_id are required.

$ curl -H "Content-Type: application/json" -X POST http://localhost:5000/api/vms
-d '{"ip":"10.0.2.4", "name": "VM1", "reservation_start": "21/11/2026", "reservation_end": "21/11/2026", "userId": 2}'
{
  "vm": {
    "id": 1,
    "name": "VM1",
    "ip": "10.0.2.3"
    "description": "general purpose vm",
    "status": "running",
    "reservation_start": "21/11/2026",
    "reservation_end": "21/11/2026",
    "user_id": 1
  }
}

Update vm.

Only name, description and status can be chanded currently.

$ curl -H "Content-Type: application/json" -X PATCH http://localhost:5000/api/vms/<id>
-d '{"description":"standart vm"}'
{
  "vm": {
    "id": 1,
    "name": "VM1",
    "ip": "10.0.2.3",
    "description": "standard vm",
    "status": "running",
    "reservation_start": "21/11/2026",
    "reservation_end": "21/11/2026",
    "user_id": 1
  }
}

Delete vm.

$ curl -H "Content-Type: application/json" -X DELETE http://localhost:5000/api/vms/<id>
{
  "vm": {
    "id": 1,
    "ip": "10.0.2.3",
    "name": "VM1",
    "description": "standard vm",
    "status": "running",
    "reservation_start": "21/11/2026",
    "reservation_end": "21/11/2026",
    "user_id": 1
  }
}

Get vm usage by username

$ curl -X GET http://localhost:5000/api/users/<slug>/vm-use
{
  "user": {
    "id": 1,
    "email": "user1@gmail.com",
    "username": "user1",
    "vms": [{}, {}]
  }
}

Development

For working on vm-booking-app, you'll need to have Python >= 3.7 and pipenv installed. With those installed, run the following command to create a virtualenv for the project and fetch the dependencies:

$ pipenv install --dev
...

Next, activate the virtualenv and get to work:

$ pipenv shell
...
(vm-booking-app) $

Linting

For linting we use flake8 tool. We should keep code clean. To run linter use the following command:

$ flake8 api
...

Models

User

id: number
email: string
username: string

VM

id: number
name: string
ip: string
description: string?
status: string
reservation_start: DateTime
reservation_end: DateTime
user_id: User.id

Deploying

cd ~
git clone git@gitlab-1914910442.us-west-2.elb.amazonaws.com:oonyshchenko/vm-booking-app.git
git checkout master
source .env_prod
docker-compose up --build -d

Testing

Open in browser http://localhost:5000 to get API status and version.

Open in browser http://localhost:5000/healthy to get DB connection status.

Automatic tests

(vm-booking-app) $ pytest
(vm-booking-app) $ pytest --cov=api   

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vm-booking-app-0.1.67.tar.gz (17.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vm_booking_app-0.1.67-py2.py3-none-any.whl (21.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file vm-booking-app-0.1.67.tar.gz.

File metadata

  • Download URL: vm-booking-app-0.1.67.tar.gz
  • Upload date:
  • Size: 17.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.2

File hashes

Hashes for vm-booking-app-0.1.67.tar.gz
Algorithm Hash digest
SHA256 b37e8d3a9a4307a1894c67c3e74a55bfffeab85f430035c746567c5d60e7685a
MD5 874db3f2927ce69942f78b1ac8d08cb0
BLAKE2b-256 624e805d1a7972d3ae70c66ba7d12de16a9e36bbd9d2a2123ff1b3d25e43c88b

See more details on using hashes here.

File details

Details for the file vm_booking_app-0.1.67-py2.py3-none-any.whl.

File metadata

  • Download URL: vm_booking_app-0.1.67-py2.py3-none-any.whl
  • Upload date:
  • Size: 21.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.2

File hashes

Hashes for vm_booking_app-0.1.67-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 3b9b5a22d7ebb1b74fc23e2296108b66a379f538d4a756b8d266f1a58bdc484e
MD5 5d94c5b6e1a51f10abcf06c79db4b776
BLAKE2b-256 c867b288ea3049ba21a5f1256e6e4a668aca9c1dad86997859b8cb56578f5a37

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page