ASPPY is a Python-based runtime that executes Classic ASP (VBScript) pages. It provides compatibility with most VBScript built-in functions, the Classic ASP object model (Request, Response, Session, Application, Server), and various COM components commonly used in legacy ASP applications.

Platform Support

ASPPY works on: - Windows - Linux - macOS

Dependencies

The following Python libraries are required:

Library Purpose
Python 3.8+ Runtime environment
fpdf2 PDF generation (pip install fpdf2)
bcrypt Password hashing (pip install bcrypt)
Pillow Image processing (pip install pillow)
pyodbc Access/Excel/ODBC database providers (pip install pyodbc)
certifi (optional) TLS CA bundle for MSXML HTTP (pip install certifi)
zipfile (built-in) ZIP file handling

VBScript Built-in Functions

Compatibility notes for built-ins:

  • ASPPY targets practical Classic ASP/VBScript compatibility, but does not guarantee byte-for-byte parity with IIS VBScript for every edge case.
  • The function lists below describe the exposed runtime surface; behavior can still differ in locale, coercion, error wording, and edge conditions.
  • Functions implemented through compatibility shims/stubs (for example formatting/script-engine helpers) are intended for app portability, not strict engine emulation.
  • SQL/dialect translation is intentionally out of scope; database commands are executed as provided by the script and underlying provider/driver.
  • If exact behavior matters for a critical path, validate with your app-specific regression tests.

String Functions

Function Description
Len(string) Returns the length of a string
LenB(expression) Returns the length of a string in bytes
UCase(string) Converts a string to uppercase
LCase(string) Converts a string to lowercase
Trim(string) Removes leading and trailing spaces
LTrim(string) Removes leading spaces
RTrim(string) Removes trailing spaces
StrReverse(string) Reverses a string
StrComp(string1, string2[, compare]) Compares two strings
Left(string, length) Returns leftmost characters
Right(string, length) Returns rightmost characters
Mid(string, start[, length]) Returns characters from a string
LeftB(string, length) Returns leftmost bytes
RightB(string, length) Returns rightmost bytes
MidB(expr, start[, length]) Returns bytes from a string
InStr([start, ]string1, string2[, compare]) Finds one string within another
InStrB([start, ]string1, string2) Finds one string within another (byte)
Replace(expression, find, replace[, start[, count[, compare]]]) Replaces text in a string
Split(expression[, delimiter[, count[, compare]]]) Splits a string into an array
Join(list[, delimiter]) Joins an array into a string
Filter(inputstrings, value[, include[, compare]]) Returns a filtered array
Space(number) Returns a string of spaces
String(number, character) Returns a repeating character string
Asc(string) Returns the ANSI code of the first character
AscW(string) Returns the Unicode code of the first character
AscB(string) Returns the first byte of a string
Chr(charcode) Returns the character associated with an ANSI code
ChrW(charcode) Returns the character associated with a Unicode code
ChrB(charcode) Returns a single-byte character
Hex(number) Returns the hexadecimal value
Oct(number) Returns the octal value

Array Functions

Function Description
Array(arglist) Creates an array
IsArray(varname) Returns True if variable is an array
LBound(arrayname[, dimension]) Returns the lowest subscript
UBound(arrayname[, dimension]) Returns the highest subscript

Type Conversion Functions

Function Description
CBool(expression) Converts to Boolean
CByte(expression) Converts to Byte
CCur(expression) Converts to Currency
CDbl(expression) Converts to Double
CInt(expression) Converts to Integer
CLng(expression) Converts to Long
CSng(expression) Converts to Single
CStr(expression) Converts to String
CDate(date) Converts to Date

Date/Time Functions

