c# convert pdf to image open source : Export pdf form data to excel spreadsheet control application system web page azure asp.net console Flask9-part368

CHAPTER
THIRTEEN
THE APPLICATION CONTEXT
New in version 0.9.
One of the design ideas behind Flask is that there are two different “states” in which
code is executed. The application setup state in which the application implicitly is on
the module level. It starts when the Flask object is instantiated, and it implicitly ends
when the first requestcomes in. Whilethe applicationisinthis state a fewassumptions
are true:
• the programmer can modify the application object safely.
• no request handling happened so far
• you have to have a reference to the application object in order to modify it, there
is no magic proxy that can give you a reference to the application object you’re
currently creating or modifying.
In contrast, during request handling, a couple of other rules exist:
• while a request is active, the context local objects (flask.request and others)
point to the current request.
• any code can get hold of these objects at any time.
There is a third state which is sitting in between a little bit. Sometimes you are dealing
with an application in a way that is similar to how you interact with applications
during request handling just that there is no request active. Consider for instance that
you’re sitting in an interactive Python shell and interacting with the application, or a
command line application.
The application context is what powers the current_app context local.
13.1 Purpose of the Application Context
The main reason for the application’s context existence is that in the past a bunch of
functionality was attached to the request context in lack of a better solution. Since one
of the pillar’s of Flask’s design is that you can have more than one application in the
same Python process.
81
Export pdf form data to excel spreadsheet - extract form data from PDF in C#.net, ASP.NET, MVC, Ajax, WPF
Help to Read and Extract Field Data from PDF with a Convenient C# Solution
exporting data from excel to pdf form; export pdf form data to excel
Export pdf form data to excel spreadsheet - VB.NET PDF Form Data Read library: extract form data from PDF in vb.net, ASP.NET, MVC, Ajax, WPF
Convenient VB.NET Solution to Read and Extract Field Data from PDF
pdf form save in reader; extract data from pdf file to excel
So how does the code find the “right” application? In the pastwe recommended pass-
ing applications around explicitly, but that caused issues with libraries that were not
designed with that in mind.
Acommon workaround for that problem was to use the current_app proxy later on,
which was bound to the current request’s application reference. Since however creat-
ing such a request context is an unnecessarily expensive operation in case there is no
request around, the application context was introduced.
13.2 Creating an Application Context
To make an application context there are two ways. The first one is the implicit one:
whenever a requestcontext is pushed, an applicationcontextwill be created alongside
if this is necessary. As a result of that, you can ignore the existence of the application
context unless you need it.
The second way is the explicit way using the app_context() method:
from flask import Flask, current_app
app = Flask(__name__)
with app.app_context():
# within this block, current_app points to app.
print current_app.name
The application context is also used by the url_for() function in case a SERVER_NAME
was configured. This allows you to generate URLs even in the absence of a request.
13.3 Locality of the Context
The application context is created and destroyed as necessary. Itnever moves between
threads and it will not be shared between requests. As such it is the perfect place to
store database connection information and other things. The internal stack object is
called flask._app_ctx_stack. Extensions are free to store additional information on
the topmost level, assuming they pick a sufficiently unique name and should put there
information there, instead on the flask.g object which is reserved for user code.
For more information about that, see Flask Extension Development.
13.4 Context Usage
The context is typically used to cache resources on there that need to be created on
aper-request or usage case. For instance database connects are destined to go there.
When storing things on the application context unique names should be chosen as this
is a place that is shared between Flask applications and extensions.
82
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
Bookmark: Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Data: Auto Fill-in Field Data. Field: Insert Export PDF from Excel with cell border or no
edit pdf form in reader; pdf data extractor
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Professional .NET PDF converter control for batch conversion. Merge all Excel sheets to one PDF file. Export PDF from Excel with cell border or no border.
extract data out of pdf file; collect data from pdf forms
The most common usage is to split resource management into two parts:
1. an implicit resource caching on the context.
2. a context teardown based resource deallocation.
Generally there would be a get_X() function that creates resource X if it does not ex-
ist yet and otherwise returns the same resource, and a teardown_X() function that is
registered as teardown handler.
This is an example that connects to a database:
import sqlite3
from flask import g
def get_db():
db getattr(g, _databaseNone)
if db is None:
db = g._database = connect_to_database()
return db
@app.teardown_appcontext
def teardown_db(exception):
db getattr(g, _databaseNone)
if db is not None:
db.close()
The first time get_db() is called the connection will be established. To make this im-
plicit aLocalProxy can be used:
from werkzeug.local import LocalProxy
db = LocalProxy(get_db)
That way a user can directly access db which internally calls get_db().
83
VB.NET Create PDF from OpenOffice to convert odt, odp files to PDF
Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Convert OpenOffice Spreadsheet data to PDF. Export PDF document from OpenOffice Presentation.
online form pdf output; html form output to pdf
C# Create PDF from OpenOffice to convert odt, odp files to PDF in
Convert OpenOffice Text Document to PDF with embedded fonts. Export PDF from OpenOffice Spreadsheet data. RasterEdge.XDoc.PDF.dll.
how to save a pdf form in reader; how to save a filled out pdf form in reader
84
VB.NET Excel: Render and Convert Excel File to TIFF Image by Using
Or how to render and export Excel document to TIFF file handle and process large amount of data but it images converter, VB.NET Excel to PDF document rendering
how to extract data from pdf file using java; saving pdf forms in acrobat reader
CHAPTER
FOURTEEN
THE REQUEST CONTEXT
This document describes the behavior in Flask 0.7 which is mostly in line with the old
behavior but has some small, subtle differences.
It is recommended that you read the The Application Context chapter first.
14.1 Diving into Context Locals
Say you have a utility function that returns the URL the user should be redirected to.
Imagine it would always redirect to the URL’s next parameter or the HTTP referrer or
the index page:
from flask import request, url_for
def redirect_url():
return request.args.get(next) or \
request.referrer or \
url_for(index)
As you can see, it accesses the request object. If you try to run this froma plain Python
shell, this is the exception you will see:
>>> redirect_url()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: NoneType object has no attribute e request
That makes a lot of sense because we currently do not have a request we could
access. So we have to make a request and bind it to the current context. The
test_request_context method can create us a RequestContext:
>>> ctx app.test_request_context(/?next=http://example.com/)
This context can be used in two ways. Either with the with statement or by calling the
push() and pop() methods:
>>> ctx.push()
85
From that point onwards you can work with the request object:
>>> redirect_url()
uhttp://example.com/
Until you call pop:
>>> ctx.pop()
Because the request context is internally maintained as a stack you can push and pop
multiple times. This is very handy to implement things like internal redirects.
Formore information of how to utilize the request context from the interactive Python
shell, head over to the Working with the Shell chapter.
14.2 How the Context Works
If youlook into howthe Flask WSGIapplication internally works, you will find a piece
of code that looks very much like this:
def wsgi_app(self, environ):
with self.request_context(environ):
try:
response self.full_dispatch_request()
except Exception, e:
response self.make_response(self.handle_exception(e))
return response(environ, start_response)
The method request_context() returns a new RequestContext object and uses it in
combination with the with statement to bind the context. Everything that is called
from the same thread from this point onwards until the end of the with statement will
have access to the request globals (flask.request and others).
The request context internally works like a stack: The topmost level on the stack is
the current active request. push() adds the context to the stack on the very top, pop()
removes it from the stack again. On popping the application’s teardown_request()
functions are also executed.
Another thing of note is that the request contextwill automatically also create an appli-
cation context when it’s pushed and there is no application context for that application
so far.
14.3 Callbacks and Errors
What happens if an error occurs in Flask during request processing? This particular
behavior changed in 0.7 because we wanted to make it easier to understand what is
actually happening. The new behavior is quite simple:
86
1. Before each request, before_request() functions are executed. If one of these
functions return a response, the other functions are no longer called. In any case
however the return value is treated as a replacement for the view’s return value.
2. If the before_request() functions did not return a response, the regular request
handling kicks in and the view function that was matched has the chance to
return a response.
3. The return value of the view is then converted into an actual response object and
handed over to the after_request() functions which have the chance to replace
it or modify it in place.
4. At the end of the request the teardown_request() functions are executed. This
always happens, even in case of an unhandled exception down the road or if a
before-request handler was not executed yet or at all (for example in test envi-
ronments sometimes you might want to not execute before-request callbacks).
Now what happens on errors? In production mode if an exception is not caught, the
500 internal server handler is called. In development mode however the exception is
not further processed and bubbles up to the WSGI server. That way things like the
interactive debugger can provide helpful debug information.
An important change in 0.7 is that the internal server error is now no longer post
processed by the after request callbacks and after request callbacks are no longer guar-
anteed to be executed. This way the internal dispatching code looks cleaner and is
easier to customize and understand.
The new teardown functions are supposed to be used as a replacement for things that
absolutely need to happen at the end of request.
14.4 Teardown Callbacks
The teardown callbacks are special callbacks in that they are executed at at different
point. Strictly speaking they are independent of the actual request handling as they
are bound to the lifecycle of the RequestContext object. When the request context is
popped, the teardown_request() functions are called.
This is important to know if the life of the request context is prolonged by using the
test client in a with statement or when using the request context from the command
line:
with app.test_client() as client:
resp = client.get(/foo)
# the teardown functions are still not called at that point
# even though the response ended and you have the response
# object in your hand
# only when the code reaches this point the teardown functions
# are called. Alternatively the same thing happens if another
# request was triggered from the test client
87
It’s easy to see the behavior from the command line:
>>> app Flask(__name__)
>>> @app.teardown_request
... def teardown_request(exception=None):
...
print this runs s after r request
...
>>> ctx app.test_request_context()
>>> ctx.push()
>>> ctx.pop()
this runs after request
>>>
Keep inmind that teardown callbacks are always executed, even ifbefore-request call-
backs were not executed yet but an exception happened. Certain parts of the test sys-
tem might also temporarily create a request context without calling the before-request
handlers. Make sure to write your teardown-request handlers in a way that they will
never fail.
14.5 Notes On Proxies
Some of the objects provided by Flask are proxies to other objects. The reason behind
this is that these proxies are shared between threads and they have to dispatch to the
actual object bound to a thread behind the scenes as necessary.
Most of the time you don’t have to care about that, but there are some exceptions
where it is good to know that this object is an actual proxy:
• The proxy objects do not fake their inherited types, so if you want to perform
actual instance checks, you have to do that on the instance that is being proxied
(see _get_current_object below).
• if the object reference is important (so for example for sending Signals)
If you need to get access to the underlying object that is proxied, you can use the
_get_current_object()method:
app = current_app._get_current_object()
my_signal.send(app)
14.6 Context Preservation on Error
If an error occurs or not, at the end of the request the request context is popped and
all data associated with it is destroyed. During development however that can be
problematic as you might want to have the information around for a longer time in
case an exception occurred. In Flask 0.6 and earlier in debug mode, if an exception
occurred, the request context was not popped so that the interactive debugger can still
provide you with important information.
88
Starting with Flask 0.7 you have finer control over that behavior by setting the
PRESERVE_CONTEXT_ON_EXCEPTION configuration variable. By default it’s linked to the
setting of DEBUG. If the application is in debug mode the context is preserved, in pro-
duction mode it’s not.
Do not force activate PRESERVE_CONTEXT_ON_EXCEPTION in production mode as it will
cause your applicationto leak memory onexceptions. However it canbe usefulduring
developmentto get the same errorpreserving behavior as indevelopment mode when
attempting to debug an error that only occurs under production settings.
89
90
Documents you may be interested
Documents you may be interested