Comments (3)
Adding validators might be easier if Fields were implemented as Descriptors. Right now Models implement __getattribute__
and __setattribute
to handle watching field changes, which is where that logic would probably live (or I guess, Field.resolve).
Using Descriptors would make it pretty easy to drop validation in, and it's nice for performance to remove __getattribute__
. __getattr__
's overhead isn't nearly as bad, but Descriptors are somewhat designed for this task :)
If I can get the attribute_name change in #16 implemented, I should have enough context to pr a Descriptor change (and then setting validators on Fields will be straightforward).
from flywheel.
Actually, there's already support for validators! I should probably call it out more in the docs, but right now you can pass a function to the Field()
constructor. The function should accept a value and, if the value is incorrect, throw an error. The validators are only called when saving to the database. For example:
class String(object):
def __init__(self, max_length):
self.max_length = max_length
def __call__(self, val):
if len(val) > self.max_length:
raise ValueError("String %r exceeds maximum length!" % val)
And then to use it you could do:
class MyModel(flywheel.Model):
username = Field(check=String(18))
from flywheel.
Thanks @stevearc / @numberoverzero for looking into this and taking the time to reply. Good to know the validators are already supported.
Issue resolved :)
from flywheel.
Related Issues (20)
- New data types available in dynamo3 HOT 1
- Model.save() missing? HOT 2
- filter_expression with 2 possible values HOT 1
- Engine-wide table name prefix HOT 6
- What is the best way to update just one model attribute HOT 3
- Exception using scan with undefined `name` field HOT 8
- add exists static method to models HOT 1
- version 0.5 breaks ddb_dump_() HOT 3
- engine.create_schema() doesn't add newly added global indexes for existing tables. HOT 1
- Documentation references support for undeclared / overflow fields HOT 4
- Minor: developer usability, `Query.one()` and `ValueError` HOT 1
- Stream support HOT 2
- Bugx .one() raises "Expected one result!" but all() returns just one entry HOT 2
- Unable to use to boolean HOT 1
- Query not returning result when using first() HOT 1
- No results returned when querying a date field HOT 2
- can save return the items new values? HOT 1
- Query and return multiple records based on the hash key HOT 1
- Delete subject
- dynamo3 dependency released breaking change HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from flywheel.