Function Description
Now() Returns current date and time
Date() Returns current system date
Time() Returns current system time
Timer() Returns seconds since midnight
Year(date) Returns the year
Month(date) Returns the month (1-12)
Day(date) Returns the day (1-31)
Hour(time) Returns the hour (0-23)
Minute(time) Returns the minute (0-59)
Second(time) Returns the second (0-59)
DateSerial(year, month, day) Returns a date
TimeSerial(hour, minute, second) Returns a time
DateAdd(interval, number, date) Adds a time interval
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) Returns the difference
DatePart(interval, date[, firstdayofweek[, firstweekofyear]]) Returns a part of a date
Weekday(date[, firstdayofweek]) Returns the weekday (1-7)
WeekdayName(weekday[, abbreviate[, firstdayofweek]]) Returns the weekday name
MonthName(month[, abbreviate]) Returns the month name
DateValue(string) Returns a date from a string
TimeValue(string) Returns a time from a string
CDate(string) Converts a string to a date
IsDate(expression) Returns True if expression is a date
FormatDateTime(date[, namedformat]) Formats a date/time

Date Constants

Constant Value Description
vbSunday 1 Sunday
vbMonday 2 Monday
vbTuesday 3 Tuesday
vbWednesday 4 Wednesday
vbThursday 5 Thursday
vbFriday 6 Friday
vbSaturday 7 Saturday
vbUseSystemDayOfWeek 0 Use system day of week
vbFirstJan1 1 First week with Jan 1
vbFirstFourDays 2 First week with 4 days
vbFirstFullWeek 3 First full week
vbGeneralDate 0 General date format
vbLongDate 1 Long date format
vbShortDate 2 Short date format
vbLongTime 3 Long time format
vbShortTime 4 Short time format
vbBinaryCompare 0 Binary comparison
vbTextCompare 1 Text comparison

Math Functions

Function Description
Abs(number) Returns absolute value
Atn(number) Returns arctangent
Cos(number) Returns cosine
Exp(number) Returns e raised to a power
Fix(number) Returns integer portion
Int(number) Returns integer portion (floor)
Log(number) Returns natural logarithm
Rnd([number]) Returns random number
Round(expression[, numdecimalplaces]) Rounds a number
Sqr(number) Returns square root
Sgn(number) Returns sign of a number

Format Functions

Note: formatting functions are compatibility-focused and may differ from IIS under some locale/regional settings.

Function Description
FormatNumber(expression[, numdigitsafterdecimal[, includeleadingdigit[, useparensfornegativenumbers[, groupdigits]]]]) Formats a number
FormatCurrency(expression[, numdigitsafterdecimal[, includeleadingdigit[, useparensfornegativenumbers[, groupdigits]]]]) Formats as currency
FormatPercent(expression[, numdigitsafterdecimal[, includeleadingdigit[, useparensfornegativenumbers[, groupdigits]]]]) Formats as percentage

Information Functions

Note: type/coercion semantics generally follow VBScript, but may differ in edge cases involving Empty/Null/Nothing and host objects.

Function Description
IsArray(varname) Returns True if variable is an array
IsDate(expression) Returns True if expression is a date
IsEmpty(expression) Returns True if variable is Empty
IsNull(expression) Returns True if expression is Null
IsNumeric(expression) Returns True if expression is numeric
IsObject(expression) Returns True if expression is an object
TypeName(varname) Returns the type name
VarType(varname) Returns the variant type

VarType Constants

Constant Value Description
vbEmpty 0 Empty (uninitialized)
vbNull 1 Null (no valid data)
vbInteger 2 Integer
vbLong 3 Long integer
vbSingle 4 Single-precision
vbDouble 8 Double-precision
vbCurrency 6 Currency
vbDate 7 Date
vbString 8 String
vbObject 9 Object
vbBoolean 11 Boolean
vbArray 8192 Array

Color Functions

Function Description
RGB(red, green, blue) Returns an RGB color value

Classic ASP Objects

Server Object

Methods

Method Description
CreateObject(progid) Creates an instance of a COM object
HTMLEncode(string) Encodes HTML characters
URLEncode(string) URL-encodes a string
MapPath(path) Maps a virtual path to a physical path
Execute(path) Executes an ASP file
Transfer(path) Transfers execution to another ASP file
GetLastError() Returns the last error object

Properties

Property Description
ScriptTimeout Gets/sets script timeout in seconds

