diff --git a/docs/_build/doctrees/advanced.doctree b/docs/_build/doctrees/advanced.doctree index 69bcc77ee..b7cd6bced 100644 Binary files a/docs/_build/doctrees/advanced.doctree and b/docs/_build/doctrees/advanced.doctree differ diff --git a/docs/_build/doctrees/api.doctree b/docs/_build/doctrees/api.doctree index f9287080b..fe9a59f96 100644 Binary files a/docs/_build/doctrees/api.doctree and b/docs/_build/doctrees/api.doctree differ diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index e637207a7..d4f6976f2 100644 Binary files a/docs/_build/doctrees/environment.pickle and b/docs/_build/doctrees/environment.pickle differ diff --git a/docs/_build/doctrees/quickcharts.doctree b/docs/_build/doctrees/quickcharts.doctree index 42762c72e..781ea1c13 100644 Binary files a/docs/_build/doctrees/quickcharts.doctree and b/docs/_build/doctrees/quickcharts.doctree differ diff --git a/docs/_build/doctrees/quickfiles.doctree b/docs/_build/doctrees/quickfiles.doctree index 79a77d1e8..f8b4cbc30 100644 Binary files a/docs/_build/doctrees/quickfiles.doctree and b/docs/_build/doctrees/quickfiles.doctree differ diff --git a/docs/_build/doctrees/security.doctree b/docs/_build/doctrees/security.doctree index c075266e4..b8964222c 100644 Binary files a/docs/_build/doctrees/security.doctree and b/docs/_build/doctrees/security.doctree differ diff --git a/docs/_build/doctrees/versionmigration.doctree b/docs/_build/doctrees/versionmigration.doctree index 0bf943313..86aff49fa 100644 Binary files a/docs/_build/doctrees/versionmigration.doctree and b/docs/_build/doctrees/versionmigration.doctree differ diff --git a/docs/_build/doctrees/versions.doctree b/docs/_build/doctrees/versions.doctree index 7c5557373..dbebce7a0 100644 Binary files a/docs/_build/doctrees/versions.doctree and b/docs/_build/doctrees/versions.doctree differ diff --git a/docs/_build/html/_images/login_db.png b/docs/_build/html/_images/login_db.png index 06b742735..800af5806 100644 Binary files a/docs/_build/html/_images/login_db.png and b/docs/_build/html/_images/login_db.png differ diff --git a/docs/_build/html/_sources/quickfiles.txt b/docs/_build/html/_sources/quickfiles.txt index 83cb2354b..d37f8f8de 100644 --- a/docs/_build/html/_sources/quickfiles.txt +++ b/docs/_build/html/_sources/quickfiles.txt @@ -1,7 +1,8 @@ Model Views with Files and Images ================================= -You can implement views with images or files embedded on the model's definition +You can implement views with images or files embedded on the model's definition. You can do it using SQLAlchemy or +MongoDB (MongoEngine). When using SQLAlchemy, files and images are saved on the filesystem, on MongoDB on the db (GridFS). Define your model (models.py) ----------------------------- @@ -14,22 +15,44 @@ Define your model (models.py) class Person(Model): id = Column(Integer, primary_key=True) name = Column(String(150), unique = True, nullable=False) - photo = Column(ImageColumn, nullable=False ) + photo = Column(ImageColumn(size=(300, 300, True), thumbnail_size=(30, 30, True))) def photo_img(self): im = ImageManager() if self.photo: - return Markup('Photo') + return Markup('Photo') else: - return Markup('Photo') - -Create an additional method in this case *photo_img*, to inject your own custom HTML, to show your saved images. In this example the customized method is showing the images, and linking them with the show view. + return Markup('Photo') + + def photo_img_thumbnail(self): + im = ImageManager() + if self.photo: + return Markup('Photo') + else: + return Markup('Photo') -Later reference this method like it's a column on your view. + +Create two additional methods in this case *photo_img* and *photo_img_thumbnail*, to inject your own custom HTML, +to show your saved images. In this example the customized method is showing the images, and linking them with the show view. +Notice how the methods are calling *get_url* and *get_url_thumbnail* from ImageManager, these are returning the +url for the images, each image is saved on the filesystem using the global config **IMG_UPLOAD_FOLDER**. +Each image will have two files with different sizes, images are saved as _sep_, and _sep__thumb .. note:: The "ImageColumn" type, is an extended type from Flask-AppBuilder. +Later reference this method like it's a column on your view. + +To implement image or file support using GridFS from MongoDB is even easier, take a look at the example: + +https://github.com/dpgaspar/Flask-AppBuilder/tree/master/examples/mongoimages + Define your Views (views.py) ---------------------------- @@ -43,15 +66,18 @@ Define your Views (views.py) list_widget = ListThumbnail - label_columns = {'name':'Name','photo':'Photo','photo_img':'Photo'} - list_columns = ['photo_img', 'name'] + label_columns = {'name':'Name','photo':'Photo','photo_img':'Photo', 'photo_img_thumbnail':'Photo'} + list_columns = ['photo_img_thumbnail', 'name'] show_columns = ['photo_img','name'] -Notice that we are overriding the *list_widget*, the widget that is normally used by ModelView. This will display a thumbnail list, excellent for displaying images. +We are overriding the *list_widget*, the widget that is normally used by ModelView. +This will display a thumbnail list, excellent for displaying images. -We are not using the *image* column but the method *photo_img* we have created. This method will display the image and link it to the show view. +We're not using the *image* column but the methods *photo_img* and *photo_img_thumbnail* we have created. +These methods will display the images and link them to show view. -And that's it! images will be saved on the server. Their file names will result in the concatenation of UUID with their original name. They will be resized for optimization. +And that's it! images will be saved on the server. +Their file names will result in the concatenation of UUID with their original name. They will be resized for optimization. .. note:: You can define image resizing using configuration key *IMG_SIZE* diff --git a/docs/_build/html/_sources/versionmigration.txt b/docs/_build/html/_sources/versionmigration.txt index d7391b9c2..42eabc12f 100644 --- a/docs/_build/html/_sources/versionmigration.txt +++ b/docs/_build/html/_sources/versionmigration.txt @@ -6,11 +6,11 @@ Migrating from 1.2.X to 1.3.X There are some breaking features: -1 - Security models have changed, user's can have multiple roles, not just one. So you have to migrate you db. +1 - Security models have changed, user's can have multiple roles, not just one. So you have to upgrade your db. - The security models schema have changed. - If you are using sqlite, mysql or pgsql, use the following procedure: + If you are using sqlite, mysql, pgsql, mssql or oracle, use the following procedure: 1 - *Backup your DB*. @@ -18,24 +18,14 @@ There are some breaking features: 3 - Issue the following commands, on your project folder where config.py exists:: - cd /your-main-project-folder/ - wget https://raw.github.com/dpgaspar/Flask-AppBuilder/master/bin/migrate_db_1.3.py - python migrate_db_1.3.py + $ cd /your-main-project-folder/ + $ fabmanager upgrade-db 4 - Test and Run (if you have a run.py for development) :: + $ fabmanager run - python run.py - - If not (DB is not sqlite, mysql or pgsql), you will have to alter the schema your self. use the following procedure: - - 1 - *Backup your DB*. - - 2 - If you haven't already, upgrade to flask-appbuilder 0.7.0. - - 3 - issue the corresponding DDL commands to: - - ALTER TABLE ab_user MODIFY COLUMN password VARCHAR(256) + For **sqlite** you'll have to drop role_id columns and FK yourself. follow the script instructions to finish the upgrade. 2 - Security. If you were already extending security, this is even more encouraged from now on, but internally many things have diff --git a/docs/_build/html/_sources/versions.txt b/docs/_build/html/_sources/versions.txt index 1ef218f94..3797cbafc 100644 --- a/docs/_build/html/_sources/versions.txt +++ b/docs/_build/html/_sources/versions.txt @@ -22,10 +22,10 @@ Improvements and Bug fixes on 1.3.0 - New, support for many to many relations on ModelView related_view. - New, AppBuilder.add_link supports endpoint names on href parameter, internally will try to use url_for(href). - Fix, Zero division catch on aggregate average function. +- New, added form validators for field min and max length. +- New, Image size can be configured per column, ImageColumn support size and thumbnail size parameters. - (TODO) - fabmanager create-app para SQLA e MongoDB com diferentes esqueletos. - (TODO) - fabmanager support for factory apps. -- (TODO) - DOCS (Security, custom, templates). -- (TODO) - criar exemplo de utilização de base_template. Improvements and Bug fixes on 1.2.1 ----------------------------------- diff --git a/docs/_build/html/api.html b/docs/_build/html/api.html index f515d88c7..818215614 100644 --- a/docs/_build/html/api.html +++ b/docs/_build/html/api.html @@ -1933,8 +1933,8 @@

Extra Columns
-class flask.ext.appbuilder.models.mixins.ImageColumn(*args, **kwargs)
-

Extends SQLAlchemy to support and mostly identify a Image Column

+class flask.ext.appbuilder.models.mixins.ImageColumn(thumbnail_size=(20, 20, True), size=(100, 100, True), **kw) +

Extends SQLAlchemy to support and mostly identify an Image Column

impl
diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv index 5211683d8..e1cbbf6d2 100644 Binary files a/docs/_build/html/objects.inv and b/docs/_build/html/objects.inv differ diff --git a/docs/_build/html/py-modindex.html b/docs/_build/html/py-modindex.html index 2f0f607c3..401c0365e 100644 --- a/docs/_build/html/py-modindex.html +++ b/docs/_build/html/py-modindex.html @@ -89,7 +89,7 @@

Python Module Index

    - flask.ext.appbuilder.baseviews + flask.ext.appbuilder.baseviews @@ -119,7 +119,7 @@

Python Module Index

    - flask.ext.appbuilder.security.decorators + flask.ext.appbuilder.security.decorators diff --git a/docs/_build/html/quickfiles.html b/docs/_build/html/quickfiles.html index f94b7a544..2b3194ef5 100644 --- a/docs/_build/html/quickfiles.html +++ b/docs/_build/html/quickfiles.html @@ -61,7 +61,8 @@

Navigation

Model Views with Files and Images

-

You can implement views with images or files embedded on the model’s definition

+

You can implement views with images or files embedded on the model’s definition. You can do it using SQLAlchemy or +MongoDB (MongoEngine). When using SQLAlchemy, files and images are saved on the filesystem, on MongoDB on the db (GridFS).

Define your model (models.py)

from flask.ext.appbuilder import Model
@@ -70,22 +71,41 @@ 

Define your model (models.py)class Person(Model): id = Column(Integer, primary_key=True) name = Column(String(150), unique = True, nullable=False) - photo = Column(ImageColumn, nullable=False ) + photo = Column(ImageColumn(size=(300, 300, True), thumbnail_size=(30, 30, True))) def photo_img(self): im = ImageManager() if self.photo: - return Markup('<a href="' + url_for('PersonModelView.show',pk=str(self.id)) + '" class="thumbnail"><img src="' + im.get_url(self.photo) + '" alt="Photo" class="img-rounded img-responsive"></a>') + return Markup('<a href="' + url_for('PersonModelView.show',pk=str(self.id)) +\ + '" class="thumbnail"><img src="' + im.get_url(self.photo) +\ + '" alt="Photo" class="img-rounded img-responsive"></a>') else: - return Markup('<a href="' + url_for('PersonModelView.show',pk=str(self.id)) + '" class="thumbnail"><img src="//:0" alt="Photo" class="img-responsive"></a>') + return Markup('<a href="' + url_for('PersonModelView.show',pk=str(self.id)) +\ + '" class="thumbnail"><img src="//:0" alt="Photo" class="img-responsive"></a>') + + def photo_img_thumbnail(self): + im = ImageManager() + if self.photo: + return Markup('<a href="' + url_for('PersonModelView.show',pk=str(self.id)) +\ + '" class="thumbnail"><img src="' + im.get_url_thumbnail(self.photo) +\ + '" alt="Photo" class="img-rounded img-responsive"></a>') + else: + return Markup('<a href="' + url_for('PersonModelView.show',pk=str(self.id)) +\ + '" class="thumbnail"><img src="//:0" alt="Photo" class="img-responsive"></a>')

-

Create an additional method in this case photo_img, to inject your own custom HTML, to show your saved images. In this example the customized method is showing the images, and linking them with the show view.

-

Later reference this method like it’s a column on your view.

+

Create two additional methods in this case photo_img and photo_img_thumbnail, to inject your own custom HTML, +to show your saved images. In this example the customized method is showing the images, and linking them with the show view. +Notice how the methods are calling get_url and get_url_thumbnail from ImageManager, these are returning the +url for the images, each image is saved on the filesystem using the global config IMG_UPLOAD_FOLDER. +Each image will have two files with different sizes, images are saved as <uuid>_sep_<filename>, and <uuid>_sep_<filename>_thumb

Note

The “ImageColumn” type, is an extended type from Flask-AppBuilder.

+

Later reference this method like it’s a column on your view.

+

To implement image or file support using GridFS from MongoDB is even easier, take a look at the example:

+

https://github.com/dpgaspar/Flask-AppBuilder/tree/master/examples/mongoimages

-

Notice that we are overriding the list_widget, the widget that is normally used by ModelView. This will display a thumbnail list, excellent for displaying images.

-

We are not using the image column but the method photo_img we have created. This method will display the image and link it to the show view.

-

And that’s it! images will be saved on the server. Their file names will result in the concatenation of UUID with their original name. They will be resized for optimization.

+

We are overriding the list_widget, the widget that is normally used by ModelView. +This will display a thumbnail list, excellent for displaying images.

+

We’re not using the image column but the methods photo_img and photo_img_thumbnail we have created. +These methods will display the images and link them to show view.

+

And that’s it! images will be saved on the server. +Their file names will result in the concatenation of UUID with their original name. They will be resized for optimization.

This Page

diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 5b3a08e33..c0cbe47cb 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:42,terms:{validators_column:[1,7],col_typ:1,four:22,"catch":17,dirnam:18,personal_celphon:[15,6],whose:13,under:[17,11],list_block:17,fieldset:[15,1,17],myregisteruserdbview:10,head_css:9,"utiliza\u00e7\u00e3o":17,affect:17,cmd:2,upload:[20,8,17],factori:[1,17],edit_column:[15,17,5,1,22,7],direct:[],street:15,aggreg:[4,22,1,17],myinlineview:21,even:[3,16,12,6,21,7],childmodel:1,update_user_auth_stat:1,mongoengin:[6,15,1,8,20],migrate_db_1:12,migrate_db_0:12,"new":[9,3,16,10,11,15,17,12,1,22,8,7],sqlalchemy_bind:14,metadata:5,widget:[],app_icon:[1,8,17],here:[9,15,0,21],path:[9,18,12,1,21,8,14],dry:20,intead:17,datetim:[12,4,5,17],groupmodelview:[15,0,6,13,22,7],permit:17,studi:22,unemployed_perc:[4,1],succesfulli:10,total:[4,22],highli:[20,16],describ:[18,5],would:[15,5],tail:11,call:[9,17,11,0,1,2],typo:17,type:[15,17,4,19,2,8],tell:[9,10,11,5,6,0,21,13,22],benefits_employe:5,add_separ:[22,1,5,21],relat:[],yahoo:22,notic:[15,19,11,1,4,18,12,6,21],warn:[1,17],phone:[1,21],show_column:[15,19,1,5],must:[15,16,11,4,17,12,1,21,6,2,8,7],join:[12,18,14,17],setup:[],work:[15,16,11,17,12,13,2],registeruseroidview:1,rework:[22,17],root:[13,14,17],form_titl:[1,10,11],add_form:[9,1,7,17],overrid:[9,15,10,11,18,17,19,1,21,6,22,2,7],show_fieldset:[6,15,22,1],smtp:10,filterequ:[12,1,17],auth_ldap_search:8,want:[9,15,11,4,5,1,0,21,13,22,7],chart_titl:[4,1,21],everi:[18,17],end:[9,5],classifi:15,how:[],env:16,answer:[],verifi:22,config:[],updat:[15,11,1,17,5,6,0,13],adit:1,chines:[13,17],after:[9,15,10,17,12,1,22],befor:[9,4,1,15,12],wrong:17,averag:[4,1,17],classmethod:17,bootstrap:[9,17,1,20,21,8],authremoteuserview:1,query_factori:7,exclud:17,receiv:[10,17],environ:[16,22,20,8],permission_nam:[22,1,17],charview:15,origin:[9,19,1],auth_role_admin:[8,17],becaus:[9,16,11,4,17,5,13,14],fab:[9,16],countrygroupbychartview:[4,1],flexibl:[7,17],uuid:[19,1,17],img:19,"__class__":9,better:[3,21,16,17],them:[9,15,11,4,5,12,1,0,21,13,22,8,19,14],thei:[9,17,4,11,5,19,2],authdb:1,safe:17,passwordformail:10,"break":[12,16,17],you_css_fil:[],jinja2:[9,17,1,21,13,20,7],choic:17,mytabl:[1,7],grammar:[4,1],chartwidget:1,debug:[18,6],oblig:[12,15,2],side:[21,8,17],group_by_label:[4,1],mean:13,set_index_view:17,sec_view:22,esqueleto:17,manufacture_id:1,generalview:[12,17],ommit:1,extract:[13,21],edit_templ:[9,1,21],goe:[9,20],basedir:[12,18,14],content:[],adapt:17,navig:[9,1,5,11],small:[9,12],search_form:1,statschartview:[4,1],pagin:[15,17],onto:12,render:[9,11,12,1,21,13],independ:[15,17],loginmanag:[12,1,17],restrict:1,unlik:16,alreadi:[15,4,5,12,21,2,8],massiv:0,primari:17,add_form_extra_field:[1,7,17],top:[9,3,21,1,17],sometim:[1,11],exampleview:7,master:[15,19,11,4,17,12,1,21,2,20],too:16,john:11,filternotequ:17,boostrap:17,tool:16,template_fold:1,dbmongo:[6,1],provid:[10,17,4,11,1,13,20],tree:[15,11,4,19,21,2],label_column:[15,1,4,19,6,21,13],project:[15,3,16,11,12,20,21,13],my_col_to_be_ord:7,runner:[],mind:20,raw:12,incompat:16,simplifi:[22,17],usernam:[16,10,17,1,22,8],sqlinterfac:17,security_cleanup:[22,1,17],don:[12,1,20],enviro:17,doc:[12,2,17],flow:20,doe:[1,17],declar:[9,12,18,15,17],passwordfield:[],sum:[4,1],dot:[15,17],add_fieldset:[15,1],"__str__":6,syntax:15,bootwatch:[8,17],registeruser_view:1,layout:21,field2:[7,11],menu:[],explain:22,field1:11,apach:22,theme:[],ldap:[],"__call__":7,get_model_rel:17,folder:[15,11,1,5,12,6,21,8],department_id:5,get_us:[1,7],edit_titl:1,report:[3,17],youtub:16,bar:9,changeabl:12,"public":[15,20,10,11,1,18,6,22,8],reload:17,baseregisterus:[],registerview:10,mandatori:[1,8,11],result:[15,19],respons:[19,17,22,1,11],fail:[22,17],themselv:10,subject:10,brazil:[13,17],hopefulli:1,databas:[],psmodel:2,myview:[12,21,1,7,11],pybabel:13,approach:22,attribut:[12,1,17],accord:10,extend:[9,19,16,11,12,21],extens:[15,18,17],extent:[],"__unicode__":6,notat:[15,17],my_show_templ:7,protect:[22,11],easi:[9,15,16,10,17,11,20],as_unicod:11,unemploy:[4,1],against:[22,1],cog:11,logic:5,countri:[13,4,1,8],login:[15,3,16,10,17,4,18,12,1,22],del_permission_rol:1,com:[15,19,10,11,4,17,12,1,21,2,14],col:[4,22,1,17],asctim:[],myformview:11,filecolumn:[1,17],height:[4,8],guid:17,assum:[21,1,5,17],duplic:17,three:[],been:16,find_us:1,trigger:15,interest:4,basic:[15,18,22,10],add_contact:9,argument:[],child:[4,18,1,21],upload_fold:[8,17],ugli:[],resetpasswordview:1,properti:[],remv:17,calcul:4,useroidmodelview:[22,1],seven:13,some_col:1,deliv:20,queryselectmultiplefield:17,kwarg:[15,1,7],cond:8,linechart:[4,1],perform:[1,17],make:[9,10,4,5,13,7],init_app:[12,17],listthumbnail:[19,21],complex:[2,5,21],complet:[21,10,17],list_list:9,projectfil:[1,21],recaptcha_public_kei:10,hand:17,rais:17,formwidget:1,babel_default_local:[16,8],add_widget:1,kept:[12,22],x_col2:1,post_add:1,inherit:[15,10,11,1,4,17,12,6,21,22],contact:[],bettwen:17,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],chart_typ:[4,1,21],everyth:[15,4,5,1,21,6,22,2,20],left:[21,1,8,17],identifi:[4,1],just:[9,15,16,10,11,4,18,0,12,1,21,6,22,2,7],photo:19,via:[22,20,17],human:[10,5],yet:[15,1,16],languag:[13,16,20,8,17],group_bi:1,directchart:17,img_upload_url:[8,17],modelview:[],els:[19,4,0],save:[19,1,17],edit_form_extra_field:[1,7,17],applic:[],mayb:16,preserv:[22,17],recaptcha:10,birth:[4,22,21],myotherview:12,modeview:0,specif:[9,22,1],employeeview:[7,5],unnecessari:17,underli:15,www:[1,21],right:21,old:22,percentag:4,born:4,intern:[12,21,17],csrf_enabl:18,indirect:8,subclass:[2,1,17],when:[9,15,16,10,11,17,5,1,21,22,2,8],datetimepick:20,listitem:[21,17],register_us:[],localhost:[16,14,11],plu:[1,21],aggregate_sum:[4,1],colleg:4,post:[12,17,1,5,11],"super":[9,2,7],chapter:[15,6,7,5,11],postgresql:17,dashboard:4,slightli:5,del_view_menu:1,yourappemail:10,produc:4,departmentview:5,add_form_query_rel_field:[1,7,17],"float":[4,17],encod:[13,17],contactmodelview:[9,15,1,4,0,6,21,13,22,7],git:21,wai:[9,15,16,10,1,5,12,6,14,21,22,8,7],support:[15,17,4,6,21,13,20,14],why:12,avail:[7,5,21],width:[4,1,8],"_flt_":17,your_root_project_path:21,add_column:[15,17,5,1,22,7],overhead:22,fork:[13,16],medium:8,forc:17,sqlalchemi:[15,16,17,20,18,5,12,1,6,22,2,8,14],authdbview:1,"true":[15,19,10,4,18,5,12,1,14,6,22,2,8,7],reset:[22,1,16,17],absent:1,attr:17,reset_password:1,featur:[3,16,17,0,12,1,2],model3:14,model2:14,"abstract":15,exsit:1,exist:[15,17,5,12,1,21,22,8],check:[22,1,5],oauth_handl:1,readonli:[1,7,5],encrypt:22,panel_end:9,excel:[15,19,16,10],role:[],test:[12,17,1,16,11],jonh:[],category_icon:[6,13,1,15,11],intend:[2,20],error_messag:10,sql:17,personmodelview:19,femal:15,longer:[1,17],time:[16,10,11,4,17,5,1,21,6,22,2,20],backward:16,dpgaspar:[15,19,11,4,12,21,2],myotherrelatedview:1,concept:11,skip:11,global:[1,10],extra_field:1,imagecolumn:[19,1,17],show_templ:[1,7,5,21],created_by_fk:[12,17],row:[9,1],hold:[15,10,4,1,22,2,8],depend:[1,16],flask:[],render_field:17,flash:[9,17,11],readabl:17,create_db:[12,17],isinst:0,sourc:[],string:[15,19,11,4,5,12,1,13,22,8,14],email_templ:10,show_widget:1,add_view_no_menu:[21,1,5,11],administr:7,did:5,iter:[],item:[17,4,11,0,1,22],your_project:9,quick:[],div:21,round:19,add_view_menu:1,prevent:[22,17],has_access:[17,22,1,11],method2:11,port:18,page_s:[1,17],muldelet:[22,0],current:[17,1,11],registeruserdbview:[1,10],employeehistoryview:5,redirect:[22,17,0,11],deriv:11,dropdown:[20,17],auth_ldap_bind_field:8,gener:[],modif:[22,1],address:[6,15,1,8,5],box:15,serverdisktyp:21,behav:[1,10],user_view:1,overriden:1,month_year:4,my_sql2:14,pillow:16,my_sql1:14,useful:[],extra:[],modul:[12,1,17],authoauthview:1,instal:[],sqllite:[6,8],memori:12,todai:5,live:[15,3,4],handler:1,criteria:4,scope:9,ppid:2,checkout:[15,16],minim:[],peopl:8,visual:4,templat:[],obj:1,easiest:10,prepar:0,uniqu:[15,17,1,4,5,19,6,14,7],can:[9,15,16,10,11,14,4,18,17,5,12,13,1,0,21,6,22,2,20,19,7],panel_begin:9,email_subject:10,purpos:1,select2:[9,12,20,5,17],boilerpl:16,heart:2,search_column:[2,4,21,1,17],levelnam:[],critic:9,auth_ldap_lastname_field:8,mail_usernam:10,occur:[22,5],alwai:[17,21,1,22,11],multipl:[],your_css_fil:9,somevalu:7,map:[8,11],product:[9,1],birthdai:[6,4,1,15,21],myothermodelview:[1,21],clone:[],mac:16,mymethod:22,date:[15,4,7,5,17],data:[],grow:16,base_filt:[4,1,7,17],practic:10,favorit:8,"_sep_":1,get_file_orginal_nam:17,inform:[15,10,0],preced:4,callabl:17,defaultview:17,ab_us:12,tty:2,gradual:15,get_related_model:17,approv:17,still:[6,20,2,16,7],mainli:[],dynam:17,group:[],accordion:[9,15,17],mail:[8,10],find_permission_view_menu:1,main:[9,12,20],non:[15,22,1,17],my_field1:7,my_field2:7,chart_widget:1,col2:4,col3:4,initi:[],col1:4,now:[15,16,11,4,17,5,12,6,22,14],name:[9,15,16,11,1,4,17,5,12,6,14,21,13,22,8,19,7],revers:[22,21,17],separ:[13,21,1,17],full_nam:[7,5],januari:4,collaps:17,compil:13,domain:[14,17],masterview:1,replac:[9,17],individu:7,year:[4,1,17],happen:21,shown:[9,10,17,5,1,22,8],aggregate_count:[4,1],space:15,list_item:17,resetmypasswordview:1,bla:21,correct:[12,6,17],uwsgi:17,integr:[15,20,5,11],earlier:[22,17],migrat:[],envelop:[15,1,4,6,21,13],orm:[15,22,5],add_titl:1,render_templ:[1,11],thing:[12,4],place:[12,8,21],principl:[20,11],imposs:17,end_dat:5,first:[9,15,16,10,11,4,17,5,14,21,13,22,2,8,7],oper:11,directli:[12,20],onc:16,my_widget_list:21,yourself:20,fast:15,spanish:[13,17],open:[15,16,5,12,6,21,22,2,8],size:[1,8,17],given:[22,21],max_length:6,userinfo:17,"short":2,mostli:1,than:[20,17],serv:[9,15],wide:9,param1:11,seri:[4,1,17],pre:[17,1,5,11],sai:[9,4],ani:[15,16,11,17,12,1,21,22,2,20,7],add_view:[15,11,1,4,5,12,6,21,13,22],engin:[12,1],datepick:20,list_search:9,note:[15,1,10],ideal:9,take:[15,10,11,4,18,5,19,6,21,13,22,8,7],advis:[15,16,18,21,22,8],login_view:12,"_add_object":2,genapp:13,begin:5,sure:10,pre_add:1,normal:[15,16,19,6,2,20],track:5,beta:[],employeehistori:5,icon:[15,20,11,1,4,17,5,6,21,13,8],later:[19,10],drive:2,quantiti:21,create_al:[15,5],basemixin:[1,17],show:[],german:[13,17],painlessli:[22,20],my_index:21,permiss:[],hack:[12,17],filterstartswith:[12,1,7],onli:[9,20,16,11,1,17,6,21,22,8,7],explicitli:[],activ:[22,16,10,17],behind:1,userdbmodelview:[12,22,1],dict:[13,17],over:[9,1],xcol:17,variou:[20,8,17],get:[9,16,10,11,17,1,2],secondari:5,search_widget:[1,17],url_for:[9,19,1,17],requir:[],thumbnail:[19,20,17],where:[9,15,10,4,12,1,21,22,14],summari:[6,15,1],send_email:[],calendar:[4,17],quickimag:19,review:[17,11],enumer:15,label:[15,17,4,11,1,21,13,20],enough:15,appbuild:[],between:5,"import":[9,15,10,11,4,18,17,5,12,13,1,0,21,6,22,2,8,19,7],parent:[1,11],screen:10,recaptcha_private_kei:10,stime:2,uncondition:1,base_templ:[9,17,1,11],come:[21,17],relative_view:17,similar:10,can_show:[2,1,7],mani:[],app_them:[1,8,21],equalto:7,endcal:9,sess:2,folow:[13,21],rebuild:17,direct_column:[4,1],changed_by_fk:[12,17],xpto:1,model1:[12,14],bypass:1,findal:2,former:12,"case":[15,17,4,19,22,7],secret_kei:18,can_list:[2,15,1,7],cast:17,invok:[12,1,17],bootswatch:[20,21],"__init__":[9,15,1,12,6,22],acess:1,develop:[9,3,16,11,15,18,12,20,21],author:22,genericcolumn:[2,1],same:[9,15,11,1,4,17,5,6,21,22],category_label:[13,21,1,17],html:[9,10,11,17,5,19,1,21,13,7],document:[4,6,11],form_fieldset:1,finish:10,oid:[12,1,17],someon:15,submenu:[21,1,17],filterequalfunct:[12,1,7],choos:[4,8,21],markup:19,without:[9,15,16,17,5,1,21],auth_user_registr:[8,10,17],model:[],persongeneralview:12,execut:[13,1,16,5],stat_col_2:1,stat_col_3:1,stat_col_1:1,rest:15,auth_user_registration_rol:[8,10],ldapserv:8,versu:4,baseapp:[12,17],except:[18,2,17],param:[1,11],treatment:15,pot:13,authoidview:[1,17],read:[12,22],get_redirect:[22,1,0],mygenericmodel:1,grid:1,whth:[],filterrel:[12,17],earphon:[12,13],integ:[15,19,17,4,5,12,1,22,14],server:[16,10,17,18,19,21,22,8],benefit:5,nose:17,userldapmodelview:[22,1],output:[2,1,17],manag:[16,10,17,1,5,12,6,22],imagemanag:19,confirm:[1,16,7],definit:[15,17,1,4,5,19,6,21,20],inject:[19,1,17],ddl:12,refer:[],power:[17,0,11],stringfield:[17,6,11],inspect:[22,1],broken:17,found:16,"__name__":[9,1,18,12,6,22,8],unicod:17,src:[9,19],get_url:19,backup:12,effici:1,msgstr:13,complianc:17,her:[10,5],area:21,accordion_tag:9,start:[22,16,10,7,17],interfac:[15,19,17,4,5,12,6,0],auth_user_db:1,lot:[3,16],tupl:[4,1,8],regard:2,pull:17,possibl:[16,10,11,17,1,13,22,20,7],yetothermodelview:1,foreignkei:[15,4,22,5],embed:19,connect:[15,20,8,14],uid:[2,8],creat:[9,15,16,11,1,4,18,17,5,14,12,6,0,21,13,22,20,19,7],certain:21,file:[],fill:[10,17],again:[13,10],googl:[3,10,17,4,1,21,20],gettext:7,field:[15,20,10,11,1,4,17,5,12,6,22,8,7],valid:[15,17,11,1,20,7],collis:1,you:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],poor:4,openid:[],first_app:16,finali:13,sequenc:[22,17],org:16,select2rowidget:[],grupo:13,reduc:17,directori:[9,15,11,17,12,13,22,8],auth_ldap_uid_field:8,descript:[9,11,1,20,8,7],mimic:2,mass:0,cpu:12,repat:20,represent:15,all:[9,15,16,10,11,20,4,18,17,5,12,13,1,0,21,6,22,2,8,7],skeleton:[],form_post:[1,11],countrydirectchartview:[4,1],month:[4,1,17],adition:19,follow:[9,15,16,10,11,4,0,12,1,21,13,22,8,14],alt:19,disk:21,x_col_1:1,register_mail:10,contactgroup:[13,15,6,7],form_column:[1,11],init:[13,18,6,17],userremoteusermodelview:1,queri:[15,17,18,1,22,2,7],begin_d:5,introduc:9,mail_use_tl:10,consum:12,straightforward:16,fals:[9,15,1,4,5,12,6,0,21,22,8,19,14],find_permissions_view_menu:1,mechan:17,veri:[9,15,10,11,12,6,21,7],find_permiss:1,employee_numb:[7,5],list:[],last_nam:[22,1,10],basefilt:[12,1,17],description_column:1,countrystat:[4,1],zero:[16,17],pass:[9,11,1,12,6,21,22,7],further:20,what:[],sub:17,section:9,abl:[],delet:[15,22,1,0,17],piechart:[4,1],version:[],last_login:[12,22,17],primary_kei:[15,19,4,5,12,1,2,14],activation_hash:[],method:[],full:15,hash:[12,22,1,10,17],behaviour:[],goodby:11,modifi:12,valu:[15,17,4,1,21,13,20,7],search:[9,3,17,1,8,7],surpress:17,popen:2,prior:[4,2,11],assoc_benefits_employe:5,babel_default_fold:16,narrow:17,auth_role_publ:[8,17],hash_db_password:12,activation_templ:10,depart:[7,5],set_link_filt:17,primit:[15,6],filenam:[9,19,1],reorg:17,href:[19,17,21,1,11],add_permissions_menu:1,select:[21,1,7,17],internation:[16,21],regist:[],two:[9,15,16,11,1,4,18,5,6,13,22],toggl:17,more:[3,16,11,4,17,5,12,21,13,7],abspath:18,customis:1,post_delet:1,flag:[13,16,8,17],particular:[4,5,0],edit_widget:1,compani:5,form_get:[1,11],none:[15,1,17],endpoint:[15,1,5,17],dev:17,histori:[17,1,5,11],portugues:[13,17],sent:10,male:15,def:[15,11,4,5,19,1,0,6,22,2,7],mail_serv:10,registr:[],share:[9,5],accept:[1,17],personchartview:12,cours:[15,4,5,21,22,2],mai:[15,2,11],goal:20,first_nam:[12,22,1,10],divid:17,anoth:13,list_contact:9,corrigir:[],divis:17,simpl:[],css:[],resourc:[12,5],show_titl:1,function_id:5,associ:[16,17,1,11,5,20,21,22],list_templ:[9,1],github:[15,19,11,4,18,12,21,2],django:[15,1,20],caus:17,disktyp:21,datamodel:[9,15,17,4,5,12,13,1,0,21,6,22,2,19,7],permissionview:1,help:[9,20,21],edit_fieldset:[15,1],paramet:[9,10,11,1,4,17,0,6,22,8],aggregate_avg:[4,1],style:[15,17,1,20,21,22,8],post_upd:1,alter:[12,22,10],good:16,"return":[15,11,4,17,5,19,1,0,6,22,2,7],timestamp:20,datarequir:[17,11],framework:[9,3,16,11,4,17,5,12,13,1,15,14,21,6,22,2,20,7],necess:2,userid:1,authent:[],easili:[9,16,10,0,12,20,21,22],simpleview1:11,simpleview2:11,procedur:12,realli:[22,2,0],count_us:1,sqlamodel:[9,17,4,12,1,21,13,7],todo:17,event:[],mail_password:10,difer:1,get_sess:1,file_nam:1,guess:9,basefilterrel:17,asc:[1,7],cooki:[18,17,11],reason:15,nome:13,success:[22,1,10],assign:[22,1,8,17],detailview:1,permissionviewmenu:1,feel:[9,12,11],number:[4,21,11],evolut:4,genericinterfac:2,done:[9,21,16,5,17],blank:8,miss:[15,17],differ:[16,10,17,4,5,6,21,22],guest:[15,3,4],script:[9,13,17],least:[2,1,16],metho:15,cfg:13,colnam:[4,1],img_siz:[19,8,17],store:[1,8,21],schema:[12,15,6],adher:20,option:[15,16,10,17,4,18,0,1,21,22],relationship:[15,17,4,5,12,1,22],part:[9,22,1,11],sqlainterfac:[15,19,17,4,5,12,0,7],kind:[4,21,6,5,11],list_thumbnail:17,xpto2:1,remov:[15,11,1,17,0,12,6,22,7],my_extra_arg:7,jqueri:[9,17],str:[2,4,1,19],remenb:17,packag:[15,16,10,17,20,13],"null":[7,17],pre_upd:1,juici:11,imagin:2,para:17,lib:[9,17],self:[15,19,10,11,20,4,17,5,12,1,0,6,22,2,8,7],also:[15,11,1,4,17,6,21,22,8,7],build:[20,8,5,11],textareafield:[],referencefield:6,distribut:16,previou:[6,17,22,1,11],most:[15,4,18,5,11],plan:[13,16],diferent:17,clear:1,ext:[],clean:22,scaffold:20,awesom:[15,1,20,17],stat_dat:[4,1],gold:4,babelpkg:[13,17,16,11],babel_init:13,can_add:[1,7],session:[9,16,11,18,17,12,1,21,6,22,2,7],sqla:[15,19,17,4,18,5,12,1,0,22,2,14],font:[15,1,20,17],find:[13,4,1,15,11],access:[16,10,17,11,1,22],pretti:[15,4,1,17],showblockwidget:17,department_queri:7,unus:[1,17],"__file__":18,col_nam:[1,7],him:10,functionview:5,common:[12,1],wrote:17,set:[10,1,20,21,8,7],see:[9,15,16,11,5,6,2],sec:22,arg:1,someth:[9,22,0,11],country_id:4,won:11,field_str:12,experi:[4,7,11],altern:[2,20],externalserv:14,add_us:1,numer:17,lazy_gettext:[10,11,4,1,21,13,22],javascript:[],isol:16,rapid:3,benefit_id:5,solv:[16,7],popul:[4,1],both:6,last:[16,22,6,8,17],foreign:17,barchart:4,redirect_url:11,let:[15,16,10,11,4,5,6,21,13],list_titl:1,add_registr:[],simpli:16,auditmixin:[15,1,17],point:[1,10,11],instanti:[12,1],each:[9,15,11,17,5,12,1,22,2,20,7],header:[17,11],add_link:[17,21,1,11],linux:[2,16],batteri:20,changed_on:[12,22,17],backend:[12,22,1],user_model:22,tail_j:9,stamp:1,criar:17,add:[],empti:[9,15,1,17],implicit:17,monthli:4,blob:[],edit_form_query_cascad:1,static_url_path:1,imag:[],convert:17,func:[4,1],educ:4,remote_us:[20,22,1,8,17],look:[9,15,10,11,1,4,18,5,19,6,21,13,22,8,7],histor:4,formatt:[4,1,17],"while":16,abov:[9,21],error:[17,20,11],fun:6,everyon:22,propag:8,user_show_fieldset:22,readi:[4,16,21],columnchart:[4,1],itself:[2,1,16,17],default_view:[21,1,11],decor:[],employee_id:5,grant:20,belong:[16,10,5],route_bas:[17,1,11],conflict:16,higher:[4,17],get_order_columns_list:17,optim:[19,17],quickchart:4,moment:10,user:[],wherev:2,implement:[15,10,11,4,0,19,1,21,22,2],built:3,myaction:0,lower:[22,20,17],entri:[1,7,5,11],person:[15,19,1,12,6,22],chanc:16,propos:3,explan:15,jsapi:17,head_j:[9,17],pssession:2,delete_al:[2,22,1,0],mysql:[12,20,14],msgid:13,group_by_column:[4,21,17],my_project:9,pretty_month_year:4,auth_ldap_firstname_field:8,listblock:[21,17],bin:[12,16],varchar:12,format:[2,4,1],big:[9,20],nginx:22,datasourc:2,can_delet:7,basicconfig:[],oid_ask_for:17,personal_phon:[6,15,1],resolv:17,collect:[1,21],api:[],givennam:8,myinlinet:21,group_id:[],encount:20,often:16,creation:[22,1,7,17],some:[15,19,10,4,5,12,1,13,22,20],back:[17,1,11],virtualenv:16,listfield:6,per:4,larg:[12,13,8],retro:12,contacto:13,this_form_get:1,object:[12,4,1,8,15],run:[16,17,18,11,5,12,13,22],method3:11,method1:11,show_cascad:[21,5,17],funcnam:[4,1],exemplo:17,wget:12,psview:2,mssql:20,permission_view_menu:1,constraint:[7,17],mymodelview2:21,mymodelview3:21,modal:17,goodi:20,block:[9,21,17,7,11],"__repr__":[15,4,6,5],listwidget:[1,21],update_us:1,ensur:10,generalxpto_permiss:1,inclus:17,your_js_fil:9,question:[15,17],submit:[1,10,11],custom:[],includ:[],suit:17,blueprint:[1,11],himself:8,viewmenu:1,link:[10,17,11,19,1,21],translat:[],russian:[13,17],line:[15,2,16,17],info:[15,17,1,11,6,22,7],concaten:[19,4,1],utf:13,quickfil:[19,21],simplebychartview:1,readlin:2,auth_user_remote_us:1,booleanfield:1,mymodel:[12,1,7],impl:1,get_all_us:1,quickhowto2:[2,14],img_upload_fold:[8,17],repres:[2,11],guarante:22,edit_form_query_rel_field:[12,1,17],menu_access:1,pre_delet:1,titl:[9,10,17,4,11,1],sequenti:1,queryselectfield:[7,17],master_div_width:1,nice:[1,5],draw:[4,1],mongodb:20,algorithm:11,microsoft:22,masterdetail:17,hello:11,code:[9,15,16,17,4,18,5,12,6,0,21,13,22],partial:[9,15,20,17],doanload:22,scratch:[9,22],add_form_query_cascad:1,compact:17,privat:[20,10],send:[17,10,0,11],granular:[22,1,11],aris:15,created_bi:[22,1,7],mous:17,genericmodel:[2,1,17],quickhowto:[15,4,14],gender:[15,6,7],button:[4,17],model_cl:1,fewer:15,"try":[15,2,16,10,17],utilview:17,pleas:[12,15],create_blueprint:1,myuser:22,hardcod:17,video:16,download:[15,22,16],before_request:[],mongodb_set:8,click:[],compat:[],index:[],view_menu:1,edit_cascad:[21,17],cell:17,get_file_original_nam:1,garbag:22,whatev:[9,22,2,21],lc_messag:13,len:4,bodi:9,logout:17,ubuntu:16,vertic:[20,17],sinc:[15,22,17,16,11],authldapview:1,convers:17,chang:[],fiscal_numb:5,college_perc:[4,1],add_permission_rol:1,base_permiss:[2,1,7],appli:[9,4,1,22,2,7],app:[9,15,16,11,1,18,17,5,12,6,21,13,22,8,14],spacelab:21,apt:16,"boolean":17,regexp:2,from:[],doubl:17,upgrad:12,next:[],few:[15,21],doubt:2,simpler:7,flask_babelpkg:22,base_ord:[1,7,17],account:[8,10],alia:1,related_view:[9,15,17,1,4,5,12,6,0,21,13],fetch:[10,17],employe:[22,7,5],sqlite:[12,18,20,14,17],process:[4,1,10,11],sudo:16,tag:[6,5,17],extra_class:7,tab:[15,21,5,17],serial:21,mymodelview:[22,1,21],instead:[9,17,4,11,12,22],overridden:[9,17,11,1,21,7],filterclass:[1,7],alloc:5,auth_user_oid:1,seriou:16,restruct:17,correspond:[12,13,22],issu:[12,3,2,15,17],prettifi:17,allow:[15,10,11,17,1,2,7],mongoengineinterfac:6,move:[12,17],baselayout:[9,1],crash:17,greater:17,python:[],auto:[3,17],extra_arg:[1,7,17],handi:10,auth:[22,1,10,17],myuserdbmodelview:22,"__bind_key__":14,chart_3d:[4,1],showwidget:1,conf_password:22,mastert:1,anyth:[18,1],edit:[],dynamicform:11,from_object:[6,12,22,1,8],subset:2,view_nam:1,created_on:[12,22,17],meta:9,"static":[9,1,7,17],our:[15,4,5,6,21,2],special:[15,17,5,0,21,22,8,7],out:[15,2,8,10],list_widget:[19,1,21],categori:[15,11,1,4,17,5,6,21,13,22],rel:[9,17,11,1,21,8],metaclass:17,statist:[4,1],insid:11,myform:11,control:[15,1],dictionari:[4,1,8,7],releas:15,pretifi:1,log:[21,6,7,17],static_fold:1,head_meta:9,navbar:[9,21,17],unwant:22,could:[15,21,17],keep:[12,20,11],datetimefield:[6,17],outsid:17,fieldwidget:[7,17],contact_group_id:15,kerbero:22,order_column:[21,1,17],select2widget:7,mkdir:[],system:[2,16],messag:[9,10,17,11,13,7],sec_model:22,attach:11,fontawesom:[9,15,17],"final":[9,4,5,21,22,2],del_permiss:1,mysecuritymanag:[22,10],textfield:[7,17],exactli:[15,22,6],lista:13,haven:12,structur:[9,15,1,7],genericsess:[2,1],bind:[8,14,17],pgsql:12,py3:16,addformwtf:7,myproject:[],have:[9,15,16,11,4,17,5,12,1,21,22,2,8,19,7],tabl:[],need:[9,16,11,20,18,17,5,1,22,8],babel:[],rout:[1,11],expos:[],mix:[1,21],builtin:[20,17],which:14,singl:[2,22,1,0],unless:12,who:22,oracl:[20,17],"class":[9,15,10,11,14,4,18,17,5,12,13,1,0,21,6,22,2,19,7],get_app:1,can_edit:[1,7],myuserdbview:22,url:[10,17,11,1,21,8],serverdisktypemodelview:21,setlevel:6,request:17,wtform:[17,1,16,11],face:16,deni:17,list_column:[15,17,5,19,1,21,6,22,2,7],bs3textfieldrowidget:7,add_permiss:1,find_view_menu:1,thisismyscretkei:18,text:[9,17,11,5,1,21,13],overflow:17,myviewt:21,locat:1,is_item_publ:1,auth_typ:[8,10,17],baseiterfac:17,should:[15,0,12,1,21,6,2],manufactur:1,restructur:17,suppos:4,combo:7,local:14,hope:[12,15],contribut:[],basefilterconvert:12,familiar:15,add_templ:[9,1],autom:21,examplemodel:7,db2:20,myindexview:21,filtercontain:12,enabl:[15,10,17,11,1,8],baseinterfac:17,add_permissions_view:1,she:[10,5],partit:20,contain:[15,1,10,21],get_user_by_id:1,project_nam:[21,11],frame:4,orphan:22,"_permission_nam":1,show_form:[9,17],servermodelview:21,bs3textfieldwidget:7,gmail:[22,10],correctli:[10,17],state:12,email:[16,10,17,0,1,22,8],kei:[],entir:[9,1],flask_mongoengin:[6,1],addit:[19,4,22,7],stat2:4,stat1:4,rtype:[],admin:[16,17,18,20,22,8],equal:17,etc:[9,16,11,17,5,12,1,0,22,20],instanc:[1,14,17],changed_bi:22,app_nam:[1,8],jumbotron:21,strftime:5,comment:8,venv:16,month_nam:4,perm_view:1,sqlainterdac:22,respect:[2,4,1],view_menu_nam:1,groupgeneralview:12,quit:16,addition:[15,4,16,11],compos:4,compon:9,json:[],immedi:16,wtf:[17,1,10,11],bit:6,my_column_nam:1,togeth:4,allwai:[7,17],present:[15,10,11,1,4,17,6,21,20],multi:20,auth_view:1,cursor:17,intranet:22,endblock:[9,21,11],layer:15,helper:17,almost:[9,21],demo:[15,3,4],site:[22,1,20,11],auth_user_ldap:1,revis:[],welcom:[15,3,4],handl:[1,20,7,0,17],infer:17,edit_contact:9,http:[15,19,16,11,4,12,1,21,2],benefitview:5,mybas:9,column_nam:1,student:4,expand:[6,15,22,1],audit:[],sqlalchemy_database_uri:[18,8,14],update_redirect:[22,1,0,11],builder:16,groupmasterview:21,well:[18,11],exampl:[],command:[],english:[13,16],backref:[22,5],latest:17,photo_img:19,rocket:[22,0],less:[12,17],action_post:1,fabmanag:[16,17],web:[15,16,17,20,22,8],securitymanag:[],registerus:10,nullabl:[15,19,17,4,5,12,1,14],poor_perc:4,cleanup:[],match:[22,8,7],futur:[1,17],crud:[15,3,17,1,6,20],know:[12,2],password:[16,17,12,1,22,8,14],python3:17,desc:[1,7],insert:[9,16,10,17,11,20],resid:14,like:[9,15,16,11,4,17,5,12,1,0,21,22,2,8,19,7],lost:12,oid_ask_for_opt:17,necessari:[22,10,0,17],resiz:[19,8,17],searchwidget:1,page:[9,3,10,11,17,5,1,21,20],mymodelview1:21,fabtest10:10,proper:17,home:17,auth_ldap_serv:8,librari:[],tmp:12,avoid:1,useroauthmodelview:1,leav:[1,8],encourag:12,add_permission_view_menu:1,host:18,babel_extract:13,although:[12,15],security_manager_class:[6,22,1,17],panel:[9,17],edit_form:[9,1,7,17],about:[],actual:[21,16,17],column:[],constructor:[1,11],disabl:0,chart_templ:1,own:[9,15,10,11,4,17,0,19,1,21,13,22,2,20,7],easy_instal:16,automat:[],contactchartview:[4,22],index_templ:21,merg:17,contruct:1,pictur:17,much:[2,3,1,11],"var":[13,22,20,8,17],"function":[],auth_ldap_email_field:8,brand:17,login_count:[12,22,17],oauth:1,eas:9,inlin:[21,17],mail_default_send:10,count:[15,4,22,1,17],made:[15,6,21],displai:[9,15,17,4,19,1,21,13],record:[9,15,10,11,17,5,1,0,2,20],limit:[1,16,17],problem:[20,16,17],flask_appbuild:[11,1,12,6,21,22,7],pil:16,"int":[2,1,17],dure:21,pid:2,pie:4,rule:[9,7],contact_group:[15,4,6],probabl:16,detail:[15,3,11,1,4,18,17,5,6,21,22,20,7],virtual:[16,17],detailt:1,other:[16,17,4,11,1,21],lookup:20,contacttimechartview:[4,22,21],rememb:[9,15,17,1,4,5,6,21,7],varieti:20,mywidgetlist:21,stat:[4,1],repeat:16,areachart:[4,21],debian:16,sqlaintefac:12,fail_login_count:[12,22,17],getlogg:6},objtypes:{"0":"py:module","1":"py:attribute","2":"py:method","3":"py:function","4":"py:class"},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","class","Python class"]},filenames:["actions","api","generic_datasource","index","quickcharts","relations","quickhowto_mongo","advanced","config","templates","user_registration","views","versionmigration","i18n","multipledbs","quickhowto","installation","versions","quickminimal","quickfiles","intro","customizing","security"],titles:["Actions","API Reference","Generic Data Sources","Flask-AppBuilder","Chart Views","Model Relations","Model Views on MongoDB","Advanced Configuration","Base Configuration","Templates","User Registration","Base Views","Version Migration","i18n Translations","Multiple Databases","Model Views (Quick How to)","Installation","Versions","Quick Minimal Application","Model Views with Files and Images","Introduction","Customizing","Security"],objects:{"flask.ext.appbuilder.views":{CompactCRUDMixin:[1,4,1,""],ModelView:[1,4,1,""],IndexView:[1,4,1,""],PublicFormView:[1,4,1,""],MasterDetailView:[1,4,1,""],SimpleFormView:[1,4,1,""]},"flask.ext.appbuilder.charts.views":{TimeChartView:[1,4,1,""],GroupByChartView:[1,4,1,""],DirectByChartView:[1,4,1,""],BaseChartView:[1,4,1,""],DirectChartView:[1,4,1,""],ChartView:[1,4,1,""]},"flask.ext.appbuilder.charts.views.GroupByChartView":{definitions:[1,1,1,""]},"flask.ext.appbuilder.charts.views.BaseChartView":{group_bys:[1,1,1,""],chart_widget:[1,1,1,""],width:[1,1,1,""],chart_type:[1,1,1,""],search_widget:[1,1,1,""],chart_template:[1,1,1,""],chart_title:[1,1,1,""],group_by_label:[1,1,1,""],chart_3d:[1,1,1,""]},"flask.ext.appbuilder":{baseviews:[1,0,0,"-"],base:[1,0,0,"-"],filemanager:[1,0,0,"-"],actions:[1,0,0,"-"],views:[1,0,0,"-"]},"flask.ext.appbuilder.filemanager":{get_file_original_name:[1,3,1,""]},"flask.ext.appbuilder.models.generic.GenericSession":{query:[1,2,1,""],clear:[1,2,1,""],get:[1,2,1,""],all:[1,2,1,""],delete_all:[1,2,1,""]},"flask.ext":{appbuilder:[3,0,0,"-"]},"flask.ext.appbuilder.baseviews.BaseCRUDView":{edit_form_query_rel_fields:[1,1,1,""],pre_update:[1,2,1,""],related_views:[1,1,1,""],show_columns:[1,1,1,""],edit_form_query_cascade:[1,1,1,""],show_template:[1,1,1,""],edit_template:[1,1,1,""],list_template:[1,1,1,""],add_form_query_cascade:[1,1,1,""],validators_columns:[1,1,1,""],edit_form_extra_fields:[1,1,1,""],post_add:[1,2,1,""],list_widget:[1,1,1,""],page_size:[1,1,1,""],add_form_query_rel_fields:[1,1,1,""],edit_fieldsets:[1,1,1,""],list_title:[1,1,1,""],post_delete:[1,2,1,""],post_update:[1,2,1,""],pre_add:[1,2,1,""],add_template:[1,1,1,""],list_columns:[1,1,1,""],show_widget:[1,1,1,""],show_title:[1,1,1,""],order_columns:[1,1,1,""],edit_widget:[1,1,1,""],edit_columns:[1,1,1,""],add_title:[1,1,1,""],edit_form:[1,1,1,""],add_widget:[1,1,1,""],show_fieldsets:[1,1,1,""],pre_delete:[1,2,1,""],add_fieldsets:[1,1,1,""],description_columns:[1,1,1,""],add_columns:[1,1,1,""],edit_title:[1,1,1,""],add_form_extra_fields:[1,1,1,""],add_form:[1,1,1,""]},"flask.ext.appbuilder.models.mixins.FileColumn":{impl:[1,1,1,""]},"flask.ext.appbuilder.security":{manager:[1,0,0,"-"],decorators:[1,0,0,"-"]},"flask.ext.appbuilder.models.generic":{GenericColumn:[1,4,1,""],GenericModel:[1,4,1,""],GenericSession:[1,4,1,""]},"flask.ext.appbuilder.baseviews":{BaseView:[1,4,1,""],BaseCRUDView:[1,4,1,""],expose:[1,3,1,""],BaseModelView:[1,4,1,""]},"flask.ext.appbuilder.baseviews.BaseModelView":{base_filters:[1,1,1,""],search_form:[1,1,1,""],search_columns:[1,1,1,""],search_widget:[1,1,1,""],label_columns:[1,1,1,""],base_order:[1,1,1,""],datamodel:[1,1,1,""]},"flask.ext.appbuilder.views.MasterDetailView":{master_div_width:[1,1,1,""]},"flask.ext.appbuilder.base":{AppBuilder:[1,4,1,""]},"flask.ext.appbuilder.models.mixins.ImageColumn":{impl:[1,1,1,""]},"flask.ext.appbuilder.charts":{views:[1,0,0,"-"]},"flask.ext.appbuilder.models":{generic:[1,0,0,"-"],group:[1,0,0,"-"],mixins:[1,0,0,"-"]},"flask.ext.appbuilder.models.mixins":{AuditMixin:[1,4,1,""],ImageColumn:[1,4,1,""],FileColumn:[1,4,1,""],BaseMixin:[1,4,1,""]},"flask.ext.appbuilder.models.group":{aggregate_sum:[1,3,1,""],aggregate_avg:[1,3,1,""],aggregate_count:[1,3,1,""]},"flask.ext.appbuilder.security.manager.BaseSecurityManager":{registeruserdbview:[1,1,1,""],auth_user_ldap:[1,2,1,""],has_access:[1,2,1,""],update_user:[1,2,1,""],find_view_menu:[1,2,1,""],add_permission:[1,2,1,""],add_permissions_view:[1,2,1,""],find_permissions_view_menu:[1,2,1,""],del_permission_role:[1,2,1,""],add_permission_role:[1,2,1,""],get_all_users:[1,2,1,""],add_permissions_menu:[1,2,1,""],registeruser_view:[1,1,1,""],update_user_auth_stat:[1,2,1,""],del_permission:[1,2,1,""],lm:[1,1,1,""],useroauthmodelview:[1,1,1,""],userdbmodelview:[1,1,1,""],auth_user_remote_user:[1,2,1,""],oauth_handler:[1,1,1,""],auth_user_db:[1,2,1,""],resetmypasswordview:[1,1,1,""],find_permission_view_menu:[1,2,1,""],resetpasswordview:[1,1,1,""],authremoteuserview:[1,1,1,""],authoidview:[1,1,1,""],userremoteusermodelview:[1,1,1,""],add_permission_view_menu:[1,2,1,""],oid:[1,1,1,""],find_permission:[1,2,1,""],authoauthview:[1,1,1,""],authdbview:[1,1,1,""],oauth:[1,1,1,""],count_users:[1,2,1,""],security_cleanup:[1,2,1,""],authldapview:[1,1,1,""],auth_user_oid:[1,2,1,""],useroidmodelview:[1,1,1,""],is_item_public:[1,2,1,""],auth_view:[1,1,1,""],find_user:[1,2,1,""],reset_password:[1,2,1,""],del_view_menu:[1,2,1,""],registeruseroidview:[1,1,1,""],user_view:[1,1,1,""],userldapmodelview:[1,1,1,""],get_user_by_id:[1,2,1,""],add_view_menu:[1,2,1,""],add_user:[1,2,1,""]},"flask.ext.appbuilder.security.manager":{BaseSecurityManager:[1,4,1,""]},"flask.ext.appbuilder.security.decorators":{has_access:[1,3,1,""],permission_name:[1,3,1,""]},"flask.ext.appbuilder.views.PublicFormView":{default_view:[1,1,1,""],form:[1,1,1,""],form_post:[1,2,1,""],form_fieldsets:[1,1,1,""],form_title:[1,1,1,""],form_columns:[1,1,1,""],edit_widget:[1,1,1,""],form_get:[1,2,1,""]},"flask.ext.appbuilder.baseviews.BaseView":{default_view:[1,1,1,""],base_permissions:[1,1,1,""],route_base:[1,1,1,""],create_blueprint:[1,2,1,""],update_redirect:[1,2,1,""],static_folder:[1,1,1,""],get_redirect:[1,2,1,""],extra_args:[1,1,1,""],template_folder:[1,1,1,""],render_template:[1,2,1,""]},"flask.ext.appbuilder.views.ModelView":{action:[1,2,1,""],action_post:[1,2,1,""]},"flask.ext.appbuilder.base.AppBuilder":{get_session:[1,1,1,""],add_view_no_menu:[1,2,1,""],app_name:[1,1,1,""],app_icon:[1,1,1,""],app_theme:[1,1,1,""],version:[1,1,1,""],add_link:[1,2,1,""],add_view:[1,2,1,""],add_separator:[1,2,1,""],security_cleanup:[1,2,1,""],"__init__":[1,2,1,""],get_app:[1,1,1,""]},"flask.ext.appbuilder.actions":{action:[1,3,1,""]},"flask.ext.appbuilder.views.SimpleFormView":{form:[1,1,1,""],form_post:[1,2,1,""],form_columns:[1,1,1,""],form_title:[1,1,1,""],edit_widget:[1,1,1,""],form_get:[1,2,1,""]}},titleterms:{skeleton:15,show:9,permiss:22,compactcrudmixin:1,group:[4,1],expos:15,flask:[3,1],menu:21,fix:[3,17],configur:[8,10,7],theme:21,version:[12,17],masterdetailview:1,ldap:10,basemodelview:1,applic:[15,18],timechartview:1,contribut:3,python:16,initi:[6,16],securitymanag:[],requir:16,introduct:[13,20],edit:9,simpl:15,list:9,authent:[22,10],publicformview:1,cascad:9,quick:[13,15,18],view:[15,11,1,4,0,19,6,21],basecrudview:1,direct:4,indexview:1,librari:9,compat:16,index:21,what:[],extend:22,databas:[14,10],content:3,appbuild:[3,1],method:15,refer:1,widget:21,kei:8,advanc:7,migrat:12,gener:[2,1],javascript:9,baseregisterus:1,behaviour:21,step:19,base:[15,22,8,7,11],chartview:1,column:1,filter:7,aggr:1,action:[1,0],improv:17,chang:21,filemanag:1,extra:[1,7,5],modelview:1,basesecuritymanag:1,automat:22,deprec:[4,1],api:1,instal:16,custom:[22,21],your:[15,4,0,19,6,22],from:12,support:22,regist:[15,4,6],add:9,construct:21,next:19,json:15,includ:20,type:22,"function":[9,1],form:7,imag:19,relat:5,translat:13,i18n:13,bug:[3,17],baseview:[1,11],baseregisteruserview:[],"default":[7,21],groupbychartview:1,setup:18,properti:5,defin:[15,4,6,19,0],were:[],simpleformview:[1,11],registr:10,argument:7,templat:[9,7,21],sourc:[2,1],file:19,tabl:3,pip:16,decor:1,multipl:14,secur:[22,1,7],babel:13,ext:1,contact:15,how:[13,15,18],cleanup:22,role:22,indic:3,config:[13,8],css:9,openid:10,mongodb:6,chart:[4,1],beta:1,user:[22,10],mixin:1,mani:5,directchartview:1,data:[2,4,1],audit:22,footer:21,minim:18,directbychartview:1,exampl:2,command:2,basechartview:1,model:[15,1,5,19,6,22],order:7}}) \ No newline at end of file +Search.setIndex({envversion:42,terms:{validators_column:[1,7],col_typ:1,four:22,upload_fold:[8,17],dirnam:18,personal_celphon:[15,6],whose:13,under:[17,11],list_block:17,fieldset:[15,1,17],myregisteruserdbview:10,head_css:9,"utiliza\u00e7\u00e3o":[],affect:17,cmd:2,upload:[20,8,17],previou:[6,17,22,1,11],factori:[1,17],edit_column:[15,17,5,1,22,7],direct:[],street:15,aggreg:[4,22,1,17],myinlineview:21,even:[3,16,12,6,21,19,7],disk:21,x_col_1:1,mongoengin:[15,20,1,19,6,8],migrate_db_1:[],migrate_db_0:12,"new":[9,3,16,10,11,15,17,12,1,22,8,7],sqlalchemy_bind:14,metadata:5,widget:[],app_icon:[1,8,17],here:[9,15,0,21],path:[9,18,12,1,21,8,14],dry:20,intead:17,datetim:[12,4,5,17],groupmodelview:[15,0,6,13,22,7],permit:17,studi:22,unemployed_perc:[4,1],succesfulli:10,total:[4,22],highli:[20,16],describ:[18,5],would:[15,5],init:[13,18,6,17],call:[9,17,11,0,19,1,2],typo:17,type:2,tell:[9,10,11,5,6,0,21,13,22],benefits_employe:5,add_separ:[22,1,5,21],relat:[],yahoo:22,notic:[15,19,11,1,4,18,12,6,21],warn:[1,17],phone:[1,21],hold:[15,10,4,1,22,2,8],must:[15,16,11,4,17,12,1,21,6,2,8,7],join:[12,18,14,17],setup:[],work:[15,16,11,17,12,13,2],introduc:9,rework:[22,17],serverdisktyp:21,form_titl:[1,10,11],add_form:[9,1,7,17],overrid:[9,15,10,11,18,17,19,1,21,6,22,2,7],show_fieldset:[6,15,22,1],smtp:10,filterequ:[12,1,17],auth_ldap_search:8,want:[9,15,11,4,5,1,0,21,13,22,7],chart_titl:[4,1,21],everi:[18,17],end:[9,5],classifi:15,how:[],env:16,answer:[],verifi:22,config:[],updat:[15,11,1,17,5,6,0,13],adit:1,chines:[13,17],after:[9,15,10,17,12,1,22],befor:[9,4,1,15,12],wrong:17,averag:[4,1,17],classmethod:17,bootstrap:[9,17,1,20,21,8],authremoteuserview:1,lost:12,query_factori:7,exclud:17,receiv:[10,17],environ:[16,22,20,8],permission_nam:[22,1,17],charview:15,origin:[9,19,1],auth_role_admin:[8,17],becaus:[9,16,11,4,17,5,13,14],veri:[9,15,10,11,12,6,21,7],countrygroupbychartview:[4,1],flexibl:[7,17],uuid:[19,1,17],img:19,"__class__":9,better:[3,21,16,17],easier:19,them:[9,15,11,4,5,12,1,0,21,13,22,8,19,14],thei:[9,17,4,11,5,19,2],authdb:1,safe:17,passwordformail:10,"break":[12,16,17],you_css_fil:[],jinja2:[9,17,1,21,13,20,7],choic:17,mytabl:[1,7],grammar:[4,1],chartwidget:1,debug:[18,6],oblig:[12,15,2],side:[21,8,17],group_by_label:[4,1],mean:13,set_index_view:17,sec_view:22,esqueleto:17,manufacture_id:1,generalview:[12,17],ommit:1,extract:[13,21],edit_templ:[9,1,21],goe:[9,20],basedir:[12,18,14],content:[],adapt:17,navig:[9,1,5,11],basefilt:[12,1,17],search_form:1,statschartview:[4,1],pagin:[15,17],onto:12,render:[9,11,12,1,21,13],independ:[15,17],necess:2,restrict:1,instruct:12,alreadi:[15,4,5,12,21,2,8],massiv:0,primari:17,add_form_extra_field:[1,7,17],top:[9,3,21,1,17],sometim:[1,11],exampleview:7,master:[15,19,11,4,17,12,1,21,2,20],too:16,john:11,filternotequ:17,boostrap:17,tool:16,fontawesom:[9,15,17],dbmongo:[6,1],provid:[10,17,4,11,1,13,20],tree:[15,11,4,19,21,2],label_column:[15,1,4,19,6,21,13],project:[15,3,16,11,12,20,21,13],my_col_to_be_ord:7,runner:[],mind:20,raw:12,incompat:16,simplifi:[22,17],usernam:[16,10,17,1,22,8],sqlinterfac:17,security_cleanup:[22,1,17],don:[12,1,20],enviro:17,doc:[12,2,17],flow:20,doe:[1,17],declar:[9,12,18,15,17],passwordfield:[],section:9,dot:[15,17],add_fieldset:[15,1],"__str__":6,syntax:15,bootwatch:[8,17],registeruser_view:1,layout:21,field2:[7,11],menu:[],explain:22,field1:11,apach:22,theme:[],ldap:[],"__call__":7,get_model_rel:17,folder:[15,11,1,5,12,6,21,8],department_id:5,get_us:[1,7],edit_titl:1,report:[3,17],youtub:16,bar:9,changeabl:12,method:[],reload:17,baseregisterus:[],registerview:10,mandatori:[1,8,11],result:[15,19],respons:[19,17,22,1,11],fail:[22,17],hash:[12,22,1,10,17],subject:10,brazil:[13,17],hopefulli:1,databas:[],psmodel:2,myview:[12,21,1,7,11],pybabel:13,approach:22,attribut:[12,1,17],accord:10,extend:21,extens:[15,18,17],extent:[],"__unicode__":6,behaviour:[],protect:[22,11],easi:[9,15,16,10,17,11,20],as_unicod:11,unemploy:[4,1],against:[22,1],cog:11,logic:5,countri:[13,4,1,8],login:[15,3,16,10,17,4,18,12,1,22],del_permission_rol:1,com:[15,19,10,11,4,17,12,1,21,2,14],col:[4,22,1,17],asctim:[],myformview:11,filecolumn:[1,17],height:[4,8],guid:17,assum:[21,1,5,17],duplic:17,three:[],been:16,find_us:1,trigger:15,interest:4,basic:[15,18,22,10],add_contact:9,ani:[15,16,11,17,12,1,21,22,2,20,7],child:[4,18,1,21],"catch":17,ugli:[],resetpasswordview:1,properti:[],remv:17,calcul:4,useroidmodelview:[22,1],seven:13,some_col:1,add_view:[15,11,1,4,5,12,6,21,13,22],queryselectmultiplefield:17,kwarg:[15,1,7],cond:8,linechart:[4,1],perform:[1,17],make:[9,10,4,5,13,7],init_app:[12,17],listthumbnail:[19,21],complex:[2,5,21],complet:[21,10,17],list_list:9,projectfil:[1,21],recaptcha_public_kei:10,hand:17,rais:17,formwidget:1,babel_default_local:[16,8],add_widget:1,kept:[12,22],x_col2:1,post_add:1,inherit:[15,10,11,1,4,17,12,6,21,22],contact:[],bettwen:17,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],chart_typ:[4,1,21],everyth:[15,4,5,1,21,6,22,2,20],left:[21,1,8,17],identifi:[4,1],just:[9,15,16,10,11,4,18,0,12,1,21,6,22,2,7],photo:19,activation_templ:10,human:[10,5],yet:[15,1,16],languag:[13,16,20,8,17],group_bi:1,directchart:17,img_upload_url:[8,17],primit:[15,6],els:[19,4,0],save:[19,1,17],edit_form_extra_field:[1,7,17],applic:[],mayb:16,preserv:[22,17],recaptcha:10,birth:[4,22,21],myotherview:12,modeview:0,specif:[9,22,1],employeeview:[7,5],unnecessari:17,underli:15,www:[1,21],right:21,old:22,percentag:4,born:4,intern:[12,21,17],csrf_enabl:18,indirect:8,show_templ:[1,7,5,21],when:[9,15,16,10,11,17,5,19,1,21,22,2,8],datetimepick:20,listitem:[21,17],register_us:[],localhost:[16,14,11],plu:[1,21],aggregate_sum:[4,1],colleg:4,post:[12,17,1,5,11],"super":[9,2,7],photo_img_thumbnail:19,chapter:[15,6,7,5,11],obj:1,dashboard:4,search_column:[2,4,21,1,17],del_view_menu:1,yourappemail:10,get_file_orginal_nam:17,departmentview:5,add_form_query_rel_field:[1,7,17],"float":[4,17],encod:[13,17],contactmodelview:[9,15,1,4,0,6,21,13,22,7],git:21,wai:[9,15,16,10,1,5,12,6,14,21,22,8,7],support:[13,14,21],"class":[9,15,10,11,14,4,18,17,5,12,13,1,0,21,6,22,2,19,7],avail:[7,5,21],width:[4,1,8],"_flt_":17,your_root_project_path:21,add_column:[15,17,5,1,22,7],overhead:22,fork:[13,16],medium:8,forc:17,sqlalchemi:[15,19,16,17,20,18,5,12,1,6,22,2,8,14],authdbview:1,"true":[15,19,10,4,18,5,12,1,14,6,22,2,8,7],reset:[22,1,16,17],absent:1,attr:17,reset_password:1,endcal:9,model3:14,model2:14,model1:[12,14],exsit:1,exist:[15,17,5,12,1,21,22,8],request:17,check:[22,1,5],oauth_handl:1,readonli:[1,7,5],encrypt:22,panel_end:9,excel:[15,19,16,10],role:[],test:[12,17,1,16,11],jonh:[],category_icon:[6,13,1,15,11],intend:[2,20],error_messag:10,sql:17,personmodelview:19,femal:15,longer:[1,17],time:[16,10,11,4,17,5,1,21,6,22,2,20],backward:16,dpgaspar:[15,19,11,4,12,21,2],myotherrelatedview:1,concept:11,skip:11,global:[19,1,10],extra_field:1,imagecolumn:[19,1,17],subclass:[2,1,17],created_by_fk:[12,17],row:[9,1],show_column:[15,19,1,5],depend:[1,16],flask:[],render_field:17,flash:[9,17,11],readabl:17,larg:[12,13,8],isinst:0,sourc:[],string:[15,19,11,4,5,12,1,13,22,8,14],email_templ:10,show_widget:1,add_view_no_menu:[21,1,5,11],administr:7,did:5,iter:[],item:[17,4,11,0,1,22],your_project:9,quick:[],div:21,round:19,add_view_menu:1,prevent:[22,17],has_access:[17,22,1,11],method2:11,port:18,page_s:[1,17],muldelet:[22,0],current:[17,1,11],datamodel:[9,15,17,4,5,12,13,1,0,21,6,22,2,19,7],registeruserdbview:[1,10],employeehistoryview:5,myviewt:21,deriv:11,dropdown:[20,17],auth_ldap_bind_field:8,gener:[],modif:[22,1],address:[6,15,1,8,5],box:15,root:[13,14,17],behav:[1,10],user_view:1,overriden:1,month_year:4,my_sql2:14,pillow:16,my_sql1:14,useful:[],extra:[],modul:[12,1,17],authoauthview:1,instal:[],sqllite:[6,8],memori:12,todai:5,live:[15,3,4],handler:1,criteria:4,scope:9,ppid:2,checkout:[15,16],minim:[],peopl:8,visual:4,accept:[1,17],postgresql:17,easiest:10,prepar:0,uniqu:[15,17,1,4,5,19,6,14,7],can:[9,15,16,10,11,14,4,18,17,5,12,13,1,0,21,6,22,2,20,19,7],lc_messag:13,email_subject:10,purpos:1,select2:[9,12,20,5,17],boilerpl:16,heart:2,slightli:5,levelnam:[],critic:9,auth_ldap_lastname_field:8,mail_usernam:10,occur:[22,5],alwai:[17,21,1,22,11],multipl:[],basefilterconvert:12,your_css_fil:9,somevalu:7,map:[8,11],product:[9,1],birthdai:[6,4,1,15,21],myothermodelview:[1,21],max:17,clone:[],mac:16,mymethod:22,date:[15,4,7,5,17],data:[],grow:16,base_filt:[4,1,7,17],practic:10,favorit:8,"_sep_":[19,1],produc:4,inform:[15,10,0],preced:4,callabl:17,defaultview:17,examplemodel:7,tty:2,gradual:15,get_related_model:17,approv:17,still:[6,20,2,16,7],mainli:[],dynam:17,group:[],accordion:[9,15,17],mail:[8,10],find_permission_view_menu:1,main:[9,12,20],non:[15,22,1,17],my_field1:7,my_field2:7,chart_widget:1,col2:4,col3:4,initi:[],col1:4,now:[15,16,11,4,17,5,12,6,22,14],name:[9,15,16,11,1,4,17,5,12,6,14,21,13,22,8,19,7],revers:[22,21,17],separ:[13,21,1,17],full_nam:[7,5],januari:4,collaps:17,compil:13,domain:[14,17],masterview:1,replac:[9,17],individu:7,year:[4,1,17],happen:21,shown:[9,10,17,5,1,22,8],aggregate_count:[4,1],space:15,list_item:17,resetmypasswordview:1,bla:21,correct:[12,6,17],uwsgi:17,she:[10,5],earlier:[22,17],migrat:[],envelop:[15,1,4,6,21,13],orm:[15,22,5],add_titl:1,render_templ:[1,11],thing:[12,4],place:[12,8,21],principl:[20,11],imposs:17,end_dat:5,first:[9,15,16,10,11,4,17,5,14,21,13,22,2,8,7],oper:11,directli:[12,20],onc:16,contact_group_id:15,my_widget_list:21,yourself:[12,20],fast:15,spanish:[13,17],open:[15,16,5,12,6,21,22,2,8],size:[19,1,8,17],given:[22,21],max_length:6,userinfo:17,github:[15,19,11,4,18,12,21,2],mostli:1,than:[20,17],serv:[9,15],wide:9,param1:11,seri:[4,1,17],pre:[17,1,5,11],sai:[9,4],argument:[],deliv:20,engin:[12,1],datepick:20,list_search:9,note:[15,1,10],ideal:9,take:[15,10,11,4,18,5,19,6,21,13,22,8,7],advis:[15,16,18,21,22,8],login_view:12,"_add_object":2,begin:5,sure:10,pre_add:1,normal:[15,16,19,6,2,20],track:5,beta:[],employeehistori:5,icon:[15,20,11,1,4,17,5,6,21,13,8],later:[19,10],drive:2,quantiti:21,create_al:[15,5],basemixin:[1,17],show:[],german:[13,17],painlessli:[22,20],my_index:21,permiss:[],hack:[12,17],filterstartswith:[12,1,7],onli:[9,20,16,11,1,17,6,21,22,8,7],explicitli:[],activ:[22,16,10,17],behind:1,userdbmodelview:[12,22,1],role_id:12,dict:[13,17],over:[9,1],xcol:17,variou:[20,8,17],get:[9,16,10,11,17,1,2],secondari:5,search_widget:[1,17],url_for:[9,19,1,17],requir:[],email:[16,10,17,0,1,22,8],where:[9,15,10,4,12,1,21,22,14],summari:[6,15,1],send_email:[],calendar:[4,17],quickimag:19,review:[17,11],enumer:15,label:[15,17,4,11,1,21,13,20],enough:15,appbuild:[],between:5,"import":[9,15,10,11,4,18,17,5,12,13,1,0,21,6,22,2,8,19,7],parent:[1,11],screen:10,recaptcha_private_kei:10,para:17,stime:2,uncondition:1,base_templ:[9,17,1,11],come:[21,17],relative_view:17,similar:10,can_show:[2,1,7],mani:[],app_them:[1,8,21],equalto:7,featur:[3,16,17,0,12,1,2],sess:2,folow:[13,21],rebuild:17,direct_column:[4,1],changed_by_fk:[12,17],xpto:1,"abstract":15,post_upd:1,findal:2,former:12,"case":[15,17,4,19,22,7],secret_kei:18,can_list:[2,15,1,7],cast:17,invok:[12,1,17],bootswatch:[20,21],"__init__":[9,15,1,12,6,22],acess:1,develop:[9,3,16,11,15,18,12,20,21],author:22,genericcolumn:[2,1],same:[9,15,11,1,4,17,5,6,21,22],category_label:[13,21,1,17],html:[9,10,11,17,5,19,1,21,13,7],document:[4,6,11],form_fieldset:1,finish:[12,10],oid:[12,1,17],someon:15,submenu:[21,1,17],filterequalfunct:[12,1,7],markup:19,without:[9,15,16,17,5,1,21],auth_user_registr:[8,10,17],model:[],persongeneralview:12,execut:[13,1,16,5],stat_col_2:1,stat_col_3:1,stat_col_1:1,rest:15,auth_user_registration_rol:[8,10],ldapserv:8,versu:4,baseapp:[12,17],except:[18,2,17],param:[1,11],blob:[],pot:13,authoidview:[1,17],read:[12,22],get_redirect:[22,1,0],mygenericmodel:1,grid:1,whth:[],filterrel:[12,17],earphon:[12,13],integ:[15,19,17,4,5,12,1,22,14],server:[16,10,17,18,19,21,22,8],benefit:5,this_form_get:1,userldapmodelview:[22,1],output:[2,1,17],manag:[16,10,17,1,5,12,6,22],imagemanag:19,confirm:[1,16,7],definit:[15,17,1,4,5,19,6,21,20],inject:[19,1,17],ddl:12,utilview:17,power:[17,0,11],stringfield:[17,6,11],each:[9,15,11,17,5,12,1,22,2,20,19,7],broken:17,spacelab:21,"__name__":[9,1,18,12,6,22,8],simpleview2:11,src:[9,19],get_url:19,backup:12,effici:1,contacttimechartview:[4,22,21],msgstr:13,complianc:17,her:[10,5],area:21,accordion_tag:9,start:[22,16,10,7,17],interfac:[15,19,17,4,5,12,6,0],auth_user_db:1,lot:[3,16],tupl:[4,1,8],regard:2,pull:17,possibl:[16,10,11,17,1,13,22,20,7],yetothermodelview:1,foreignkei:[15,4,22,5],embed:19,sqlamodel:[9,17,4,12,1,21,13,7],uid:[2,8],creat:[9,15,16,11,1,4,18,17,5,14,12,6,0,21,13,22,20,19,7],certain:21,file:[],fill:[10,17],again:[13,10],googl:[3,10,17,4,1,21,20],gettext:7,field:[15,20,10,11,1,4,17,5,12,6,22,8,7],valid:[15,17,11,1,20,7],collis:1,you:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],poor:4,openid:[],my_column_nam:1,finali:13,sequenc:[22,17],org:16,select2rowidget:[],grupo:13,reduc:17,directori:[9,15,11,17,12,13,22,8],auth_ldap_uid_field:8,descript:[9,11,1,20,8,7],mimic:2,mass:0,cpu:12,repat:20,represent:15,all:[9,15,16,10,11,20,4,18,17,5,12,13,1,0,21,6,22,2,8,7],skeleton:[],form_post:[1,11],countrydirectchartview:[4,1],month:[4,1,17],adition:19,follow:[9,15,16,10,11,4,0,12,1,21,13,22,8,14],alt:19,childmodel:1,update_user_auth_stat:1,doanload:22,contactgroup:[13,15,6,7],form_column:[1,11],tail:11,userremoteusermodelview:1,queri:[15,17,18,1,22,2,7],begin_d:5,registeruseroidview:1,mail_use_tl:10,consum:12,straightforward:16,fals:[9,15,1,4,5,12,6,0,21,22,8,19,14],find_permissions_view_menu:1,mechan:17,fab:[9,16],find_permiss:1,employee_numb:[7,5],list:[],last_nam:[22,1,10],small:[9,12],description_column:1,countrystat:[4,1],zero:[16,17],pass:[9,11,1,12,6,21,22,7],further:20,what:[],sub:17,sum:[4,1],abl:[],delet:[15,22,1,0,17],piechart:[4,1],version:[],last_login:[12,22,17],primary_kei:[15,19,4,5,12,1,2,14],activation_hash:[],"public":[15,20,10,11,1,18,6,22,8],full:15,themselv:10,my_show_templ:7,goodby:11,modifi:12,valu:[15,17,4,1,21,13,20,7],search:[9,3,17,1,8,7],surpress:17,popen:2,prior:[4,2,11],assoc_benefits_employe:5,babel_default_fold:16,narrow:17,auth_role_publ:[8,17],hash_db_password:12,via:[22,20,17],depart:[7,5],set_link_filt:17,modelview:[],filenam:[9,19,1],reorg:17,href:[19,17,21,1,11],add_permissions_menu:1,select:[21,1,7,17],internation:[16,21],regist:[],two:[9,15,16,11,1,4,18,5,19,6,13,22],toggl:17,more:[3,16,11,4,17,5,12,21,13,7],abspath:18,site:[22,1,20,11],post_delet:1,flag:[13,16,8,17],particular:[4,5,0],edit_widget:1,compani:5,form_get:[1,11],none:[15,1,17],endpoint:[15,1,5,17],dev:17,histori:[17,1,5,11],portugues:[13,17],sent:10,male:15,def:[15,11,4,5,19,1,0,6,22,2,7],mail_serv:10,registr:[],share:[9,5],templat:[],personchartview:12,cours:[15,4,5,21,22,2],goal:20,first_nam:[12,22,1,10],divid:17,anoth:13,list_contact:9,corrigir:[],divis:17,simpl:[],css:[],"_thumb":19,resourc:[12,5],show_titl:1,function_id:5,associ:[16,17,1,11,5,20,21,22],list_templ:[9,1],"short":2,django:[15,1,20],caus:17,disktyp:21,genapp:13,permissionview:1,help:[9,20,21],edit_fieldset:[15,1],paramet:[9,10,11,1,4,17,0,6,22,8],aggregate_avg:[4,1],style:[15,17,1,20,21,22,8],bypass:1,alter:[12,22,10],good:16,"return":[15,11,4,17,5,19,1,0,6,22,2,7],timestamp:20,datarequir:[17,11],framework:[9,3,16,11,4,17,5,12,13,1,15,14,21,6,22,2,20,7],loginmanag:[12,1,17],userid:1,unlik:16,authent:[],easili:[9,16,10,0,12,20,21,22],simpleview1:11,unicod:17,procedur:12,realli:[22,2,0],count_us:1,connect:[15,20,8,14],todo:17,event:[],mail_password:10,difer:1,get_sess:1,file_nam:1,found:16,differ:[16,10,17,4,5,19,6,21,22],basefilterrel:17,asc:[1,7],cooki:[18,17,11],reason:15,english:[13,16],script:[9,12,13,17],assign:[22,1,8,17],detailview:1,permissionviewmenu:1,feel:[9,12,11],number:[4,21,11],evolut:4,genericinterfac:2,done:[9,21,16,5,17],blank:8,miss:[15,17],guess:9,guest:[15,3,4],nome:13,least:[2,1,16],metho:15,myuser:22,colnam:[4,1],img_siz:[19,8,17],store:[1,8,21],schema:[12,15,6],adher:20,option:[15,16,10,17,4,18,0,1,21,22],relationship:[15,17,4,5,12,1,22],part:[9,22,1,11],sqlainterfac:[15,19,17,4,5,12,0,7],kind:[4,21,6,5,11],list_thumbnail:17,xpto2:1,remov:[15,11,1,17,0,12,6,22,7],my_extra_arg:7,jqueri:[9,17],str:[2,4,1,19],groupmasterview:21,packag:[15,16,10,17,20,13],"null":[7,17],pre_upd:1,juici:11,imagin:2,built:3,lib:[9,17],self:[15,19,10,11,20,4,17,5,12,1,0,6,22,2,8,7],also:[15,11,1,4,17,6,21,22,8,7],build:[20,8,5,11],textareafield:[],referencefield:6,distribut:16,choos:[4,8,21],most:[15,4,18,5,11],plan:[13,16],diferent:17,clear:1,ext:[],clean:22,scaffold:20,awesom:[15,1,20,17],stat_dat:[4,1],gold:4,babelpkg:[13,17,16,11],babel_init:13,can_add:[1,7],session:[9,16,11,18,17,12,1,21,6,22,2,7],sqla:[15,19,17,4,18,5,12,1,0,22,2,14],font:[15,1,20,17],find:[13,4,1,15,11],access:[16,10,17,11,1,22],pretti:[15,4,1,17],showblockwidget:17,department_queri:7,unus:[1,17],"__file__":18,col_nam:[1,7],him:10,functionview:5,get_url_thumbnail:19,common:[12,1],wrote:17,set:[10,1,20,21,8,7],see:[9,15,16,11,5,6,2],sec:22,arg:1,someth:[9,22,0,11],country_id:4,won:11,field_str:12,experi:[4,7,11],altern:[2,20],externalserv:14,add_us:1,numer:17,lazy_gettext:[10,11,4,1,21,13,22],javascript:[],isol:16,benefit_id:5,solv:[16,7],popul:[4,1],both:6,last:[16,22,6,8,17],foreign:17,barchart:4,redirect_url:11,let:[15,16,10,11,4,5,6,21,13],list_titl:1,securitymanag:[],add_registr:[],simpli:16,auditmixin:[15,1,17],point:[1,10,11],instanti:[12,1],header:[17,11],add_link:[17,21,1,11],linux:[2,16],batteri:20,changed_on:[12,22,17],backend:[12,22,1],user_model:22,tail_j:9,stamp:1,criar:[],poor_perc:4,empti:[9,15,1,17],sinc:[15,22,17,16,11],monthli:4,treatment:15,edit_form_query_cascad:1,static_url_path:1,imag:[],convert:17,func:[4,1],educ:4,remote_us:[20,22,1,8,17],look:[9,15,10,11,1,4,18,5,19,6,21,13,22,8,7],histor:4,formatt:[4,1,17],"while":16,abov:[9,21],error:[17,20,11],fun:6,everyon:22,propag:8,user_show_fieldset:22,readi:[4,16,21],columnchart:[4,1],itself:[2,1,16,17],default_view:[21,1,11],decor:[],employee_id:5,grant:20,belong:[16,10,5],route_bas:[17,1,11],conflict:16,higher:[4,17],get_order_columns_list:17,optim:[19,17],quickchart:4,moment:10,user:[],wherev:2,implement:[15,10,11,4,0,19,1,21,22,2],myaction:0,lower:[22,20,17],entri:[1,7,5,11],person:[15,19,1,12,6,22],college_perc:[4,1],propos:3,explan:15,jsapi:17,head_j:[9,17],pssession:2,delete_al:[2,22,1,0],mysql:[12,20,14],msgid:13,group_by_column:[4,21,17],python3:17,pretty_month_year:4,auth_ldap_firstname_field:8,listblock:[21,17],bin:[12,16],varchar:12,format:[2,4,1],big:[9,20],nginx:22,datasourc:2,can_delet:7,basicconfig:[],oid_ask_for:17,personal_phon:[6,15,1],resolv:17,collect:[1,21],api:[],givennam:8,myinlinet:21,group_id:[],encount:20,often:16,creation:[22,1,7,17],some:[15,19,10,4,5,12,1,13,22,20],back:[17,1,11],virtualenv:16,listfield:6,per:[4,17],create_db:[12,17],retro:12,contacto:13,nose:17,object:[12,4,1,8,15],run:[16,17,18,11,5,12,13,22],method3:11,method1:11,show_cascad:[21,5,17],funcnam:[4,1],exemplo:[],wget:12,psview:2,mssql:[12,20],permission_view_menu:1,constraint:[7,17],searchwidget:1,page:[9,3,10,11,17,5,1,21,20],modal:17,goodi:20,block:[9,21,17,7,11],"__repr__":[15,4,6,5],listwidget:[1,21],update_us:1,ensur:10,generalxpto_permiss:1,inclus:17,your_js_fil:9,question:[15,17],submit:[1,10,11],custom:[],includ:[],suit:17,blueprint:[1,11],himself:8,viewmenu:1,link:[10,17,11,19,1,21],translat:[],russian:[13,17],line:[15,2,16,17],info:[15,17,1,11,6,22,7],concaten:[19,4,1],utf:13,quickfil:[19,21],simplebychartview:1,readlin:2,auth_user_remote_us:1,booleanfield:1,mymodel:[12,1,7],impl:1,get_all_us:1,quickhowto2:[2,14],img_upload_fold:[19,8,17],repres:[2,11],guarante:22,edit_form_query_rel_field:[12,1,17],menu_access:1,pre_delet:1,titl:[9,10,17,4,11,1],sequenti:1,queryselectfield:[7,17],master_div_width:1,nice:[1,5],draw:[4,1],mongodb:[],algorithm:11,microsoft:22,masterdetail:17,hello:11,code:[9,15,16,17,4,18,5,12,6,0,21,13,22],partial:[9,15,20,17],register_mail:10,scratch:[9,22],add_form_query_cascad:1,compact:17,privat:[20,10],send:[17,10,0,11],granular:[22,1,11],aris:15,created_bi:[22,1,7],mous:17,genericmodel:[2,1,17],quickhowto:[15,4,14],gender:[15,6,7],button:[4,17],model_cl:1,fewer:15,"try":[15,2,16,10,17],refer:[],pleas:[12,15],create_blueprint:1,cfg:13,video:16,download:[15,22,16],before_request:[],mongodb_set:8,click:[],compat:[],index:[],view_menu:1,edit_cascad:[21,17],cell:17,get_file_original_nam:1,garbag:22,whatev:[9,22,2,21],inspect:[22,1],panel_begin:9,len:4,bodi:9,logout:17,ubuntu:16,vertic:[20,17],implicit:17,authldapview:1,convers:17,thumbnail_s:[19,1],chang:[],fiscal_numb:5,chanc:16,add_permission_rol:1,base_permiss:[2,1,7],appli:[9,4,1,22,2,7],app:[9,15,16,11,1,18,17,5,12,6,21,13,22,8,14],apt:16,"boolean":17,regexp:2,from:[],doubl:17,upgrad:12,next:[],few:[15,21],doubt:2,panel:[9,17],flask_babelpkg:22,base_ord:[1,7,17],account:[8,10],alia:1,related_view:[9,15,17,1,4,5,12,6,0,21,13],fetch:[10,17],employe:[22,7,5],sqlite:[12,18,20,14,17],process:[4,1,10,11],sudo:16,tag:[6,5,17],extra_class:7,tab:[15,21,5,17],serial:21,mymodelview:[22,1,21],instead:[9,17,4,11,12,22],overridden:[9,17,11,1,21,7],filterclass:[1,7],alloc:5,auth_user_oid:1,seriou:16,restruct:17,correspond:[12,13,22],issu:[12,3,2,15,17],prettifi:17,allow:[15,10,11,17,1,2,7],mongoengineinterfac:6,move:[12,17],baselayout:[9,1],crash:17,greater:17,mongoimag:19,python:[],auto:[3,17],extra_arg:[1,7,17],handi:10,auth:[22,1,10,17],easy_instal:16,myuserdbmodelview:22,"__bind_key__":14,chart_3d:[4,1],showwidget:1,conf_password:22,mastert:1,anyth:[18,1],edit:[],dynamicform:11,from_object:[6,12,22,1,8],subset:2,view_nam:1,created_on:[12,22,17],meta:9,"static":[9,1,7,17],our:[15,4,5,6,21,2],special:[15,17,5,0,21,22,8,7],out:[15,2,8,10],list_widget:[19,1,21],categori:[15,11,1,4,17,5,6,21,13,22],rel:[9,17,11,1,21,8],metaclass:17,statist:[4,1],insid:11,contruct:1,control:[15,1],dictionari:[4,1,8,7],releas:15,pretifi:1,log:[21,6,7,17],static_fold:1,head_meta:9,navbar:[9,21,17],unwant:22,could:[15,21,17],keep:[12,20,11],datetimefield:[6,17],length:17,outsid:17,fieldwidget:[7,17],mai:[15,2,11],kerbero:22,order_column:[21,1,17],select2widget:7,mkdir:[],system:[2,16],messag:[9,10,17,11,13,7],sec_model:22,attach:11,template_fold:1,"final":[9,4,5,21,22,2],del_permiss:1,mysecuritymanag:[22,10],textfield:[7,17],exactli:[15,22,6],lista:13,haven:12,structur:[9,15,1,7],genericsess:[2,1],bind:[8,14,17],pgsql:12,py3:16,addformwtf:7,myproject:[],have:[9,15,16,11,4,17,5,12,1,21,22,2,8,19,7],tabl:[],need:[9,16,11,20,18,17,5,1,22,8],min:17,babel:[],rout:[1,11],expos:[],mix:[1,21],builtin:[20,17],which:14,singl:[2,22,1,0],unless:12,who:22,oracl:[12,20,17],why:12,get_app:1,can_edit:[1,7],myuserdbview:22,url:[10,17,11,19,1,21,8],serverdisktypemodelview:21,setlevel:6,hardcod:17,wtform:[17,1,16,11],face:16,deni:17,list_column:[15,17,5,19,1,21,6,22,2,7],bs3textfieldrowidget:7,add_permiss:1,find_view_menu:1,thisismyscretkei:18,text:[9,17,11,5,1,21,13],eas:9,redirect:[22,17,0,11],locat:1,is_item_publ:1,auth_typ:[8,10,17],baseiterfac:17,should:[15,0,12,1,21,6,2],manufactur:1,restructur:17,suppos:4,combo:7,local:14,hope:[12,15],contribut:[],notat:[15,17],familiar:15,add_templ:[9,1],autom:21,ab_us:12,db2:20,myindexview:21,filtercontain:12,enabl:[15,10,17,11,1,8],baseinterfac:17,add_permissions_view:1,integr:[15,20,5,11],partit:20,contain:[15,1,10,21],get_user_by_id:1,project_nam:[21,11],frame:4,orphan:22,"_permission_nam":1,show_form:[9,17],servermodelview:21,bs3textfieldwidget:7,gmail:[22,10],correctli:[10,17],state:12,thumbnail:[19,20,17],kei:[],entir:[9,1],flask_mongoengin:[6,1],addit:[19,4,22,7],stat2:4,stat1:4,rtype:[],admin:[16,17,18,20,22,8],equal:17,etc:[9,16,11,17,5,12,1,0,22,20],instanc:[1,14,17],changed_bi:22,app_nam:[1,8],jumbotron:21,strftime:5,comment:8,venv:16,month_nam:4,perm_view:1,sqlainterdac:22,respect:[2,4,1],view_menu_nam:1,groupgeneralview:12,quit:16,addition:[15,4,16,11],compos:4,compon:9,json:[],immedi:16,wtf:[17,1,10,11],bit:6,first_app:16,togeth:4,allwai:[7,17],present:[15,10,11,1,4,17,6,21,20],multi:20,auth_view:1,cursor:17,intranet:22,endblock:[9,21,11],layer:15,helper:17,almost:[9,21],demo:[15,3,4],customis:1,revis:[],welcom:[15,3,4],handl:[1,20,7,0,17],infer:17,edit_contact:9,http:[15,19,16,11,4,12,1,21,2],benefitview:5,mybas:9,column_nam:1,student:4,expand:[6,15,22,1],audit:[],sqlalchemy_database_uri:[18,8,14],update_redirect:[22,1,0,11],builder:16,remenb:17,well:[18,11],exampl:[],command:[],filesystem:19,backref:[22,5],latest:17,photo_img:19,rocket:[22,0],less:[12,17],action_post:1,fabmanag:[12,16,17],web:[15,16,17,20,22,8],rapid:3,registerus:10,nullabl:[15,19,17,4,5,12,1,14],add:[],cleanup:[],match:[22,8,7],crud:[15,3,17,1,6,20],know:[12,2],password:[16,17,12,1,22,8,14],my_project:9,desc:[1,7],insert:[9,16,10,17,11,20],resid:14,like:[9,15,16,11,4,17,5,12,1,0,21,22,2,8,19,7],success:[22,1,10],oid_ask_for_opt:17,necessari:[22,10,0,17],resiz:[19,8,17],mymodelview2:21,mymodelview3:21,mymodelview1:21,fabtest10:10,drop:12,gridf:19,proper:17,home:17,auth_ldap_serv:8,librari:[],tmp:12,avoid:1,useroauthmodelview:1,leav:[1,8],encourag:12,add_permission_view_menu:1,host:18,babel_extract:13,although:[12,15],security_manager_class:[6,22,1,17],simpler:7,edit_form:[9,1,7,17],about:[],actual:[21,16,17],column:[],constructor:[1,11],disabl:0,chart_templ:1,own:[9,15,10,11,4,17,0,19,1,21,13,22,2,20,7],auth_user_ldap:1,automat:[],contactchartview:[4,22],index_templ:21,merg:17,myform:11,pictur:17,much:[2,3,1,11],"var":[13,22,20,8,17],"function":[],auth_ldap_email_field:8,brand:17,login_count:[12,22,17],oauth:1,overflow:17,inlin:[21,17],mail_default_send:10,count:[15,4,22,1,17],made:[15,6,21],displai:[9,15,17,4,19,1,21,13],record:[9,15,10,11,17,5,1,0,2,20],limit:[1,16,17],problem:[20,16,17],flask_appbuild:[11,1,12,6,21,22,7],pil:16,"int":[2,1,17],dure:21,pid:2,pie:4,fail_login_count:[12,22,17],contact_group:[15,4,6],probabl:16,detail:[15,3,11,1,4,18,17,5,6,21,22,20,7],virtual:[16,17],detailt:1,other:[16,17,4,11,1,21],lookup:20,futur:[1,17],rememb:[9,15,17,1,4,5,6,21,7],varieti:20,mywidgetlist:21,stat:[4,1],repeat:16,areachart:[4,21],debian:16,sqlaintefac:12,rule:[9,7],getlogg:6},objtypes:{"0":"py:module","1":"py:attribute","2":"py:method","3":"py:function","4":"py:class"},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","class","Python class"]},filenames:["actions","api","generic_datasource","index","quickcharts","relations","quickhowto_mongo","advanced","config","templates","user_registration","views","versionmigration","i18n","multipledbs","quickhowto","installation","versions","quickminimal","quickfiles","intro","customizing","security"],titles:["Actions","API Reference","Generic Data Sources","Flask-AppBuilder","Chart Views","Model Relations","Model Views on MongoDB","Advanced Configuration","Base Configuration","Templates","User Registration","Base Views","Version Migration","i18n Translations","Multiple Databases","Model Views (Quick How to)","Installation","Versions","Quick Minimal Application","Model Views with Files and Images","Introduction","Customizing","Security"],objects:{"flask.ext.appbuilder.views":{CompactCRUDMixin:[1,4,1,""],ModelView:[1,4,1,""],IndexView:[1,4,1,""],PublicFormView:[1,4,1,""],MasterDetailView:[1,4,1,""],SimpleFormView:[1,4,1,""]},"flask.ext.appbuilder.charts.views":{TimeChartView:[1,4,1,""],GroupByChartView:[1,4,1,""],DirectByChartView:[1,4,1,""],BaseChartView:[1,4,1,""],DirectChartView:[1,4,1,""],ChartView:[1,4,1,""]},"flask.ext.appbuilder.charts.views.GroupByChartView":{definitions:[1,1,1,""]},"flask.ext.appbuilder.charts.views.BaseChartView":{group_bys:[1,1,1,""],chart_widget:[1,1,1,""],width:[1,1,1,""],chart_type:[1,1,1,""],search_widget:[1,1,1,""],chart_template:[1,1,1,""],chart_title:[1,1,1,""],group_by_label:[1,1,1,""],chart_3d:[1,1,1,""]},"flask.ext.appbuilder":{baseviews:[11,0,0,"-"],base:[1,0,0,"-"],filemanager:[1,0,0,"-"],actions:[1,0,0,"-"],views:[1,0,0,"-"]},"flask.ext.appbuilder.filemanager":{get_file_original_name:[1,3,1,""]},"flask.ext.appbuilder.models.generic.GenericSession":{query:[1,2,1,""],clear:[1,2,1,""],get:[1,2,1,""],all:[1,2,1,""],delete_all:[1,2,1,""]},"flask.ext":{appbuilder:[3,0,0,"-"]},"flask.ext.appbuilder.baseviews.BaseCRUDView":{edit_form_query_rel_fields:[1,1,1,""],pre_update:[1,2,1,""],related_views:[1,1,1,""],show_columns:[15,1,1,""],edit_form_query_cascade:[1,1,1,""],show_template:[1,1,1,""],edit_template:[1,1,1,""],list_template:[1,1,1,""],add_form_query_cascade:[1,1,1,""],validators_columns:[1,1,1,""],edit_form_extra_fields:[1,1,1,""],post_add:[1,2,1,""],list_widget:[1,1,1,""],page_size:[1,1,1,""],add_form_query_rel_fields:[1,1,1,""],edit_fieldsets:[1,1,1,""],list_title:[1,1,1,""],post_delete:[1,2,1,""],post_update:[1,2,1,""],pre_add:[1,2,1,""],add_template:[1,1,1,""],list_columns:[15,1,1,""],show_widget:[1,1,1,""],show_title:[1,1,1,""],order_columns:[1,1,1,""],edit_widget:[1,1,1,""],edit_columns:[15,1,1,""],add_title:[1,1,1,""],edit_form:[1,1,1,""],add_widget:[1,1,1,""],show_fieldsets:[1,1,1,""],pre_delete:[1,2,1,""],add_fieldsets:[1,1,1,""],description_columns:[1,1,1,""],add_columns:[15,1,1,""],edit_title:[1,1,1,""],add_form_extra_fields:[1,1,1,""],add_form:[1,1,1,""]},"flask.ext.appbuilder.models.mixins.FileColumn":{impl:[1,1,1,""]},"flask.ext.appbuilder.security":{manager:[1,0,0,"-"],decorators:[11,0,0,"-"]},"flask.ext.appbuilder.models.generic":{GenericColumn:[1,4,1,""],GenericModel:[1,4,1,""],GenericSession:[1,4,1,""]},"flask.ext.appbuilder.baseviews":{BaseView:[1,4,1,""],BaseCRUDView:[15,4,1,""],expose:[11,3,1,""],BaseModelView:[1,4,1,""]},"flask.ext.appbuilder.baseviews.BaseModelView":{base_filters:[1,1,1,""],search_form:[1,1,1,""],search_columns:[1,1,1,""],search_widget:[1,1,1,""],label_columns:[1,1,1,""],base_order:[1,1,1,""],datamodel:[1,1,1,""]},"flask.ext.appbuilder.views.MasterDetailView":{master_div_width:[1,1,1,""]},"flask.ext.appbuilder.base":{AppBuilder:[1,4,1,""]},"flask.ext.appbuilder.models.mixins.ImageColumn":{impl:[1,1,1,""]},"flask.ext.appbuilder.charts":{views:[1,0,0,"-"]},"flask.ext.appbuilder.models":{generic:[1,0,0,"-"],group:[1,0,0,"-"],mixins:[1,0,0,"-"]},"flask.ext.appbuilder.models.mixins":{AuditMixin:[1,4,1,""],ImageColumn:[1,4,1,""],FileColumn:[1,4,1,""],BaseMixin:[1,4,1,""]},"flask.ext.appbuilder.models.group":{aggregate_sum:[1,3,1,""],aggregate_avg:[1,3,1,""],aggregate_count:[1,3,1,""]},"flask.ext.appbuilder.security.manager.BaseSecurityManager":{registeruserdbview:[1,1,1,""],auth_user_ldap:[1,2,1,""],has_access:[1,2,1,""],update_user:[1,2,1,""],find_view_menu:[1,2,1,""],add_permission:[1,2,1,""],add_permissions_view:[1,2,1,""],find_permissions_view_menu:[1,2,1,""],del_permission_role:[1,2,1,""],add_permission_role:[1,2,1,""],get_all_users:[1,2,1,""],add_permissions_menu:[1,2,1,""],registeruser_view:[1,1,1,""],update_user_auth_stat:[1,2,1,""],del_permission:[1,2,1,""],lm:[1,1,1,""],useroauthmodelview:[1,1,1,""],userdbmodelview:[1,1,1,""],auth_user_remote_user:[1,2,1,""],oauth_handler:[1,1,1,""],auth_user_db:[1,2,1,""],resetmypasswordview:[1,1,1,""],find_permission_view_menu:[1,2,1,""],resetpasswordview:[1,1,1,""],authremoteuserview:[1,1,1,""],authoidview:[1,1,1,""],userremoteusermodelview:[1,1,1,""],add_permission_view_menu:[1,2,1,""],oid:[1,1,1,""],find_permission:[1,2,1,""],authoauthview:[1,1,1,""],authdbview:[1,1,1,""],oauth:[1,1,1,""],count_users:[1,2,1,""],security_cleanup:[1,2,1,""],authldapview:[1,1,1,""],auth_user_oid:[1,2,1,""],useroidmodelview:[1,1,1,""],is_item_public:[1,2,1,""],auth_view:[1,1,1,""],find_user:[1,2,1,""],reset_password:[1,2,1,""],del_view_menu:[1,2,1,""],registeruseroidview:[1,1,1,""],user_view:[1,1,1,""],userldapmodelview:[1,1,1,""],get_user_by_id:[1,2,1,""],add_view_menu:[1,2,1,""],add_user:[1,2,1,""]},"flask.ext.appbuilder.security.manager":{BaseSecurityManager:[1,4,1,""]},"flask.ext.appbuilder.security.decorators":{has_access:[11,3,1,""],permission_name:[1,3,1,""]},"flask.ext.appbuilder.views.PublicFormView":{default_view:[1,1,1,""],form:[1,1,1,""],form_post:[1,2,1,""],form_fieldsets:[1,1,1,""],form_title:[1,1,1,""],form_columns:[1,1,1,""],edit_widget:[1,1,1,""],form_get:[1,2,1,""]},"flask.ext.appbuilder.baseviews.BaseView":{default_view:[1,1,1,""],base_permissions:[1,1,1,""],route_base:[1,1,1,""],create_blueprint:[1,2,1,""],update_redirect:[1,2,1,""],static_folder:[1,1,1,""],get_redirect:[1,2,1,""],extra_args:[1,1,1,""],template_folder:[1,1,1,""],render_template:[1,2,1,""]},"flask.ext.appbuilder.views.ModelView":{action:[1,2,1,""],action_post:[1,2,1,""]},"flask.ext.appbuilder.base.AppBuilder":{get_session:[1,1,1,""],add_view_no_menu:[1,2,1,""],app_name:[1,1,1,""],app_icon:[1,1,1,""],app_theme:[1,1,1,""],version:[1,1,1,""],add_link:[1,2,1,""],add_view:[1,2,1,""],add_separator:[1,2,1,""],security_cleanup:[1,2,1,""],"__init__":[1,2,1,""],get_app:[1,1,1,""]},"flask.ext.appbuilder.actions":{action:[1,3,1,""]},"flask.ext.appbuilder.views.SimpleFormView":{form:[1,1,1,""],form_post:[1,2,1,""],form_columns:[1,1,1,""],form_title:[1,1,1,""],edit_widget:[1,1,1,""],form_get:[1,2,1,""]}},titleterms:{skeleton:15,show:9,permiss:22,compactcrudmixin:1,group:[4,1],expos:15,flask:[3,1],menu:21,fix:[3,17],configur:[8,10,7],add:9,appbuild:[3,1],masterdetailview:1,ldap:10,basemodelview:1,applic:[15,18],timechartview:1,contribut:3,python:16,initi:[6,16],securitymanag:[],requir:16,introduct:[13,20],edit:9,config:[13,8],list:9,authent:[22,10],publicformview:1,cascad:9,quick:[13,15,18],view:[15,11,1,4,0,19,6,21],basecrudview:1,direct:4,indexview:1,librari:9,compat:16,index:21,what:[],extend:22,databas:[14,10],content:3,version:[12,17],method:15,refer:1,widget:21,kei:8,advanc:7,migrat:12,gener:[2,1],javascript:9,baseregisterus:1,behaviour:21,step:19,base:[15,22,8,7,11],chartview:1,column:1,filter:7,aggr:1,action:[1,0],improv:17,chang:21,filemanag:1,extra:[1,7,5],modelview:1,basesecuritymanag:1,automat:22,deprec:[4,1],api:1,instal:16,custom:[22,21],your:[15,4,0,19,6,22],from:12,support:22,regist:[15,4,6],theme:21,construct:21,next:19,json:15,includ:20,type:22,"function":[9,1],form:7,imag:19,relat:5,translat:13,i18n:13,bug:[3,17],baseview:[1,11],baseregisteruserview:[],"default":[7,21],groupbychartview:1,setup:18,properti:5,exampl:2,defin:[15,4,6,19,0],were:[],simpleformview:[1,11],registr:10,argument:7,templat:[9,7,21],sourc:[2,1],file:19,tabl:3,pip:16,decor:1,multipl:14,secur:[22,1,7],babel:13,directbychartview:1,how:[13,15,18],cleanup:22,role:22,indic:3,simpl:15,css:9,openid:10,mongodb:6,chart:[4,1],beta:1,user:[22,10],mixin:1,mani:5,directchartview:1,data:[2,4,1],audit:22,footer:21,minim:18,ext:1,contact:15,command:2,basechartview:1,model:[15,1,5,19,6,22],order:7}}) \ No newline at end of file diff --git a/docs/_build/html/versionmigration.html b/docs/_build/html/versionmigration.html index 4b4393a96..e7b620144 100644 --- a/docs/_build/html/versionmigration.html +++ b/docs/_build/html/versionmigration.html @@ -64,32 +64,25 @@

