Skip to main content

Provide method to cast django request data for POST and GET methods

Project description

request_casting

Python module that allows to cast django request data for POST and GET methods easyly

Allows you to capture errors in parameters and give them default values, to protect your application with little code and easy to read.

Installation

You can use pip to install this module

pip install request_casting

Casts

RequestBool

Gets a parameter from a djangorestframework or django view and cast it to a bool object. For example

from request_casting import request_casting
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['GET', 'POST'])    
def myview(request):
    a=request_casting.RequestBool(request, "a")
    return Response({"a": a,  "class": a.__class__.__name__}, status=status.HTTP_200_OK)

You can call this view with a GET method with requests, curl, axios...

curl http://localhost:8000/myview/?a=true
curl -X POST http://localhost:8000/myview/ -d"a=false"

You'll get this answer in both cases

{"a":true,"class":"bool"}

All request_casting methods allow to set a default value. By default this value is None in all Request methods. This value is returned when cast fails.

curl http://localhost:8000/myview/?a=BADBOOL

You'll get this answer in both cases

{"a":null,"class":"NoneType"}

RequestDate

Use this method inside a view to get a casted date. Use dates in Iso format

    # ... The same as RequestBool example
    a=request_casting.RequestDate(request, "a")

You'll get this answers

curl http://localhost:8000/myview/?a=BADDATE   => a will be None
curl http://localhost:8000/myview/?a=2021-1-1   => a will be date(2023,1,1)

RequestDecimal

Use this method inside a view to get a casted Decimal

    # ... The same as RequestBool example
    a=request_casting.RequestDecimal(request, "a", Decimal(0))

You'll get this answers

curl http://localhost:8000/myview/?a=12.1212  => a will be Decimal(12.1212)
curl http://localhost:8000/myview/?a=2021-1-1   => a will be Decimal(0)

RequestDtaware

Use this method inside a view to get a datetime with timezone. Use dates in Iso format

    # ... The same as RequestBool example
    a=request_casting.RequestDtaware(request, "a")

You'll get this answers

curl http://localhost:8000/myview/?a=2011-10-05T14:48:00.000Z   => a will be a datetime with timezone
curl http://localhost:8000/myview/?a=2021-1-1   => a will be None

RequestEmail

Use this method inside a view to get a validated email

    # ... The same as RequestBool example
    a=request_casting.RequestEmail(request, "a")

You'll get this answers

curl http://localhost:8000/myview/?a=hi@hi.com   => a will be an email
curl http://localhost:8000/myview/?a=hi.hi.com   => a will be None

RequestInteger

Use this method inside a view to get a casted Integer

    # ... The same as RequestBool example
    a=request_casting.RequestInteger(request, "a")

You'll get this answers

curl http://localhost:8000/myview/?a=12 => a will be 12
curl http://localhost:8000/myview/?a=BADINTEGER  => a will be None

RequestListOfBools

Use this method inside a view to get a list of Booleans

    # ... The same as RequestBool example
    a=request_casting.RequesListOfBools(request, "a")

You'll get this answers

curl "http://localhost:8000/myview/?a[]=true&a[]=false"   => a will be a list [True,False]

RequestListOfIntegers

Use this method inside a view to get a list of Integers

    # ... The same as RequestBool example
    a=request_casting.RequestListOfIntegers(request, "a")

You'll get this answers

curl "http://localhost:8000/myview/?a[]=1&a[]=2"   => a will be a list [1,2]

RequestListOfStrings

Use this method inside a view to get a list of strings

    # ... The same as RequestBool example
    a=request_casting.RequestListOfStrings(request, "a")

You'll get this answers

curl "http://localhost:8000/myview/?a[]=a&a[]=b"   => a will be a list ["a","b"]

RequestString

Use this method inside a view to get a casted String

    # ... The same as RequestBool example
    a=request_casting.RequestString(request, "a")

You'll get this answers

curl http://localhost:8000/myview/?a=12 => a will be "12"
curl http://localhost:8000/myview/?a=BADINTEGER  => a will be "BADINTEGER"

RequestUrl

Use this method inside a view to get a django model object using its hyperlinked url

    # ... The same as RequestBool example
    a=request_casting.RequestUrl(request, "a", models.Record, model_url="records")

You'll get this answers

curl "http://localhost:8000/myview/?a=http://localhost:8000/api/records/1/"   => a will be a Record object with pk=1

RequestListOfUrls

Use this method inside a view to get a list of django model object using its hyperlinked url

    # ... The same as RequestBool example
    a=request_casting.RequestListOfUrls(request, "a",models.Record, model_url="records")

You'll get this answers

curl "http://localhost:8000/myview/?a[]=http://localhost:8000/api/records/1/&a[]=http://localhost:8000/api/records/2/"   => a will be a list with Record objects with pk=1 and pk=2

Other usefull functions

all_args_are_not_empty

Returns True if all function arguments are different to None and ""

It's very usefull to compare view parameters fast.

    request_casting.all_args_are_not_empty(None, "", None) #Returns False
    request_casting.all_args_are_not_empty("", "", "")# Returns False
    request_casting.all_args_are_not_empty(1, 1, 1) #Return True

all_args_are_not_none

Returns True if all function arguments are different to None

It's very usefull to compare view parameters fast.

    request_casting.all_args_are_not_none(None, "", None) #Returns False
    request_casting.all_args_are_not_none("", "", "")# Returns True
    request_casting.all_args_are_not_none(1, 1, 1) #Return True

Test module

Run poe coverage to test module.

Changelog

0.7.0 (2024-04-13)

  • Using pydicts-0.16.0
  • Added RequestEmail method

0.6.0 (2023-12-14)

  • Using pydicts-0.11.0 library to capture errors and fix bugs

0.5.0 (2023-12-05)

  • Added support to request_casting with json formats (APICLIENT)

0.4.0 (2023-12-05)

  • Migrated to pydicts-0.9.0

0.3.0 (2023-12-04)

  • Improved parse_from_url and object_from_url validations
  • Added validate_object to RequestUrl and RequestListOfUrls to validate returned objects
  • Added gettext support

0.2.0 (2023-11-18)

  • Improving documentation
  • All default values are set to None, including RequestList methods
  • string2dtaware now uses ZoneInfo instead of pytz

0.1.0 (2023-11-15)

  • Converted reusingcode module to an independent module

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

request_casting-0.7.0.tar.gz (19.8 kB view details)

Uploaded Source

Built Distribution

request_casting-0.7.0-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file request_casting-0.7.0.tar.gz.

File metadata

  • Download URL: request_casting-0.7.0.tar.gz
  • Upload date:
  • Size: 19.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.11.8 Linux/6.8.2-gentoo

File hashes

Hashes for request_casting-0.7.0.tar.gz
Algorithm Hash digest
SHA256 7584e482aa4254826f1c7b81abd4b667201463317bd488c1fd7a7a4bb7523445
MD5 3e313e137c49f08cf6033c5233d708d6
BLAKE2b-256 2386cf34f9f98b39d96e86190ea01b1d83dedc45ab9c843e4b9d01831dfa47d4

See more details on using hashes here.

File details

Details for the file request_casting-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: request_casting-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 21.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.11.8 Linux/6.8.2-gentoo

File hashes

Hashes for request_casting-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4bf24c14eb70eb0ac69d676de9e3bbf855d6d0fcaf2b3ebe2e51f4e09fa67bb7
MD5 b27cf2d7cc3ce21a277d9a9297c78f54
BLAKE2b-256 b1e3805bc57dd07a544ea6becd473d9e23d46fb5ba2dc2ac0879b1f2a324e276

See more details on using hashes here.

Supported by

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