Extension Methods (ASPPY-specific)

Method Description
ASPPYListAspPages() Lists all .asp pages under docroot
ASPPYRun(virtual_path) Runs another ASP page and captures output

Supported Server.CreateObject ProgIDs

  • Scripting.Dictionary
  • Scripting.FileSystemObject
  • ADODB.Connection, ADODB.Recordset, ADODB.Command, ADODB.Stream
  • VBScript.RegExp / RegExp
  • MSXML2.ServerXMLHTTP, MSXML2.XMLHTTP, MSXML2.DOMDocument (incl. .3.0/.6.0 aliases)
  • Microsoft.XMLDOM, MSXML.DOMDocument
  • CDO.Message, CDOSYS.Message
  • ASPPY.POP3, ASPPY.POP3, ASPPY.IMAP, ASPPY.IMAP

Request Object

Properties

Property Description
QueryString NameValueCollection of query string parameters
Form NameValueCollection of form data parsed from POST only
Cookies NameValueCollection of cookies
ServerVariables NameValueCollection of server variables
TotalBytes Total bytes in request body
Method / HttpMethod HTTP method (GET, POST, PUT, DELETE, etc.)
Files Collection of uploaded files
Request (default) Access to QueryString, Form, Cookies

Methods

Method Description
BinaryRead(count) Reads raw bytes from request body

HTTP methods and body parsing

  • ASPPY passes through HTTP methods to ASP pages without a verb allow-list.
  • Request.ServerVariables("REQUEST_METHOD") returns the incoming verb string (for example: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS).
  • Request.Form is parsed for POST with supported form encodings (application/x-www-form-urlencoded, multipart/form-data).
  • For non-POST bodies (PUT, DELETE, PATCH, etc.), read raw bytes via Request.BinaryRead(...); Request.Form remains empty.
  • Request.TotalBytes reflects the request body size for any method.

Request.Files Collection

Access uploaded files from multipart form submissions.

' Iterate over all uploaded files
For Each file In Request.Files
    Response.Write(file.FileName)
    Response.Write(file.Size)
    Response.Write(file.ContentType)
    ' Save to disk
    file.SaveAs Server.MapPath("/uploads/" & file.FileName)
Next

' Access specific file
Set f = Request.Files("myfile")
If Not f Is Nothing Then
    Response.Write f.Name
    Response.Write f.FileName
    Response.Write f.Size
    Response.Write f.ContentType
End If

' Check if file exists
If Request.Files.Exists("myfile") Then
    ' File was uploaded
End If

' Get count
Response.Write Request.Files.Count

UploadedFile Properties

Property Description
Name Form field name
FileName Original filename
ContentType MIME content type
Size File size in bytes

UploadedFile Methods

Method Description
SaveAs(path) Saves the file to disk

Files Collection Methods

Method Description
Count Number of uploaded files
Exists(name) Checks if file with given name exists
Item(name) Gets uploaded file by name
Keys() Returns array of field names
Items() Returns array of UploadedFile objects

Response Object

Properties

Property Description
Buffer Enables/disables response buffering
Cookies Collection of cookies to send
LCID Locale identifier

Methods

Method Description
Write(string) Writes output to the response
BinaryWrite(data) Writes binary data
Clear() Clears the buffered output
Flush() Flushes buffered output
End() Stops script execution
AddHeader(name, value) Adds a custom header
AppendToLog(message) Appends to server log
Redirect(url) Redirects to another URL
File(path[, inline]) Serves a file (inline=True for display, False for download)

Session Object

Properties

Property Description
SessionID Unique session identifier
Timeout Session timeout in minutes
Contents Collection of session variables
StaticObjects Collection of session-scoped objects

Methods

Method Description
Abandon() Ends the session

Application Object

Properties

Property Description
Contents Collection of application variables
StaticObjects Collection of static objects

Methods

Method Description
Lock() Locks application variables
Unlock() Unlocks application variables

ASPPY Extended Objects

ASPPY Object

The ASPPY object provides additional functionality beyond classic ASP.

