Skip to main content

A common crud framework for web.

Project description

pycrud

codecov

A common crud framework for web.

The project moved to https://pypi.org/project/pycrud/

Features:

  • Generate query by json or dsl

  • Role based permission system

  • Easy to integrate with web framework

  • Tested coveraged

Examples:

Define

from typing import Optional

from playhouse.db_url import connect
from pycurd.crud.ext.peewee_crud import PeeweeCrud
from pycurd.types import RecordMapping

class User(RecordMapping):
    id: Optional[int]
    nickname: str
    username: str
    password: str = 'password'


db = connect("sqlite:///:memory:")

c = PeeweeCrud(None, {
    User: 'users'
}, db)

Create

from pycurd.values import ValuesToWrite

v = ValuesToWrite({'nickname': 'wwww', 'username': 'u2'})
lst = await c.insert_many(User, [v])

print(lst)

Read

from pycurd.query import QueryInfo

# from dsl
lst = await c.get_list(QueryInfo.from_table_raw(User, where=[
    User.id != 1
]))

# from json
lst = await c.get_list(QueryInfo.from_json(User, {
    'id.eq': 1
}))

print([x.to_dict() for x in lst])

Update

from pycurd.query import QueryInfo
from pycurd.values import ValuesToWrite

v = ValuesToWrite({'nickname': 'bbb', 'username': 'u2'})

# from dsl
lst = await c.update(QueryInfo.from_table_raw(User, where=[
    User.id.in_([1, 2, 3])
]))

# from json
lst = await c.update(QueryInfo.from_json(User, {
    'id.in': [1,2,3]
}), v)

print(lst)

Delete

from pycurd.query import QueryInfo

lst = await c.delete(QueryInfo.from_json(User, {
    'id.in': [1,2,3]
}))

print(lst)

Query by json

from pycurd.query import QueryInfo

# $or: (id < 3) or (id > 5)
QueryInfo.from_json(User, {
    '$or': {
        'id.lt': 3,  
        'id.gt': 5 
    }
})

# $and: 3 < id < 5
QueryInfo.from_json(User, {
    '$and': {
        'id.gt': 3,  
        'id.lt': 5 
    }
})


# $not: not (3 < id < 5)
QueryInfo.from_json(User, {
    '$not': {
        'id.gt': 3,  
        'id.lt': 5 
    }
})

# multiple same operator: (id == 3) or (id == 4) or (id == 5)
QueryInfo.from_json(User, {
    '$or': {
        'id.eq': 3,  
        'id.eq.2': 4,
        'id.eq.3': 5, 
    }
})

# multiple same operator: (3 < id < 5) or (10 < id < 15)
QueryInfo.from_json(User, {
    '$or': {
        '$and': {
            'id.gt': 3,
            'id.lt': 5
        },
        '$and.2': {
            'id.gt': 10,
            'id.lt': 15
        }
    }
})

Query by DSL

# $or: (id < 3) or (id > 5)
(User.id < 3) | (User.id > 5)

# $and: 3 < id < 5
(User.id > 3) & (User.id < 5)

# $not: not (3 < id < 5)
~((User.id > 3) & (User.id < 5))

# multiple same operator: (id == 3) or (id == 4) or (id == 5)
(User.id != 3) | (User.id != 4) | (User.id != 5)

# multiple same operator: (3 < id < 5) or (10 < id < 15)
((User.id > 3) & (User.id < 5)) | ((User.id > 10) & (User.id < 15))

Operators

type operator text
compare EQ ('eq', '==')
compare NE ('ne', '!=')
compare LT ('lt', '<')
compare LE ('le', '<=')
compare GE ('ge', '>=')
compare GT ('gt', '>')
relation IN ('in',)
relation NOT_IN ('notin', 'not in')
relation IS ('is',)
relation IS_NOT ('isnot', 'is not')
relation PREFIX ('prefix',)
relation CONTAINS ('contains',)
logic AND ('and',)
logic OR ('or',)
// usage:
{
  'time.ge': 1,
  '$or': {
    'id.in': [1, 2, 3],
    '$and': {
      'time.ge': 100,
      'time.le': 500,
    }
  }
}

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

pycurd-0.2.3.tar.gz (20.0 kB view details)

Uploaded Source

Built Distribution

pycurd-0.2.3-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file pycurd-0.2.3.tar.gz.

File metadata

  • Download URL: pycurd-0.2.3.tar.gz
  • Upload date:
  • Size: 20.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.2 CPython/3.8.3 Windows/10

File hashes

Hashes for pycurd-0.2.3.tar.gz
Algorithm Hash digest
SHA256 934d62aefd19da61149532721e3c38f0a1f066a8d6d8c8880b581535b7293976
MD5 963bf0ecf98cdabe65944d6b3461093d
BLAKE2b-256 d89eb209da57698a0e4911e0c3ddcad4443342580b41deb06351b7d5dd2bebe7

See more details on using hashes here.

File details

Details for the file pycurd-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: pycurd-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 25.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.2 CPython/3.8.3 Windows/10

File hashes

Hashes for pycurd-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 522921c8576d0866f5ecbd6865e6771d8042da0257546725b494be6479850e0e
MD5 bbacadb0fd25e3982a68984d5386f10f
BLAKE2b-256 4cae3425c51b35fc69ac3ec2238ae33418a0259f17b3d4a538f988a4ee6de836

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