Version Migration

Migrating from 1.2.X to 1.3.X

There are some breaking features:

-

1 - Security models have changed, user’s can have multiple roles, not just one. So you have to migrate you db.

+

1 - Security models have changed, user’s can have multiple roles, not just one. So you have to upgrade your db.

  • The security models schema have changed.

    -

    If you are using sqlite, mysql or pgsql, use the following procedure:

    +

    If you are using sqlite, mysql, pgsql, mssql or oracle, use the following procedure:

    1 - Backup your DB.

    2 - If you haven’t already, upgrade to flask-appbuilder 1.3.0.

    3 - Issue the following commands, on your project folder where config.py exists:

    -
    cd /your-main-project-folder/
    -wget https://raw.github.com/dpgaspar/Flask-AppBuilder/master/bin/migrate_db_1.3.py
    -python migrate_db_1.3.py
    +
    $ cd /your-main-project-folder/
    +$ fabmanager upgrade-db
     

    4 - Test and Run (if you have a run.py for development)

    -
    python run.py
    +
    $ fabmanager run
     
    -

    If not (DB is not sqlite, mysql or pgsql), you will have to alter the schema your self. use the following procedure:

    -
    -

    1 - Backup your DB.

    -

    2 - If you haven’t already, upgrade to flask-appbuilder 0.7.0.

    -

    3 - issue the corresponding DDL commands to:

    -

    ALTER TABLE ab_user MODIFY COLUMN password VARCHAR(256)

    -
    +

    For sqlite you’ll have to drop role_id columns and FK yourself. follow the script instructions to finish the upgrade.