It is available as global ASPPY in script scope.

JSON

ASPPY.JSON.Encode(value[, pretty])  ' Returns JSON string
ASPPY.JSON.Decode(json_string)      ' Returns VBScript value

Note: member access is case-insensitive in VBScript; runtime members are exposed as json, zip, image, crypto, pdf.

ZIP

ASPPY.Zip.Zip(path[, out_path])     ' Creates a ZIP file
ASPPY.Zip.Unzip(zip_path, dest_folder[, overwrite])  ' Extracts a ZIP file

Image (Pillow)

ASPPY.Image.open(path)               ' Opens an image file
ASPPY.Image.new(mode, size, color)    ' Creates a new image
ASPPY.Image.merge(mode, bands)       ' Merges image bands
ASPPY.Image.blend(img1, img2, alpha) ' Blends two images
ASPPY.Image.composite(img1, img2, mask) ' Creates composite

ASPPY.ImageDraw.Draw(img)            ' Creates a draw object
ASPPY.ImageFilter.BLUR               ' Blur filter constant
ASPPY.ImageFilter.CONTOUR            ' Contour filter
ASPPY.ImageFilter.EDGE_ENHANCE       ' Edge enhancement
ASPPY.ImageFilter.SHARPEN            ' Sharpen filter
ASPPY.ImageFilter.GaussianBlur(radius) ' Gaussian blur

ASPPY.ImageEnhance.Brightness(img)   ' Brightness enhancer
ASPPY.ImageEnhance.Contrast(img)     ' Contrast enhancer

ImageInstance Properties/Methods

Property/Method Description
size Image dimensions (width, height)
width Image width
height Image height
mode Image color mode
format Image format
save(path) Saves the image
resize(size) Resizes the image
thumbnail(size) Creates thumbnail
crop(box) Crops the image
rotate(angle) Rotates the image
convert(mode) Converts color mode
split() Splits into bands
getpixel(xy) Gets pixel value
putpixel(xy, value) Sets pixel value
filter(filter_obj) Applies filter
paste(other_img, box[, mask]) Pastes another image

PDF (FPDF)

Set pdf = ASPPY.Pdf.New([orientation[, unit[, format]]])

PdfDoc Methods

Method Description
add_page([orientation]) Adds a new page
set_margins(left, top[, right]) Sets page margins
set_auto_page_break(auto[, margin]) Sets auto page break
set_font(family[, style[, size]]) Sets the font
set_text_color(r[, g[, b]]) Sets text color
set_draw_color(r[, g[, b]]) Sets drawing color
set_fill_color(r[, g[, b]]) Sets fill color
set_line_width(width) Sets line width
fill_page(r[, g[, b]]) Fills the page with color
text(x, y, text) Writes text at position
cell(w[, h[, text[, border[, ln[, align[, fill[, link]]]]]]]) Writes a cell
multi_cell(w, h, text[, border[, align[, fill]]]) Writes multi-cell
set_xy(x, y) Sets current position
ln([h]) Moves to next line
image(path[, x[, y[, w[, h]]]]) Adds an image
output(path) Saves PDF to file

Crypto (bcrypt)

ASPPY.Crypto.Hash(password[, rounds])    ' Hashes a password (rounds 4-31, default 12)
ASPPY.Crypto.Verify(password, hashed)     ' Verifies password against hash

COM Objects

Scripting.Dictionary

Set dict = Server.CreateObject("Scripting.Dictionary")
Property/Method Description
Count Number of items
CompareMode Comparison mode (0=Binary, 1=Text, 2=Database)
Item(key) Gets/sets item value
Keys Returns array of keys
Items Returns array of items
Add(key, item) Adds a key/item pair
Exists(key) Returns True if key exists
Remove(key) Removes a key
RemoveAll() Removes all items

Scripting.FileSystemObject

