MongoEngine flask extension with WTF model forms support

Overview

Flask-MongoEngine

Info: MongoEngine for Flask web applications.
Repository: https://github.com/MongoEngine/flask-mongoengine
https://travis-ci.org/MongoEngine/flask-mongoengine.svg?branch=master https://coveralls.io/repos/github/MongoEngine/flask-mongoengine/badge.svg?branch=master

About

Flask-MongoEngine is a Flask extension that provides integration with MongoEngine. It handles connection management for your app. You can also use WTForms as model forms for your models.

Documentation

You can find the documentation at https://flask-mongoengine.readthedocs.io

Installation

You can install this package using pypi: pip install flask-mongoengine

Tests

To run the test suite, ensure you are running a local copy of Flask-MongoEngine and simply run: pytest.

To run the test suite on every supported versions of Python, PyPy and MongoEngine you can use tox. Ensure tox and each supported Python, PyPy versions are installed in your environment:

# Install tox
$ pip install tox
# Run the test suites
$ tox

To run a single or selected test suits, use pytest -k option.

Contributing

We welcome contributions! see the Contribution guidelines

Community

License

Flask-MongoEngine is distributed under MIT license, see LICENSE for more details.

Comments
  • Next Milestone Questions & Call for Maintainers!

    Next Milestone Questions & Call for Maintainers!

    @anemitz & @thomasst do you guys have any plans for the next milestone / release of flask-mongoengine?

    Unfortunately, I dont have the time available at the minute to fix the issues and push a release. If you are in the same boat, I'm happy to try and draft in more maintainers!

    Any potential maintainers - please post here if you want to help further flask-mongoengine - I'm happy to mentor as well!

    opened by rozza 50
  • Can't install flask-mongoengine in my virtual environment

    Can't install flask-mongoengine in my virtual environment

    pip install flask-mongoengine Collecting flask-mongoengine Using cached flask-mongoengine-0.9.5.tar.gz (111 kB) ERROR: Command errored out with exit status 1: command: 'c:\users\keerthivasan\desktop\pybox\venv\scripts\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\keerthivasan\AppData\Local

    \Temp\pip-install-su4c26f2\flask-mongoengine\setup.py'"'"'; file='"'"'C:\User s\keerthivasan\AppData\Local\Temp\pip-install-su4c26f2\flask-mongoengine\setup. py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'" '\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' egg _info --egg-base 'C:\Users\keerthivasan\AppData\Local\Temp\pip-pip-egg-info-xw613uem' cwd: C:\Users\keerthivasan\AppData\Local\Temp\pip-install-su4c26f2\flask-mong oengine\

    im trying to install flask-mongoengine but can't for some reasons. Help me out

    opened by keerthivasan-g 18
  • add mongomock if app.config['TESTING']

    add mongomock if app.config['TESTING']

    i would love to be able to have a mongomock connection if app.config['TESTING'] is true this would allow easier testing of the flask application (otherwise an in-memory mongo like the one implemented in ming would be great)

    type: enhancement 
    opened by ocean1 18
  • Using mongodb:// style uri's no longer work

    Using mongodb:// style uri's no longer work

    This line is the culprit. Was noticed before the release of 0.8 :(

    I get a failure: pymongo.errors.ServerSelectionTimeoutError: r2d2_local:27017: [Errno -2] Name or service not known

    r2d2_local is the name of my database, not my host.

    type: bug 
    opened by agani 16
  • Document and fix connection code

    Document and fix connection code

    Reverting/ fixing changes from https://github.com/MongoEngine/flask-mongoengine/pull/231. Relevant criticism: https://github.com/MongoEngine/flask-mongoengine/pull/231#issuecomment-255568259.

    The main goal of this PR is to fix a buggy connection code introduced in v0.8. It also makes the code cleaner and easier to understand through a better separation of responsibilities and a better documentation.

    This is unfortunately dropping support for mongomock, but many things were broken about it to begin with. We should revisit adding it in the future, though personally I don't see a point for it... In the age of Travis/CircleCI/etc., it's so easy to run a real MongoDB in your tests.

    Things to test manually:

    • [x] Connecting to multiple mongos in a sharded cluster
    • [x] Connecting to a replica set
    • [x] Connecting to a server that requires authentication
    • [x] All of the above via a MongoDB URI

    Fixes #266 #283 #282 #259 #258 #254 #250 #247 #267

    opened by wojcikstefan 12
  • model_form Forms return '' instead of None for empty fields.

    model_form Forms return '' instead of None for empty fields.

    The email field validates '' differently than None. '' is an invalid email, None is a valid input. model_form based Forms return the wrong data.

    from flask import Flask
    from flask.ext.mongoengine import MongoEngine
    import unittest
    from flask.ext.mongoengine.wtf import model_form
    from werkzeug.datastructures import MultiDict
    
    app = Flask(__name__)
    
    app.config.update(
        DEBUG = True,
        TESTING = True,
        MONGODB_HOST = 'localhost',
        MONGODB_PORT = '27017',
        MONGODB_DB = 'mongorest_example_app',
    )
    
    db = MongoEngine(app)
    
    class User(db.Document):
        email = db.EmailField(required=False)
        name = db.StringField()
    
    class FieldTestCase(unittest.TestCase):
        def setUp(self):
            self.app = app.test_client()
    
        def test_emptyemail(self):
            with app.test_request_context('/?name=Peter'):
                TestForm = model_form(User)
                data = MultiDict({'name':'John Doe'})
                form = TestForm(data,csrf_enabled=False)
                assert form.validate()
                assert form.data['email'] == None
    # form.data['email'] is '' instaed of None
    
    opened by lucasvo 12
  • while assigning replicaSet parameter, the replicaSet is gone. This is because of the below code...

    while assigning replicaSet parameter, the replicaSet is gone. This is because of the below code...

    In master branch, flask_mongoengine/connection.py, line 265:

    if conn_setting.pop('replicaset', None):
        resolved['replicaSet'] = conn_setting.pop('replicaset', None)
    

    what is f***ing going on lol

    Because dict.pop() will return and also remove specific key value pair from dict, so we cannot do dict.pop() twice. Actually this code should be:

    replica_set = conn_setting.pop('replicaset', None)
    if replica_set:
        resolved['replicaSet'] = replica_set
    
    type: bug 
    opened by fieliapm 11
  • Model form generator now accepts wtf custom 'validators' and 'filters' on model field definition.

    Model form generator now accepts wtf custom 'validators' and 'filters' on model field definition.

    Added a wrapper sub-class WtfBaseField to allow additional WTForm field parameters and settings needed by flask-mongoengine, without necessarily going through to the core mongoengine BaseField.

    • flask_mongoengine/__init__.py has patching to redirect wtf mongoengine Fields of base BaseField to use WtfBaseField
    • wtf/orm.py now has 'validators' and 'filters' allowed on behalf wtf model field generator.

    Example:

     class Contact(db.Document)
        telephone = db.StringField(
            required=True,
            validators=[
              validators.InputRequired(message=u'Missing telephone.'),
            ],
            max_length=50
        )
    
    opened by losintikfos 11
  • Connect parameter

    Connect parameter

    This PR allows to use MONGODB_CONNECT parameter and document both the existing MONGO_SETTINGS['connect'] and the new MONGODB_CONNECT parameters.

    I had to read #255 to discover this possibility which isn't documented and this solve a common issue.

    Context: this feature seems to appear in #280 but there was issues and PRs before. ex: #255, #266, #126

    opened by noirbizarre 10
  • Code quality improvements

    Code quality improvements

    This is a follow-up after #270. I tightened flake8's code checking, added flake8-import-order and fixed existing imports (see https://www.python.org/dev/peps/pep-0008/#imports for details), and added some minor style tweaks.

    @lafrech let me know what you think :)

    opened by wojcikstefan 10
  • Allow RadioField

    Allow RadioField

    Hi! I would like to use a StringField with choices as, instead of a SelectField or MultiSelectField, RadioField For that I modify the orm.py adding 2 lines of code Instead of:

    if field.choices:
                kwargs['choices'] = field.choices
    
                if ftype in self.converters:
                    kwargs["coerce"] = self.coerce(ftype)
                if kwargs.pop('multiple', False):
                    return f.SelectMultipleField(**kwargs)
                return f.SelectField(**kwargs)
    

    I have

    if field.choices:
                kwargs['choices'] = field.choices
    
                if ftype in self.converters:
                    kwargs["coerce"] = self.coerce(ftype)
                if kwargs.pop('multiple', False):
                    return f.SelectMultipleField(**kwargs)
                if kwargs.pop('radio', False):
                    return f.RadioField(**kwargs)
                return f.SelectField(**kwargs)
    

    Notice this 2 new lines:

                if kwargs.pop('radio', False):
                    return f.RadioField(**kwargs)
    

    I would prefer to make a pull request but I wasn't able to run the test (if you could point me to the test help I would apreciate it)

    In the other hand, I would prefer that choices will be treated in the converter to allow subclassing better but this change will be ok for me

    What do you think?

    Thanks!

    opened by Garito 10
  • Regarding new release

    Regarding new release

    Is new release planned any time soon? I can see that release tag for 1.0.0 was 2020.

    I can see that quite a lot of work is merged into master, but would avoid using it for production since it might not be stable enough.

    opened by rimvislt 1
  • docs: Fix a few typos

    docs: Fix a few typos

    There are small typos in:

    • CONTRIBUTING.md
    • docs/forms.md

    Fixes:

    • Should read significant rather than signigicant.
    • Should read responsibility rather than responsobility.
    • Should read hardcoded rather than hardcodded.
    • Should read extract rather than exctract.

    Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    opened by timgates42 0
  • New JSONProvider use of super() not quite right

    New JSONProvider use of super() not quite right

    I am implementing similar logic in Flask-Security - so stole some code :-)

    The code:

    class MongoEngineJSONProvider(superclass):
            """A JSON Provider update for Flask 2.2.0+"""
    
            @staticmethod
            def default(obj):
                """Extend JSONProvider default static method, with Mongo objects."""
                if isinstance(
                    obj,
                    (BaseDocument, QuerySet, CommandCursor, DBRef, ObjectId),
                ):
                    return _convert_mongo_objects(obj)
                return super().default(obj)
    

    I don't think is quite right - using super() for static methods doesn't work - you need to do something like: return super(MongoEngineJSONProvider, MongoEngineJSONProvider).default(obj)

    type: bug 
    opened by jwag956 1
  • Migration to 2.0.0 documentation

    Migration to 2.0.0 documentation

    Explain:

    • [ ] New installation behavior
    • [ ] Recommended approach to config configuration
    • [ ] New restriction to passing arguments on model field definition
    • [ ] ORM module deprecation
    topic: documentation 
    opened by insspb 1
