added current eiffel interfaces for APPLICATION, REQUEST and RESPONSE_BUFFER
This commit is contained in:
@@ -14,6 +14,277 @@ Note the following is work in progress, and reflect a specification proposal, ra
|
||||
For now, the specification from EWF is done in Eiffel interface
|
||||
please see: https://github.com/Eiffel-World/Eiffel-Web-Framework/tree/master/library/server/ewsgi/specification
|
||||
|
||||
EWSGI_APPLICATION
|
||||
|
||||
deferred class
|
||||
EWSGI_APPLICATION
|
||||
|
||||
feature {NONE} -- Execution
|
||||
|
||||
execute (req: EWSGI_REQUEST; res: EWSGI_RESPONSE_BUFFER)
|
||||
-- Execute the request
|
||||
-- See `req.input' for input stream
|
||||
-- `req.environment' for the Gateway environment
|
||||
-- and `res' for the output buffer
|
||||
require
|
||||
res_status_unset: not res.status_is_set
|
||||
deferred
|
||||
ensure
|
||||
res_status_set: res.status_is_set
|
||||
res_committed: res.message_committed
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
EWSGI_REQUEST
|
||||
|
||||
deferred class
|
||||
EWSGI_REQUEST
|
||||
feature -- Access: Input
|
||||
|
||||
input: EWSGI_INPUT_STREAM
|
||||
-- Server input channel
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- Access: extra values
|
||||
|
||||
request_time: detachable DATE_TIME
|
||||
-- Request time (UTC)
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- Access: environment variables
|
||||
|
||||
environment: EWSGI_ENVIRONMENT
|
||||
-- Environment variables
|
||||
deferred
|
||||
end
|
||||
|
||||
environment_variable (a_name: STRING_8): detachable STRING_8
|
||||
-- Environment variable related to `a_name'
|
||||
require
|
||||
a_name_valid: a_name /= Void and then not a_name.is_empty
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- Access: execution variables
|
||||
|
||||
execution_variables: EWSGI_VARIABLES [STRING_32]
|
||||
-- Execution variables set by the application
|
||||
deferred
|
||||
end
|
||||
|
||||
execution_variable (a_name: STRING_8): detachable STRING_32
|
||||
-- Execution variable related to `a_name'
|
||||
require
|
||||
a_name_valid: a_name /= Void and then not a_name.is_empty
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- URL Parameters
|
||||
|
||||
parameters: EWSGI_VARIABLES [STRING_32]
|
||||
-- Variables extracted from QUERY_STRING
|
||||
deferred
|
||||
end
|
||||
|
||||
parameter (a_name: STRING_8): detachable STRING_32
|
||||
-- Parameter for name `n'.
|
||||
require
|
||||
a_name_valid: a_name /= Void and then not a_name.is_empty
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- Form fields and related
|
||||
|
||||
form_fields: EWSGI_VARIABLES [STRING_32]
|
||||
-- Variables sent by POST request
|
||||
deferred
|
||||
end
|
||||
|
||||
form_field (a_name: STRING_8): detachable STRING_32
|
||||
-- Field for name `a_name'.
|
||||
require
|
||||
a_name_valid: a_name /= Void and then not a_name.is_empty
|
||||
deferred
|
||||
end
|
||||
|
||||
uploaded_files: HASH_TABLE [EWSGI_UPLOADED_FILE_DATA, STRING_8]
|
||||
-- Table of uploaded files information
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- Cookies
|
||||
|
||||
cookies_variables: HASH_TABLE [STRING_8, STRING_8]
|
||||
-- Expanded cookies variable
|
||||
deferred
|
||||
end
|
||||
|
||||
cookies_variable (a_name: STRING_8): detachable STRING_8
|
||||
-- Field for name `a_name'.
|
||||
require
|
||||
a_name_valid: a_name /= Void and then not a_name.is_empty
|
||||
deferred
|
||||
end
|
||||
|
||||
cookies: HASH_TABLE [EWSGI_COOKIE, STRING_8]
|
||||
-- Cookies Information
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- Access: global variable
|
||||
|
||||
variables: HASH_TABLE [STRING_32, STRING_32]
|
||||
-- Table containing all the various variables
|
||||
-- Warning: this is computed each time, if you change the content of other containers
|
||||
-- this won't update this Result's content, unless you query it again
|
||||
deferred
|
||||
end
|
||||
|
||||
variable (a_name: STRING_8): detachable STRING_32
|
||||
-- Variable named `a_name' from any of the variables container
|
||||
-- and following a specific order
|
||||
-- execution, environment, get, post, cookies
|
||||
require
|
||||
a_name_valid: a_name /= Void and then not a_name.is_empty
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- Uploaded File Handling
|
||||
|
||||
is_uploaded_file (a_filename: STRING_8): BOOLEAN
|
||||
-- Is `a_filename' a file uploaded via HTTP POST
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- URL Utility
|
||||
|
||||
absolute_script_url (a_path: STRING_8): STRING_8
|
||||
-- Absolute Url for the script if any, extended by `a_path'
|
||||
deferred
|
||||
end
|
||||
|
||||
script_url (a_path: STRING_8): STRING_8
|
||||
-- Url relative to script name if any, extended by `a_path'
|
||||
require
|
||||
a_path_attached: a_path /= Void
|
||||
deferred
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
EWSGI_RESPONSE_BUFFER
|
||||
|
||||
deferred class
|
||||
EWSGI_RESPONSE_BUFFER
|
||||
|
||||
feature {EWSGI_APPLICATION} -- Commit
|
||||
|
||||
commit
|
||||
-- Commit the current response
|
||||
deferred
|
||||
ensure
|
||||
status_is_set: status_is_set
|
||||
header_committed: header_committed
|
||||
message_committed: message_committed
|
||||
end
|
||||
|
||||
feature -- Status report
|
||||
|
||||
header_committed: BOOLEAN
|
||||
-- Header committed?
|
||||
deferred
|
||||
end
|
||||
|
||||
message_committed: BOOLEAN
|
||||
-- Message committed?
|
||||
deferred
|
||||
end
|
||||
|
||||
message_writable: BOOLEAN
|
||||
-- Can message be written?
|
||||
deferred
|
||||
end
|
||||
|
||||
feature {NONE} -- Core output operation
|
||||
|
||||
write (s: STRING_8)
|
||||
-- Send the string `s'
|
||||
-- this can be used for header and body
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- Status setting
|
||||
|
||||
status_is_set: BOOLEAN
|
||||
-- Is status set?
|
||||
deferred
|
||||
end
|
||||
|
||||
set_status_code (a_code: INTEGER_32)
|
||||
-- Set response status code
|
||||
-- Should be done before sending any data back to the client
|
||||
require
|
||||
status_not_set: not status_is_set
|
||||
header_not_committed: not header_committed
|
||||
deferred
|
||||
ensure
|
||||
status_code_set: status_code = a_code
|
||||
status_set: status_is_set
|
||||
end
|
||||
|
||||
status_code: INTEGER_32
|
||||
-- Response status
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- Output operation
|
||||
|
||||
flush
|
||||
-- Flush if it makes sense
|
||||
deferred
|
||||
end
|
||||
|
||||
write_string (s: STRING_8)
|
||||
-- Send the string `s'
|
||||
require
|
||||
message_writable: message_writable
|
||||
deferred
|
||||
end
|
||||
|
||||
write_substring (s: STRING_8; a_begin_index, a_end_index: INTEGER_32)
|
||||
-- Send the substring `s[a_begin_index:a_end_index]'
|
||||
require
|
||||
message_writable: message_writable
|
||||
deferred
|
||||
end
|
||||
|
||||
write_file_content (fn: STRING_8)
|
||||
-- Send the content of file `fn'
|
||||
require
|
||||
message_writable: message_writable
|
||||
deferred
|
||||
end
|
||||
|
||||
feature -- Header output operation
|
||||
|
||||
write_header (a_status_code: INTEGER_32; a_headers: detachable ARRAY [TUPLE [key: STRING_8; value: STRING_8]])
|
||||
-- Send headers with status `a_status', and headers from `a_headers'
|
||||
require
|
||||
status_not_set: not status_is_set
|
||||
header_not_committed: not header_committed
|
||||
deferred
|
||||
ensure
|
||||
header_committed: header_committed
|
||||
status_set: status_is_set
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
## Proof-of-concept and reference implementation
|
||||
|
||||
# Specification overview
|
||||
|
||||
Reference in New Issue
Block a user