Set fso = Server.CreateObject("Scripting.FileSystemObject")
Property/Method Description
BuildPath(path, name) Builds a path
CreateTextFile(filename[, overwrite[, unicode]]) Creates text file
OpenTextFile(filename[, iomode[, create[, format]]]) Opens text file
GetFile(filepath) Gets File object
GetFolder(folderpath) Gets Folder object
GetDrive(drivespec) Gets Drive object
DriveExists(drivespec) Checks if drive exists
FileExists(filepath) Checks if file exists
FolderExists(folderpath) Checks if folder exists

File Object

Property/Method Description
Path Full path
Name File name
Size File size
Type File type
DateCreated Creation date
DateLastAccessed Last access date
DateLastModified Last modified date
Drive Drive letter
ParentFolder Parent folder
ShortName 8.3 name
ShortPath 8.3 path
Attributes File attributes
Copy(destination[, overwrite]) Copies file
Move(destination) Moves file
Delete([force]) Deletes file
OpenAsTextStream([iomode[, format]]) Opens as text stream

Folder Object

Property/Method Description
Path Full path
Name Folder name
Size Total size of folder
DateCreated Creation date
DateLastAccessed Last access date
DateLastModified Last modified date
Drive Drive letter
IsRootFolder True if root
Files Files collection
SubFolders Subfolders collection
Attributes Folder attributes
Copy(destination[, overwrite]) Copies folder
Move(destination) Moves folder
Delete([force]) Deletes folder

TextStream Object

Property/Method Description
AtEndOfStream True at end of file
Read(n) Reads n characters
ReadLine() Reads a line
ReadAll() Reads entire file
Write(string) Writes string
WriteLine([string]) Writes line
WriteBlankLines(n) Writes blank lines
Close() Closes the stream
Skip(n) Skips n characters
SkipLine() Skips a line

VBScript.RegExp

Set regex = Server.CreateObject("VBScript.RegExp")
Property/Method Description
Pattern Regular expression pattern
IgnoreCase Case-insensitive matching
Global Match all occurrences
MultiLine Multi-line matching
Test(string) Tests for a match
Replace(string, replace_with) Replaces matches
Execute(string) Returns match collection

ADODB.Connection

Set conn = Server.CreateObject("ADODB.Connection")
Property/Method Description
ConnectionString Connection string
State Connection state
CommandTimeout Command timeout
CursorLocation Cursor location
Open([connection_string]) Opens connection
Close() Closes connection
Execute(sql[, records_affected[, options]]) Executes SQL
BeginTrans() Begins transaction
CommitTrans() Commits transaction
RollbackTrans() Rolls back transaction