diff --git a/docs/_build/html/versions.html b/docs/_build/html/versions.html index 5ba8882d8..014ac469d 100644 --- a/docs/_build/html/versions.html +++ b/docs/_build/html/versions.html @@ -78,10 +78,10 @@

Improvements and Bug fixes on 1.3.0 diff --git a/docs/quickfiles.rst b/docs/quickfiles.rst index 7c5983520..d37f8f8de 100644 --- a/docs/quickfiles.rst +++ b/docs/quickfiles.rst @@ -2,7 +2,7 @@ Model Views with Files and Images ================================= You can implement views with images or files embedded on the model's definition. You can do it using SQLAlchemy or -MongoDB (MongoEngine). When using SQLAlchemy files and images are saved on the filesystem, on MongoDB on the db. +MongoDB (MongoEngine). When using SQLAlchemy, files and images are saved on the filesystem, on MongoDB on the db (GridFS). Define your model (models.py) ----------------------------- @@ -15,22 +15,44 @@ Define your model (models.py) class Person(Model): id = Column(Integer, primary_key=True) name = Column(String(150), unique = True, nullable=False) - photo = Column(ImageColumn, nullable=False ) + photo = Column(ImageColumn(size=(300, 300, True), thumbnail_size=(30, 30, True))) def photo_img(self): im = ImageManager() if self.photo: - return Markup('Photo') + return Markup('Photo') else: - return Markup('Photo') - -Create an additional method in this case *photo_img*, to inject your own custom HTML, to show your saved images. In this example the customized method is showing the images, and linking them with the show view. + return Markup('Photo') + + def photo_img_thumbnail(self): + im = ImageManager() + if self.photo: + return Markup('Photo') + else: + return Markup('Photo') -Later reference this method like it's a column on your view. + +Create two additional methods in this case *photo_img* and *photo_img_thumbnail*, to inject your own custom HTML, +to show your saved images. In this example the customized method is showing the images, and linking them with the show view. +Notice how the methods are calling *get_url* and *get_url_thumbnail* from ImageManager, these are returning the +url for the images, each image is saved on the filesystem using the global config **IMG_UPLOAD_FOLDER**. +Each image will have two files with different sizes, images are saved as _sep_, and _sep__thumb .. note:: The "ImageColumn" type, is an extended type from Flask-AppBuilder. +Later reference this method like it's a column on your view. + +To implement image or file support using GridFS from MongoDB is even easier, take a look at the example: + +https://github.com/dpgaspar/Flask-AppBuilder/tree/master/examples/mongoimages + Define your Views (views.py) ---------------------------- @@ -44,15 +66,15 @@ Define your Views (views.py) list_widget = ListThumbnail - label_columns = {'name':'Name','photo':'Photo','photo_img':'Photo'} - list_columns = ['photo_img', 'name'] + label_columns = {'name':'Name','photo':'Photo','photo_img':'Photo', 'photo_img_thumbnail':'Photo'} + list_columns = ['photo_img_thumbnail', 'name'] show_columns = ['photo_img','name'] -Notice that we are overriding the *list_widget*, the widget that is normally used by ModelView. +We are overriding the *list_widget*, the widget that is normally used by ModelView. This will display a thumbnail list, excellent for displaying images. -We're not using the *image* column but the method *photo_img* we have created. -This method will display the image and link it to the show view. +We're not using the *image* column but the methods *photo_img* and *photo_img_thumbnail* we have created. +These methods will display the images and link them to show view. And that's it! images will be saved on the server. Their file names will result in the concatenation of UUID with their original name. They will be resized for optimization. diff --git a/docs/versions.rst b/docs/versions.rst index 39457e300..3797cbafc 100644 --- a/docs/versions.rst +++ b/docs/versions.rst @@ -23,6 +23,7 @@ Improvements and Bug fixes on 1.3.0 - New, AppBuilder.add_link supports endpoint names on href parameter, internally will try to use url_for(href). - Fix, Zero division catch on aggregate average function. - New, added form validators for field min and max length. +- New, Image size can be configured per column, ImageColumn support size and thumbnail size parameters. - (TODO) - fabmanager create-app para SQLA e MongoDB com diferentes esqueletos. - (TODO) - fabmanager support for factory apps. diff --git a/examples/mongoengine/config.py b/examples/mongoengine/config.py index dabd01cf1..13e32c67b 100644 --- a/examples/mongoengine/config.py +++ b/examples/mongoengine/config.py @@ -12,11 +12,6 @@ {'name': 'Flickr', 'url': 'http://www.flickr.com/'}, {'name': 'MyOpenID', 'url': 'https://www.myopenid.com'}] -#SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') -#SQLALCHEMY_DATABASE_URI = 'mysql://root:password@localhost/quickhowto' -#SQLALCHEMY_DATABASE_URI = 'postgresql://scott:tiger@localhost:5432/myapp' -#SQLALCHEMY_ECHO = True - MONGODB_SETTINGS = {'DB': 'testing'} BABEL_DEFAULT_LOCALE = 'en' diff --git a/examples/mongoimages/app/models.py b/examples/mongoimages/app/models.py index 8829b493b..6cc5d3ea6 100644 --- a/examples/mongoimages/app/models.py +++ b/examples/mongoimages/app/models.py @@ -70,15 +70,16 @@ def file_show(self): def image_show(self): if self.image: return Markup('Photo') else: return Markup('') def image_thumb_show(self): + print self.image, self.id if self.image: return Markup('Photo') else: return Markup('') diff --git a/examples/mongoimages/app/views.py b/examples/mongoimages/app/views.py index cb67ee8c3..6c9e12125 100644 --- a/examples/mongoimages/app/views.py +++ b/examples/mongoimages/app/views.py @@ -9,9 +9,19 @@ from app import appbuilder -from .models import ContactGroup, Contact, Tags +from .models import ContactGroup, Contact, Tags, Gender + +def fill_gender(): + try: + g1 = Gender(name='Male') + g1.save() + g2 = Gender(name='Female') + g2.save() + except: + pass + class ContactModelView(ModelView): datamodel = MongoEngineInterface(Contact) label_columns = {'image_thumb_show': 'Photo', 'image_show': 'Photo'} @@ -108,4 +118,5 @@ class ContactTimeChartView(GroupByChartView): appbuilder.add_view(ContactTimeChartView, "Contacts Birth Chart", icon="fa-dashboard", category="Contacts") appbuilder.security_cleanup() +fill_gender() diff --git a/examples/quickimages/app/models.py b/examples/quickimages/app/models.py index 250b0cba6..c713a0dd5 100644 --- a/examples/quickimages/app/models.py +++ b/examples/quickimages/app/models.py @@ -26,7 +26,7 @@ class Person(Model): name = Column(String(150), unique = True, nullable=False) address = Column(String(564)) birthday = Column(Date) - photo = Column(ImageColumn(thumbnail_size=(10,10,True), size=(300, 300, True))) + photo = Column(ImageColumn(thumbnail_size=(30, 30, True), size=(300, 300, True))) personal_phone = Column(String(20)) personal_celphone = Column(String(20)) personal_email = Column(String(64)) @@ -41,15 +41,20 @@ class Person(Model): def photo_img(self): im = ImageManager() if self.photo: - return Markup('Photo') + return Markup('Photo') else: - return Markup('Photo') + return Markup('Photo') - - def photo_img(self): + def photo_img_thumbnail(self): im = ImageManager() if self.photo: - return Markup('Photo') + return Markup('Photo') else: - return Markup('Photo') + return Markup('Photo') diff --git a/examples/quickimages/app/views.py b/examples/quickimages/app/views.py index a8be8fe45..e826f46b6 100644 --- a/examples/quickimages/app/views.py +++ b/examples/quickimages/app/views.py @@ -16,15 +16,10 @@ class PersonModelView(ModelView): add_title = 'Add Contact' edit_title = 'Edit Contact' - list_widget = ListThumbnail - - label_columns = {'name': 'Name', 'photo': 'Photo', 'photo_img': 'Photo', 'address': 'Address', - 'birthday': 'Birthday', 'personal_phone': 'Personal Phone', - 'personal_celphone': 'Personal Celphone', 'personal_email': 'Personal Email', - 'business_function': 'Business Function', - 'business_phone': 'Business Phone', 'business_celphone': 'Business Celphone', - 'business_email': 'Business Email', 'notes': 'Notes', 'person_group': 'Group', 'person_group_id': 'Group'} - list_columns = ['photo_img', 'name', 'personal_celphone', 'business_celphone', 'birthday', 'person_group'] + #list_widget = ListThumbnail + + label_columns = {'person_group_id': 'Group', 'photo_img': 'Photo', 'photo_img_thumbnail': 'Photo'} + list_columns = ['photo_img_thumbnail', 'name', 'personal_celphone', 'business_celphone', 'birthday', 'person_group'] show_fieldsets = [ ('Summary', {'fields': ['photo_img', 'name', 'address', 'person_group']}), diff --git a/flask_appbuilder/console.py b/flask_appbuilder/console.py index ed4eff7cf..c15a006d3 100644 --- a/flask_appbuilder/console.py +++ b/flask_appbuilder/console.py @@ -309,15 +309,22 @@ def babel_compile(target): @cli_app.command("create-app") @click.option('--name', prompt="Your new app name", help="Your application name, directory will have this name") -def create_app(name): +@click.option('-engine', prompt="Your engine type, SQLAlchemy or MongoEngine", type=click.Choice(['SQLAlchemy', 'MongoEngine']), + default='SQLAlchemy', help='Write your engine type') +def create_app(name, engine): """ Create a Skeleton application """ try: - url = urlopen("https://github.com/dpgaspar/Flask-AppBuilder-Skeleton/archive/master.zip") + if engine.lower() =='sqlalchemy': + url = urlopen("https://github.com/dpgaspar/Flask-AppBuilder-Skeleton/archive/master.zip") + dirname = "Flask-AppBuilder-Skeleton-master" + elif engine.lower() =='mongoengine': + url = urlopen("https://github.com/dpgaspar/Flask-AppBuilder-Skeleton-me/archive/master.zip") + dirname = "Flask-AppBuilder-Skeleton-me-master" zipfile = ZipFile(StringIO(url.read())) zipfile.extractall() - os.rename("Flask-AppBuilder-Skeleton-master", name) + os.rename(dirname, name) click.echo(click.style('Downloaded the skeleton app, good coding!', fg='green')) except: click.echo(click.style('Something went wrong', fg='red')) diff --git a/flask_appbuilder/filemanager.py b/flask_appbuilder/filemanager.py index cbb46364a..c603e1031 100644 --- a/flask_appbuilder/filemanager.py +++ b/flask_appbuilder/filemanager.py @@ -130,15 +130,18 @@ def get_url(self, filename): return filename.filename return self.relative_path + filename + def get_url_thumbnail(self, filename): + if isinstance(filename, FileStorage): + return filename.filename + return self.relative_path + thumbgen_filename(filename) + # Deletion def delete_file(self, filename): super(ImageManager, self).delete_file(filename) - self.delete_thumbnail(filename) def delete_thumbnail(self, filename): path = self.get_path(self.thumbnail_fn(filename)) - if op.exists(path): os.remove(path)