Releases(v1.0.0)
  • v1.0.0(Nov 21, 2020)

    Changes

    • Use fldt.$ to avoid double jQuery.noConflict(true) (#313) @martinhanzik
    • Run Travis builds in a container-based environment (#301) @wojcikstefan
    • Fix test and mongomock (#304) @touilleMan
    • Connect parameter (#321) @noirbizarre

    Breaking Changes

    • Update install requirements to last flask dependencies (#390) @insspb
    • Pymongo support < 3.6.0 dropped (#372) @insspb
    • Drop python versions from python 2.7 to 3.5 (#359) @insspb
    • Code reformatting, cleanup and formatting automation (#368) @insspb

    Added

    • Restored changelogs for versions 0.9.2-0.9.5 (#370) @insspb
    • Python 3.9 support added (#415) @insspb
    • Github workflows for labels verification and releases notes (#391) @insspb
    • Github Actions CI/CD tests for project (#394) @insspb
    • Added label_modifier option on ReferenceField conversion (#348) @sebbekarlsson
    • Add custom message option for get_or_404 function (#361) @insspb
    • Add DateField support #405 @qisoster (#416) @insspb
    • Add Codeclimate and codecov to Github CI/CD (#396) @insspb

    Changed

    • Travis updated to use focal ubuntu images (#419) @insspb
    • Сlarify new URI style setting proccesing regarding db. (#329) @Irisha
    • Update setup.py: Remove setup_requirements (#380) @9nix00
    • Update installation documentation (#378) @onlinejudge95
    • Tests refactoring. Moving to pytest engine (#397) @insspb
    • Replace general Exception raising with more detailed type (#398) @insspb
    • Remove six dependency (Drop Python 2.7 compatibility) (#393) @insspb
    • Changed: Imports order, drop imports for python 2.7 (#374) @insspb
    • Allow keep config in MongoEngine object until init_app (#401) @insspb

    Fixed

    • Pass 'places' to 'precision' in wtfForms DecimalField convertation (#343) @PeterKharchenko
    • ListField documentation extended with min_entries info (#353) @molitoris
    • Fixed: docstrings typo in flask_mongoengine/operation_tracker.py (#383) @timgates42
    • Fix formdata default value on ModelForm <-> FlaskForm inheritance. (#387) @sdayu

    This release is made by wonderful contributors:

    @9nix00, @Irisha, @PeterKharchenko, @alysivji, @insspb, @itsnauman, @martinhanzik, @molitoris, @noirbizarre, @onlinejudge95, @qisoster, @sdayu, @sebbekarlsson, @timgates42, @touilleMan and @wojcikstefan

    Source code(tar.gz)
    Source code(zip)
  • v0.9.2(Feb 16, 2017)

  • v0.9.1(Feb 16, 2017)

    • Fixed setup.py for various platforms (#298).
    • Added Flask-WTF v0.14 support (#294).
    • MongoEngine instance now holds a reference to a particular Flask app it was initialized with (#261).
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0(Dec 12, 2016)

  • v0.8.2(Dec 11, 2016)

  • 0.8.1(Nov 30, 2016)

  • 0.8(Aug 11, 2016)

    • Dropped MongoEngine 0.7 support
    • Added MongoEngine 0.10 support
    • Added PyMongo 3 support
    • Added Python3 support up to 3.5
    • Allowed empying value list in SelectMultipleField
    • Fixed paginator issues
    • Use InputRequired validator to allow 0 in required field
    • Made help_text Field attribute optional
    • Added "radio" form_arg to convert field into RadioField
    • Added "textarea" form_arg to force conversion into TextAreaField
    • Added field parameters (validators, filters...)
    • Fixed 'False' connection settings ignored
    • Fixed bug to allow multiple instances of extension
    • Added MongoEngineSessionInterface support for PyMongo's tz_aware option
    • Support arbitrary primary key fields (not "id")
    • Configurable httponly flag for MongoEngineSessionInterface
    • Various bugfixes, code cleanup and documentation improvements
    • Move from deprecated flask.ext.* to flask_* syntax in imports
    • Added independent connection handler for FlaskMongoEngine
    • All MongoEngine connection calls are proxied via FlaskMongoEngine connection handler
    • Added backward compatibility for settings key names
    • Added support for MongoMock and temporary test DB
    • Fixed issue with multiple DB support
    • Various other bugfixes
    Source code(tar.gz)
    Source code(zip)
  • 0.7.5(Jan 9, 2016)

    • Changes to resolve MongoEngine deprecated help_text and safe attribute issues.
    • Minor PyPy3 compatibility issue with operation tracker resolved.
    • SESSION_TTL setting is accepted via app config to set and override session timeout default.
    • Provided RadioField component via model form.
    • Other enhancements
    Source code(tar.gz)
    Source code(zip)
Owner
MongoEngine
MongoEngine
Pydantic model support for Django ORM

Pydantic model support for Django ORM

Jordan Eremieff 318 Jan 3, 2023
Easy-to-use data handling for SQL data stores with support for implicit table creation, bulk loading, and transactions.

dataset: databases for lazy people In short, dataset makes reading and writing data in databases as simple as reading and writing JSON files. Read the

Friedrich Lindenberg 4.2k Dec 26, 2022
The ormar package is an async mini ORM for Python, with support for Postgres, MySQL, and SQLite.

python async mini orm with fastapi in mind and pydantic validation

null 1.2k Jan 5, 2023
SQLAlchemy support for aiohttp.

aiohttp-sqlalchemy SQLAlchemy 1.4 / 2.0 support for AIOHTTP. The library provides the next features: initializing asynchronous sessions through a midd

Ruslan Ilyasovich Gilfanov 5 Dec 11, 2022
A single model for shaping, creating, accessing, storing data within a Database

'db' within pydantic - A single model for shaping, creating, accessing, storing data within a Database Key Features Integrated Redis Caching Support A

Joshua Jamison 178 Dec 16, 2022
Python 3.6+ Asyncio PostgreSQL query builder and model

windyquery - A non-blocking Python PostgreSQL query builder Windyquery is a non-blocking PostgreSQL query builder with Asyncio. Installation $ pip ins

null 67 Sep 1, 2022
MongoEngine flask extension with WTF model forms support

Flask-MongoEngine Info: MongoEngine for Flask web applications. Repository: https://github.com/MongoEngine/flask-mongoengine About Flask-MongoEngine i

MongoEngine 815 Jan 3, 2023
Fully Automated YouTube Channel ▶️with Added Extra Features.

Fully Automated Youtube Channel ▒█▀▀█ █▀▀█ ▀▀█▀▀ ▀▀█▀▀ █░░█ █▀▀▄ █▀▀ █▀▀█ ▒█▀▀▄ █░░█ ░░█░░ ░▒█░░ █░░█ █▀▀▄ █▀▀ █▄▄▀ ▒█▄▄█ ▀▀▀▀ ░░▀░░ ░▒█░░ ░▀▀▀ ▀▀▀░

sam-sepiol 249 Jan 2, 2023
Flask-Potion is a RESTful API framework for Flask and SQLAlchemy, Peewee or MongoEngine

Flask-Potion Description Flask-Potion is a powerful Flask extension for building RESTful JSON APIs. Potion features include validation, model resource

DTU Biosustain 491 Dec 8, 2022
Flask-Potion is a RESTful API framework for Flask and SQLAlchemy, Peewee or MongoEngine

Flask-Potion Description Flask-Potion is a powerful Flask extension for building RESTful JSON APIs. Potion features include validation, model resource

DTU Biosustain 484 Feb 3, 2021
The best way to have DRY Django forms. The app provides a tag and filter that lets you quickly render forms in a div format while providing an enormous amount of capability to configure and control the rendered HTML.

django-crispy-forms The best way to have Django DRY forms. Build programmatic reusable layouts out of components, having full control of the rendered

null 4.6k Jan 5, 2023
The best way to have DRY Django forms. The app provides a tag and filter that lets you quickly render forms in a div format while providing an enormous amount of capability to configure and control the rendered HTML.

django-crispy-forms The best way to have Django DRY forms. Build programmatic reusable layouts out of components, having full control of the rendered

null 4.6k Dec 31, 2022
The best way to have DRY Django forms. The app provides a tag and filter that lets you quickly render forms in a div format while providing an enormous amount of capability to configure and control the rendered HTML.

django-crispy-forms The best way to have Django DRY forms. Build programmatic reusable layouts out of components, having full control of the rendered

null 4.6k Jan 7, 2023
Writeups for wtf-CTF hosted by Manipal Information Security Team as part of Techweek2021- INCOGNITO

wtf-CTF_Writeups Table of Contents Table of Contents Crypto Misc Reverse Pwn Web Crypto wtf_Bot Author: Madjelly Join the discord server!You know how

null 6 Jun 7, 2021
An open source Flask extension that provides JWT support (with batteries included)!

Flask-JWT-Extended Features Flask-JWT-Extended not only adds support for using JSON Web Tokens (JWT) to Flask for protecting views, but also many help

Landon Gilbert-Bland 1.4k Jan 4, 2023
An extension to add support of Plugin in Flask.

An extension to add support of Plugin in Flask.

Doge Gui 31 May 19, 2022
Restful API framework wrapped around MongoEngine

Flask-MongoRest A Restful API framework wrapped around MongoEngine. Setup from flask import Flask from flask_mongoengine import MongoEngine from flask

Close 525 Jan 1, 2023
Restful API framework wrapped around MongoEngine

Flask-MongoRest A Restful API framework wrapped around MongoEngine. Setup from flask import Flask from flask_mongoengine import MongoEngine from flask

Close 505 Feb 11, 2021
Restful API framework wrapped around MongoEngine

Flask-MongoRest A Restful API framework wrapped around MongoEngine. Setup from flask import Flask from flask_mongoengine import MongoEngine from flask

Close 525 Jan 1, 2023
Median and percentile for Django and MongoEngine

Tailslide Median and percentile for Django and MongoEngine Supports: PostgreSQL SQLite MariaDB MySQL (with an extension) SQL Server MongoDB ?? Uses na

Andrew Kane 4 Jan 15, 2022