Connection string notes:

  • Execution support is currently SQLite (sqlite3), Access (pyodbc + Access ODBC driver), Excel (pyodbc + Excel ODBC driver), and generic ODBC (pyodbc) in this runtime.
  • ASPPY now parses and classifies common legacy ADO connection string families (Access, SQL Server, ODBC, MySQL, Oracle, PostgreSQL) so unsupported providers fail with explicit migration guidance instead of generic errors.
  • For SQLite, use Provider=SQLite;Data Source=<path> (or Provider=SQLite;Database=<path>), or a bare file path.
  • For Access, use legacy Access-style strings (Provider=Microsoft.Jet.OLEDB.4.0 / Provider=Microsoft.ACE.OLEDB.12.0) with Data Source=<path to .mdb/.accdb>.
  • For Excel, use legacy Excel-style strings (for example Provider=Microsoft.ACE.OLEDB.12.0;Data Source=<path>;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";).
  • Excel support is currently read-only in ASPPY (SELECT queries only).
  • For ODBC, use DSN=...;Uid=...;Pwd=...; or Driver={...};Server=...;Database=...;Uid=...;Pwd=...;.
  • PostgreSQL is supported via ODBC (Provider=PostgreSQL;Server=...;Database=...;User Id=...;Password=...;Port=5432;) or explicit Driver={PostgreSQL ...} / DSN=....
  • SQL dialect translation is not performed; application SQL is executed as-is by the selected provider/driver.
  • Internally, provider adapters now use a registry + capability flags, so future DBMS support can be added as pluggable adapters without changing the ADO surface API.

ADODB.Recordset

Set rs = Server.CreateObject("ADODB.Recordset")
Property/Method Description
State Recordset state
EOF End of file
BOF Beginning of file
RecordCount Number of records
Fields Fields collection
Open([source[, active_conn[, cursor_type[, lock_type[, options]]]]]) Opens recordset
Close() Closes recordset
MoveFirst() Moves to first record
MoveLast() Moves to last record
MoveNext() Moves to next record
MovePrevious() Moves to previous record
Move(n) Moves n records
AddNew() Starts insert mode for a new record
Update() Commits pending field changes
Delete() Deletes current record
Resync Resyncs with database

ADODB.Command

Set cmd = Server.CreateObject("ADODB.Command")
Property/Method Description
ActiveConnection Connection used for execution
CommandText SQL command text
CommandType Command type (text)
Parameters Parameters collection
CreateParameter(...) Creates a parameter object
Execute(...) Executes command and returns a recordset

ADODB.Parameter / Parameters

Property/Method Description
Name Parameter name
Type ADO type constant
Direction Direction (adParamInput, etc.)
Size Declared size
Value Parameter value
Parameters.Append(param) Adds parameter
Parameters.Item(name_or_index) Gets parameter
Parameters.Count Number of parameters

ADODB.Stream

Set stream = Server.CreateObject("ADODB.Stream")
Property/Method Description
Type Stream type (1=Binary, 2=Text)
Charset Character set
Position Current position
Size Stream size
EOS End of stream
State Stream state
LineSeparator Line separator
Mode Open mode
Open() Opens stream
Close() Closes stream
LoadFromFile(filename) Loads from file
SaveToFile(filename[, options]) Saves to file
Read([count]) Reads bytes
ReadText([count]) Reads text
Write(data) Writes bytes
WriteText(string) Writes text
CopyTo(dest_stream[, count]) Copies to another stream
SetEOS() Sets EOS
SkipLine() Skips line
Flush() Flushes buffer

MSXML2 Objects

ServerXMLHTTP

Set http = Server.CreateObject("MSXML2.ServerXMLHTTP")
Property/Method Description
ReadyState Request state
Status HTTP status code
StatusText HTTP status text
ResponseText Response as text
ResponseXML Response as XML DOM
ResponseBody Response as binary
Option MSXML option
Open(method, url[, async[, user[, password]]]) Opens request
SetRequestHeader(header, value) Sets request header
Send([body]) Sends request
WaitForResponse([timeout]) Waits for response
Abort() Aborts request

XMLHTTP

Set http = Server.CreateObject("MSXML2.XMLHTTP")

Same interface as ServerXMLHTTP.

DOMDocument

Set xml = Server.CreateObject("MSXML2.DOMDocument")
Property/Method Description
async Async loading
readyState Document state
xml XML content
text Text content
load(url) Loads from URL
loadXML(xml_string) Loads from string
save(destination) Saves document
selectNodes(xpath) Selects nodes
selectSingleNode(xpath) Selects single node
getElementsByTagName(tagname) Gets elements

CDO.Message

Set msg = Server.CreateObject("CDO.Message")
Property/Method Description
From Sender address
To Recipient address(es)
CC CC recipients
BCC BCC recipients
Subject Message subject
HTMLBody HTML body
TextBody Plain text body
BodyPart Body part object
Configuration Configuration object
DisableSend If True, Send() is no-op success
AddAttachment(url) Adds attachment
Send() Sends the message

ASPPY.POP3

Set pop = Server.CreateObject("ASPPY.POP3")
Method Description
Connect/Open(host[, port[, use_ssl[, timeout]]]) Connects to POP3 server
Login(user, pass) Authenticates
Stat() Returns message count and mailbox size
List() Returns message listing
UIDL([msg_num]) UID listing or UID for one message
Retr/GetMessage(msg_num) Fetches a message object
Delete/Dele(msg_num) Marks message for deletion
DeleteAll() Marks all for deletion
Quit/Close() Closes connection

ASPPY.IMAP

Set imap = Server.CreateObject("ASPPY.IMAP")
Method Description
Connect/Open(host[, port[, use_ssl[, timeout]]]) Connects to IMAP server
Login(user, pass) Authenticates
Select([folder[, readonly]]) Selects mailbox
Search([criteria]) Finds messages by sequence number
SearchUID([criteria]) Finds messages by UID
Fetch/GetMessage(msg_num) Fetches message by sequence number
GetMessageByUID(uid) Fetches message by UID
Delete/Dele(msg_num) Marks message deleted
DeleteAll() Marks all selected messages deleted
Expunge() Permanently removes deleted messages
Logout/Close() Closes connection

Runtime Environment Variables

Variable Description
ASP_PY_LOG Enables request log output from built-in server
ASP_PY_TRACE_REQUEST Enables verbose request/body trace logging
ASP_PY_REQ_MEM_MAX Max in-memory request body bytes before temp-file buffering
ASP_PY_ADO_ROOT Sandbox root for ADODB.Stream filesystem operations
ASP_PY_FSO_ROOT Sandbox root for Scripting.FileSystemObject
ASP_PY_HTTP_MAX_BYTES Max response bytes for MSXML HTTP requests
ASP_PY_HTTP_ALLOW_HOSTS Comma-separated HTTP host allowlist for MSXML
ASP_PY_ALLOW_LOCALHOST Allows MSXML HTTP access to localhost
ASP_PY_ALLOW_PRIVATE_NETS Allows MSXML HTTP access to private subnets
ASP_PY_XML_ALLOW_LOCAL Allows DOMDocument local file loading
ASP_PY_CDO_DISABLE_SEND Disables SMTP send in CDO.Message
ASP_PY_CDO_ALLOW_OUTSIDE_DOCROOT Allows CDO attachments outside docroot

VBScript Compatibility Notes

  • UBound/LBound: follow VBScript-like array allocation rules; uninitialized/invalid-array usage raises runtime errors.
  • VBScript.RegExp.Replace: supports VB-style replacement tokens ($1, $&, $`, $', $$).
  • Request.Form: parsed for POST only; non-POST bodies are available via Request.BinaryRead.
  • Date/number formatting and script-engine metadata helpers are implemented for compatibility and may differ from IIS in edge locale cases.

Compatibility Matrix

Subsystem Level Notes
Core VBScript built-ins Near Broad coverage for common Classic ASP apps; edge coercion/locale behaviors can differ
Date/time and numeric formatting Partial Compatibility-oriented; locale-specific IIS parity not guaranteed
Request/Response/Server/Application/Session Near Classic object model implemented; some operational semantics differ from IIS hosting internals
VBScript.RegExp Near Common API and VB-style replacement tokens supported
Scripting.Dictionary Near Core collection behavior supported; COM-level quirks may differ
Scripting.FileSystemObject / ADODB.Stream Partial Supported in sandboxed model (docroot/root-constrained)
ADODB.Connection/Recordset/Command Partial Provider support is runtime-dependent; ADO surface is compatibility-oriented
Database providers Partial SQLite, Access, Excel(read-only), generic ODBC, PostgreSQL via ODBC
MSXML HTTP/DOM shims Partial Security-guarded and stdlib-focused; not full MSXML COM parity
CDO.Message Partial Practical SMTP/pickup subset; not complete CDOSYS feature parity
POP3/IMAP shims Partial Legacy-friendly subset for mailbox workflows

Global.asa Support

ASPPY supports the Global.asa file with the following events:

  • Application_OnStart
  • Application_OnEnd
  • Session_OnStart
  • Session_OnEnd

Example Global.asa:

<script language="vbscript" runat="server">
Sub Application_OnStart
    Application("StartTime") = Now()
End Sub

Sub Session_OnStart
    Session("UserID") = ""
End Sub
</script>

Running ASPPY

Start the built-in server:

python -m ASPPY.server [host] [port] [docroot]

Example:

python -m ASPPY.server 0.0.0.0 8080 www

The server will serve both static files and .asp pages from the specified document root.