public inbox for [email protected]  
help / color / mirror / Atom feed
From: Dave Page <[email protected]>
To: Priyanka Shendge <[email protected]>
Cc: pgadmin-hackers <[email protected]>
Cc: Kanchan Mohitey <[email protected]>
Subject: Re: pgAdmin IV API test cases patch
Date: Wed, 29 Jun 2016 20:21:03 +0100
Message-ID: <CA+OCxow+V_RU2y1q07R07UzZOmxLh+3WouSpwMXkYiz4v_V=qw@mail.gmail.com> (raw)
In-Reply-To: <CAKmZXFRfX+Us9Bg2ACFGvGLTjjW02XETLEj3h5cHnZZBAbZwEQ@mail.gmail.com>
References: <CAKmZXFQ2Hj1-OZpSGFEBB-vOypQ_=1b4Yr_VytZ-E1=CBw9Yhw@mail.gmail.com>
	<CA+OCxow8Q83e7Tm+BC2bxq=oqwd-m4JS3y2KpzgFemc=wX=f=A@mail.gmail.com>
	<CAKmZXFTX9D_qOXGrvPa9sfFjc1A6VPebcpBn7vyzPEOH4pWfEg@mail.gmail.com>
	<CAKmZXFRj8yY91TTxwQQ01eOQE8Rc7FPWuxGcjxaVY+QcWpgWDg@mail.gmail.com>
	<CA+OCxoyqfK8pUGGmeO=5pyC=MOizNMOnfshAfgQ5NjMRnkjgmA@mail.gmail.com>
	<CAKmZXFSgdtd9NDE=TysR68_tcwqFB2Sv-h+qK4K4i1HjxOd5ng@mail.gmail.com>
	<CAKmZXFRWXd7ZrUhpJt-rD_YOE1xcK5haE1CwAj8DMVyS9Fs6yA@mail.gmail.com>
	<CA+OCxoyiNMAem5bYAZ1XM16vK4wJETCCPncRgKYbVdmH2m4Ocg@mail.gmail.com>
	<CAKmZXFRvn8JDL52ooxZYtrf0Aw+bMz6=spXmyP9Q7fq8kWjuDA@mail.gmail.com>
	<CA+OCxowzMWyATh1_eEQ7hnrseaxuq8T3_+FDsCETLm=WaoRNEw@mail.gmail.com>
	<CAKmZXFT34JxCPw=UbZ27jU8uL0KzFa3Lfpmge2V14F7GynGLWw@mail.gmail.com>
	<CAKmZXFRfX+Us9Bg2ACFGvGLTjjW02XETLEj3h5cHnZZBAbZwEQ@mail.gmail.com>
List-Unsubscribe:  <mailto:[email protected]?body=unsub%20pgadmin-hackers>

Hi,

That's better. I tweaked a few things and fixed a bug related to
recent changes to the schema version config. Patch attached.

However, there are still issues:

1) The testsuite doesn't run to completion. See the attached
stdout.txt and logger.txt files.
2) stdout should only display the test summary - what tests are
currently running (and pass/fail), and a summary at the end - even if
there's a crash like I saw.
3) The output log file should contain the full output, including
what's sent to stdout.
4) The output advises the user to check ".../pgadmin4/web/regression".
This should be in the summary at the end, and should be corrected to
show the correct (full) path.

Thanks.


On Wed, Jun 29, 2016 at 2:52 PM, Priyanka Shendge
<[email protected]> wrote:
> Hi Dave,
>
> As per discussion over mail i have created separate config files for
> credentials and test data.
>
> PFA patch for same. Kindly, review and let me know for modifications.
>
> On 27 June 2016 at 15:10, Priyanka Shendge
> <[email protected]> wrote:
>>
>>
>>
>> On 27 June 2016 at 13:24, Dave Page <[email protected]> wrote:
>>>
>>> On Sun, Jun 26, 2016 at 12:05 PM, Priyanka Shendge
>>> <[email protected]> wrote:
>>> >
>>> >
>>> > On 24 June 2016 at 16:17, Dave Page <[email protected]> wrote:
>>> >>
>>> >> Hi
>>> >>
>>> >> On Thu, Jun 23, 2016 at 2:41 PM, Priyanka Shendge
>>> >> <[email protected]> wrote:
>>> >> >
>>> >> >
>>> >> > On 15 June 2016 at 15:05, Priyanka Shendge
>>> >> > <[email protected]> wrote:
>>> >> >>
>>> >> >> Thanks a lot Dave.
>>> >> >>
>>> >> >> On 15 June 2016 at 14:09, Dave Page <[email protected]> wrote:
>>> >> >>>
>>> >> >>> Hi
>>> >> >>>
>>> >> >>> On Thu, Jun 9, 2016 at 1:37 PM, Priyanka Shendge
>>> >> >>> <[email protected]> wrote:
>>> >> >>> > Hi Dave,
>>> >> >>> >
>>> >> >>> > PFA updated patch. I have made changes suggested by you.
>>> >> >>> >
>>> >> >>> > Kindly, review and let me know for more changes.
>>> >> >>>
>>> >> >>> OK, I got a bit further this time, but not there yet.
>>> >> >>>
>>> >> >>> 1) The patch overwrote my test_config.json file. That should never
>>> >> >>> happen (that file shouldn't be in the source tree).
>>> >> >>> test_config.json.in should be the file that's included in the
>>> >> >>> patch.
>>> >> >>
>>> >> >>
>>> >> >> OK.
>>> >> >>>
>>> >> >>>
>>> >> >>> 2) The updated test_config.json file is huge.
>>> >> >
>>> >> >
>>> >> > Current configuration file web/regression/test_config.json contains
>>> >> > test
>>> >> > data(credentials) for each tree node;
>>> >> > which is used while adding and updating the respective node.
>>> >>
>>> >> Why would we need that?
>>> >
>>> >
>>> > Each node file (e.g. test_db_add.py and test_db_put.py) uses respective
>>> > credentials test data  from
>>> > test_config.json while execution.
>>>
>>> That doesn't answer my question - why do we need separate credentials
>>> for each node?
>>
>>
>> Sorry for typo, its test data not credentials.
>>
>>>
>>>
>>> >> We should have just one set of credentials for
>>> >> everything.
>>> >
>>> >
>>> > Let me know if my understanding is clear:
>>> >
>>> > Should i keep basic credentials of each node (database, schema) into
>>> > test_config.json
>>> > instead  taking care of each field?
>>>
>>> You should have one set of credentials that's used for the entire test
>>> run.
>>
>>
>> Sure.  I'll separate the credentials and test data into 2 different files.
>> So, a normal user can run the tests into one go after some minor
>> credentials changes.
>> And an advanced user can have an option to change the test data if he
>> wants.
>>>
>>>
>>> >> >>> I should only need to
>>> >> >>> define one or more connections, then be able to run the tests. If
>>> >> >>> you
>>> >> >>> need to keep configuration info for "advanced users", let's put it
>>> >> >>> in
>>> >> >>> a different file to avoid confusing/scaring everyone else. Maybe
>>> >> >>> split
>>> >> >>> it into config.json for the stuff the user needs to edit
>>> >> >>> (config.json.in would go in git), and test_config.json for the
>>> >> >>> test
>>> >> >>> configuration.
>>> >> >
>>> >> >
>>> >> > Should i keep login and server credentials into
>>> >> > web/regression/test_config.json file and
>>> >> > put respective node details into config.json file of respective
>>> >> > node's
>>> >> > tests
>>> >> > directory?
>>> >>
>>> >> Not if you expect users to need to edit them - and if not, why are the
>>> >> values not just hard-coded?
>>> >>
>>> >> > e.g. for database node:
>>> >> > I'll create config.json file into .../databases/tests/ directory
>>> >> > put database add and update credentials into config.json
>>> >>
>>> >> The key here is to make it simple for users.
>>> >>
>>> >> - To run the default tests, they should be able to copy/edit a simple
>>> >> file, and just add database server details for the server to run
>>> >> against.
>>> >>
>>> >> - If we have configurable tests (because making them configurable adds
>>> >> genuine value), then we can use an "advanced" config file to allow the
>>> >> user to adjust settings as they want.
>>> >>
>>> >> In the simple case, the user should be able to run the tests
>>> >> successfully within a minute or two from starting.
>>> >>
>>> >> In designing the layout for files etc, remember the following:
>>> >>
>>> >> - Users should never edit a file that is in our source control. That's
>>> >> why we have .in files that we expect them to copy.
>>> >>
>>> >> - Unless they're an advanced user, they shouldn't need to copy the
>>> >> config file for advanced options. That means that the tests should
>>> >> have defaults that match what is in the template advanced config file
>>> >> (or, the tests could read advanced.json.in if advanced.json doesn't
>>> >> exist, though that does seem a little icky). Of course, those are
>>> >> example filenames, not necessarily what you may choose.
>>> >>
>>> >> --
>>> >> Dave Page
>>> >> Blog: http://pgsnake.blogspot.com
>>> >> Twitter: @pgsnake
>>> >>
>>> >> EnterpriseDB UK: http://www.enterprisedb.com
>>> >> The Enterprise PostgreSQL Company
>>> >
>>> >
>>> >
>>> >
>>> > --
>>> > Best,
>>> > Priyanka
>>> >
>>> > EnterpriseDB Corporation
>>> > The Enterprise PostgreSQL Company
>>>
>>>
>>>
>>> --
>>> Dave Page
>>> Blog: http://pgsnake.blogspot.com
>>> Twitter: @pgsnake
>>>
>>> EnterpriseDB UK: http://www.enterprisedb.com
>>> The Enterprise PostgreSQL Company
>>>
>>>
>>> --
>>> Sent via pgadmin-hackers mailing list ([email protected])
>>> To make changes to your subscription:
>>> http://www.postgresql.org/mailpref/pgadmin-hackers
>>
>>
>>
>>
>> --
>> Best,
>> Priyanka
>>
>> EnterpriseDB Corporation
>> The Enterprise PostgreSQL Company
>
>
>
>
> --
> Best,
> Priyanka
>
> EnterpriseDB Corporation
> The Enterprise PostgreSQL Company



-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

(pgadmin4)piranha:pgadmin4 dpage$ python web/regression/testsuite.py 
2016-06-29 20:12:43,007: INFO	pgadmin:	########################################################
2016-06-29 20:12:43,008: INFO	pgadmin:	Starting pgAdmin 4 v1.0-beta2...
2016-06-29 20:12:43,008: INFO	pgadmin:	########################################################
2016-06-29 20:12:43,008: DEBUG	pgadmin:	Python syspath: ['/Users/dpage/git/pgadmin4/web', '/Users/dpage/git/pgadmin4/web/regression', '/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/pytz-2014.10-py2.7.egg', '/Users/dpage/.virtualenvs/pgadmin4/lib/python27.zip', '/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7', '/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/plat-darwin', '/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/plat-mac', '/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/dpage/.virtualenvs/pgadmin4/Extras/lib/python', '/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/lib-tk', '/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/lib-old', '/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages']
2016-06-29 20:12:43,008: DEBUG	pgadmin:	Available translations: [Locale('fr')]
2016-06-29 20:12:43,052: INFO	pgadmin:	Examining potential module: pgadmin.about
2016-06-29 20:12:43,053: INFO	pgadmin:	Registering blueprint module: <pgadmin.about.AboutModule object at 0x109a23e90>
2016-06-29 20:12:43,053: INFO	pgadmin:	Examining potential module: pgadmin.browser
2016-06-29 20:12:43,057: INFO	pgadmin:	Registering blueprint module: <pgadmin.browser.BrowserModule object at 0x109cbe310>
2016-06-29 20:12:43,058: INFO	pgadmin:	Examining potential module: pgadmin.browser.collection
2016-06-29 20:12:43,061: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups
2016-06-29 20:12:43,062: INFO	pgadmin:	Examining potential module: pgadmin.browser.tests
2016-06-29 20:12:43,063: INFO	pgadmin:	Examining potential module: pgadmin.browser.utils
2016-06-29 20:12:43,064: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers
2016-06-29 20:12:43,072: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.tests
2016-06-29 20:12:43,074: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases
2016-06-29 20:12:43,079: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.ppas
2016-06-29 20:12:43,079: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.resource_groups
2016-06-29 20:12:43,083: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.roles
2016-06-29 20:12:43,086: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.tablespaces
2016-06-29 20:12:43,090: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.tests
2016-06-29 20:12:43,090: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.types
2016-06-29 20:12:43,090: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.utils
2016-06-29 20:12:43,094: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.casts
2016-06-29 20:12:43,097: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.event_triggers
2016-06-29 20:12:43,100: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.extensions
2016-06-29 20:12:43,102: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers
2016-06-29 20:12:43,107: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.languages
2016-06-29 20:12:43,109: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas
2016-06-29 20:12:43,113: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.tests
2016-06-29 20:12:43,113: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.utils
2016-06-29 20:12:43,133: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers.foreign_servers
2016-06-29 20:12:43,142: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers.foreign_servers.user_mapping
2016-06-29 20:12:43,162: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.catalog_objects
2016-06-29 20:12:43,165: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.collations
2016-06-29 20:12:43,168: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.domains
2016-06-29 20:12:43,171: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.foreign_tables
2016-06-29 20:12:43,176: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.fts_configurations
2016-06-29 20:12:43,179: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.fts_dictionaries
2016-06-29 20:12:43,182: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.fts_parser
2016-06-29 20:12:43,186: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.fts_templates
2016-06-29 20:12:43,188: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.functions
2016-06-29 20:12:43,194: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.sequences
2016-06-29 20:12:43,197: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables
2016-06-29 20:12:43,209: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.types
2016-06-29 20:12:43,214: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.utils
2016-06-29 20:12:43,215: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.views
2016-06-29 20:12:43,226: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.catalog_objects.columns
2016-06-29 20:12:43,240: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.domains.domain_constraints
2016-06-29 20:12:43,325: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables.column
2016-06-29 20:12:43,330: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints
2016-06-29 20:12:43,331: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables.indexes
2016-06-29 20:12:43,335: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables.rules
2016-06-29 20:12:43,337: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables.triggers
2016-06-29 20:12:43,359: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.check_constraint
2016-06-29 20:12:43,364: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.exclusion_constraint
2016-06-29 20:12:43,369: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.foreign_key
2016-06-29 20:12:43,374: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.index_constraint
2016-06-29 20:12:43,379: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.type
2016-06-29 20:12:43,452: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.views.children
2016-06-29 20:12:43,461: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.views.children
2016-06-29 20:12:43,471: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.catalog_objects
2016-06-29 20:12:43,471: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.collations
2016-06-29 20:12:43,471: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.domains
2016-06-29 20:12:43,472: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.foreign_tables
2016-06-29 20:12:43,472: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.fts_configurations
2016-06-29 20:12:43,472: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.fts_dictionaries
2016-06-29 20:12:43,472: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.fts_parser
2016-06-29 20:12:43,472: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.fts_templates
2016-06-29 20:12:43,472: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.functions
2016-06-29 20:12:43,472: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.sequences
2016-06-29 20:12:43,473: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.tables
2016-06-29 20:12:43,473: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.types
2016-06-29 20:12:43,473: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.utils
2016-06-29 20:12:43,473: INFO	pgadmin:	Examining potential module: pgadmin.browser.server_groups.servers.databases.schemas.views
2016-06-29 20:12:43,684: INFO	pgadmin:	Examining potential module: pgadmin.dashboard
2016-06-29 20:12:43,686: INFO	pgadmin:	Registering blueprint module: <pgadmin.dashboard.DashboardModule object at 0x10a6ff650>
2016-06-29 20:12:43,691: INFO	pgadmin:	Examining potential module: pgadmin.help
2016-06-29 20:12:43,692: INFO	pgadmin:	Registering blueprint module: <pgadmin.help.HelpModule object at 0x10a7126d0>
2016-06-29 20:12:43,692: INFO	pgadmin:	Examining potential module: pgadmin.misc
2016-06-29 20:12:43,693: INFO	pgadmin:	Registering blueprint module: <pgadmin.misc.MiscModule object at 0x10a712990>
2016-06-29 20:12:43,693: INFO	pgadmin:	Examining potential module: pgadmin.misc.bgprocess
2016-06-29 20:12:43,698: INFO	pgadmin:	Examining potential module: pgadmin.misc.depends
2016-06-29 20:12:43,699: INFO	pgadmin:	Examining potential module: pgadmin.misc.file_manager
2016-06-29 20:12:43,702: INFO	pgadmin:	Examining potential module: pgadmin.misc.sql
2016-06-29 20:12:43,703: INFO	pgadmin:	Examining potential module: pgadmin.misc.statistics
2016-06-29 20:12:43,704: INFO	pgadmin:	Examining potential module: pgadmin.misc.bgprocess.process_executor
2016-06-29 20:12:43,705: INFO	pgadmin:	Examining potential module: pgadmin.misc.bgprocess.processes
2016-06-29 20:12:43,709: INFO	pgadmin:	Examining potential module: pgadmin.model
2016-06-29 20:12:43,709: INFO	pgadmin:	Examining potential module: pgadmin.preferences
2016-06-29 20:12:43,710: INFO	pgadmin:	Registering blueprint module: <pgadmin.preferences.PreferencesModule object at 0x10a752690>
2016-06-29 20:12:43,711: INFO	pgadmin:	Examining potential module: pgadmin.redirects
2016-06-29 20:12:43,711: INFO	pgadmin:	Registering blueprint module: <pgadmin.utils.PgAdminModule object at 0x10a752d50>
2016-06-29 20:12:43,712: INFO	pgadmin:	Examining potential module: pgadmin.settings
2016-06-29 20:12:43,712: INFO	pgadmin:	Registering blueprint module: <pgadmin.settings.SettingsModule object at 0x109cbe090>
2016-06-29 20:12:43,714: INFO	pgadmin:	Examining potential module: pgadmin.tools
2016-06-29 20:12:43,714: INFO	pgadmin:	Registering blueprint module: <pgadmin.utils.PgAdminModule object at 0x10a752fd0>
2016-06-29 20:12:43,714: INFO	pgadmin:	Examining potential module: pgadmin.tools.backup
2016-06-29 20:12:43,717: INFO	pgadmin:	Examining potential module: pgadmin.tools.datagrid
2016-06-29 20:12:43,745: INFO	pgadmin:	Examining potential module: pgadmin.tools.debugger
2016-06-29 20:12:43,754: INFO	pgadmin:	Examining potential module: pgadmin.tools.grant_wizard
2016-06-29 20:12:43,756: INFO	pgadmin:	Examining potential module: pgadmin.tools.import_export
2016-06-29 20:12:43,757: INFO	pgadmin:	Examining potential module: pgadmin.tools.maintenance
2016-06-29 20:12:43,759: INFO	pgadmin:	Examining potential module: pgadmin.tools.restore
2016-06-29 20:12:43,760: INFO	pgadmin:	Examining potential module: pgadmin.tools.sqleditor
2016-06-29 20:12:43,760: INFO	pgadmin:	Examining potential module: pgadmin.tools.user_management
2016-06-29 20:12:43,775: INFO	pgadmin:	Examining potential module: pgadmin.tools.sqleditor.command
2016-06-29 20:12:43,781: INFO	pgadmin:	Examining potential module: pgadmin.utils
2016-06-29 20:12:43,831: DEBUG	pgadmin:	URL map: Map([<Rule '/import_export/js/import_export.js' (HEAD, OPTIONS, GET) -> import_export.script>,
 <Rule '/maintenance/js/maintenance.js' (HEAD, OPTIONS, GET) -> maintenance.script>,
 <Rule '/datagrid/css/datagrid.css' (HEAD, OPTIONS, GET) -> datagrid.datagrid_css>,
 <Rule '/debugger/js/debugger_ui.js' (HEAD, OPTIONS, GET) -> debugger.script_debugger_js>,
 <Rule '/debugger/js/debugger.js' (HEAD, OPTIONS, GET) -> debugger.script>,
 <Rule '/debugger/js/direct.js' (HEAD, OPTIONS, GET) -> debugger.script_debugger_direct_js>,
 <Rule '/browser/catalog_object_column/module.js' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.module.js>,
 <Rule '/browser/catalog_object_column/module.js' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.module.js>,
 <Rule '/browser/foreign_data_wrapper/module.js' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.module.js>,
 <Rule '/browser/exclusion_constraint/module.js' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.module.js>,
 <Rule '/browser/exclusion_constraint/module.js' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.module.js>,
 <Rule '/browser/domain_constraints/module.js' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.module.js>,
 <Rule '/browser/domain_constraints/module.js' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.module.js>,
 <Rule '/browser/fts_configuration/module.js' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.module.js>,
 <Rule '/browser/check_constraints/module.js' (HEAD, OPTIONS, GET) -> NODE-check_constraints.module.js>,
 <Rule '/browser/unique_constraint/module.js' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.module.js>,
 <Rule '/browser/fts_configuration/module.js' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.module.js>,
 <Rule '/browser/check_constraints/module.js' (HEAD, OPTIONS, GET) -> NODE-check_constraints.module.js>,
 <Rule '/browser/unique_constraint/module.js' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.module.js>,
 <Rule '/browser/trigger_function/module.js' (HEAD, OPTIONS, GET) -> NODE-trigger_function.module.js>,
 <Rule '/browser/trigger_function/module.js' (HEAD, OPTIONS, GET) -> NODE-trigger_function.module.js>,
 <Rule '/browser/foreign_server/module.js' (HEAD, OPTIONS, GET) -> NODE-foreign_server.module.js>,
 <Rule '/browser/catalog_object/module.js' (HEAD, OPTIONS, GET) -> NODE-catalog_object.module.js>,
 <Rule '/browser/fts_dictionary/module.js' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.module.js>,
 <Rule '/browser/catalog_object/module.js' (HEAD, OPTIONS, GET) -> NODE-catalog_object.module.js>,
 <Rule '/browser/fts_dictionary/module.js' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.module.js>,
 <Rule '/browser/resource_group/module.js' (HEAD, OPTIONS, GET) -> NODE-resource_group.module.js>,
 <Rule '/browser/event_trigger/module.js' (HEAD, OPTIONS, GET) -> NODE-event_trigger.module.js>,
 <Rule '/browser/foreign-table/module.js' (HEAD, OPTIONS, GET) -> NODE-foreign-table.module.js>,
 <Rule '/browser/foreign-table/module.js' (HEAD, OPTIONS, GET) -> NODE-foreign-table.module.js>,
 <Rule '/browser/server-group/module.js' (HEAD, OPTIONS, GET) -> NODE-server-group.module.js>,
 <Rule '/browser/user_mapping/module.js' (HEAD, OPTIONS, GET) -> NODE-user_mapping.module.js>,
 <Rule '/browser/fts_template/module.js' (HEAD, OPTIONS, GET) -> NODE-fts_template.module.js>,
 <Rule '/browser/fts_template/module.js' (HEAD, OPTIONS, GET) -> NODE-fts_template.module.js>,
 <Rule '/browser/server-group/nodes/' (HEAD, OPTIONS, GET) -> NODE-server-group.nodes>,
 <Rule '/browser/server-group/obj/' (HEAD, POST, OPTIONS, GET) -> NODE-server-group.obj>,
 <Rule '/browser/constraints/module.js' (HEAD, OPTIONS, GET) -> NODE-constraints.module_js>,
 <Rule '/browser/foreign_key/module.js' (HEAD, OPTIONS, GET) -> NODE-foreign_key.module.js>,
 <Rule '/browser/primary_key/module.js' (HEAD, OPTIONS, GET) -> NODE-primary_key.module.js>,
 <Rule '/browser/constraints/module.js' (HEAD, OPTIONS, GET) -> NODE-constraints.module_js>,
 <Rule '/browser/foreign_key/module.js' (HEAD, OPTIONS, GET) -> NODE-foreign_key.module.js>,
 <Rule '/browser/primary_key/module.js' (HEAD, OPTIONS, GET) -> NODE-primary_key.module.js>,
 <Rule '/browser/fts_parser/module.js' (HEAD, OPTIONS, GET) -> NODE-fts_parser.module.js>,
 <Rule '/browser/fts_parser/module.js' (HEAD, OPTIONS, GET) -> NODE-fts_parser.module.js>,
 <Rule '/browser/tablespace/module.js' (HEAD, OPTIONS, GET) -> NODE-tablespace.module.js>,
 <Rule '/browser/extension/module.js' (HEAD, OPTIONS, GET) -> NODE-extension.module.js>,
 <Rule '/browser/collation/module.js' (HEAD, OPTIONS, GET) -> NODE-collation.module.js>,
 <Rule '/browser/procedure/module.js' (HEAD, OPTIONS, GET) -> NODE-procedure.module.js>,
 <Rule '/browser/collation/module.js' (HEAD, OPTIONS, GET) -> NODE-collation.module.js>,
 <Rule '/browser/procedure/module.js' (HEAD, OPTIONS, GET) -> NODE-procedure.module.js>,
 <Rule '/browser/database/module.js' (HEAD, OPTIONS, GET) -> NODE-database.module.js>,
 <Rule '/browser/language/module.js' (HEAD, OPTIONS, GET) -> NODE-language.module.js>,
 <Rule '/browser/function/module.js' (HEAD, OPTIONS, GET) -> NODE-function.module.js>,
 <Rule '/browser/sequence/module.js' (HEAD, OPTIONS, GET) -> NODE-sequence.module.js>,
 <Rule '/browser/function/module.js' (HEAD, OPTIONS, GET) -> NODE-function.module.js>,
 <Rule '/browser/sequence/module.js' (HEAD, OPTIONS, GET) -> NODE-sequence.module.js>,
 <Rule '/browser/trigger/module.js' (HEAD, OPTIONS, GET) -> NODE-trigger.module.js>,
 <Rule '/browser/catalog/module.js' (HEAD, OPTIONS, GET) -> NODE-catalog.module.js>,
 <Rule '/browser/trigger/module.js' (HEAD, OPTIONS, GET) -> NODE-trigger.module.js>,
 <Rule '/browser/server/module.js' (HEAD, OPTIONS, GET) -> NODE-server.module.js>,
 <Rule '/browser/schema/module.js' (HEAD, OPTIONS, GET) -> NODE-schema.module.js>,
 <Rule '/browser/domain/module.js' (HEAD, OPTIONS, GET) -> NODE-domain.module.js>,
 <Rule '/browser/column/module.js' (HEAD, OPTIONS, GET) -> NODE-column.module.js>,
 <Rule '/browser/domain/module.js' (HEAD, OPTIONS, GET) -> NODE-domain.module.js>,
 <Rule '/browser/column/module.js' (HEAD, OPTIONS, GET) -> NODE-column.module.js>,
 <Rule '/browser/table/module.js' (HEAD, OPTIONS, GET) -> NODE-table.module.js>,
 <Rule '/browser/index/module.js' (HEAD, OPTIONS, GET) -> NODE-index.module.js>,
 <Rule '/browser/mview/module.js' (HEAD, OPTIONS, GET) -> NODE-mview.module.js>,
 <Rule '/browser/table/module.js' (HEAD, OPTIONS, GET) -> NODE-table.module.js>,
 <Rule '/browser/index/module.js' (HEAD, OPTIONS, GET) -> NODE-index.module.js>,
 <Rule '/browser/mview/module.js' (HEAD, OPTIONS, GET) -> NODE-mview.module.js>,
 <Rule '/browser/cast/module.js' (HEAD, OPTIONS, GET) -> NODE-cast.module.js>,
 <Rule '/browser/rule/module.js' (HEAD, OPTIONS, GET) -> NODE-rule.module.js>,
 <Rule '/browser/type/module.js' (HEAD, OPTIONS, GET) -> NODE-type.module.js>,
 <Rule '/browser/view/module.js' (HEAD, OPTIONS, GET) -> NODE-view.module.js>,
 <Rule '/browser/rule/module.js' (HEAD, OPTIONS, GET) -> NODE-rule.module.js>,
 <Rule '/browser/type/module.js' (HEAD, OPTIONS, GET) -> NODE-type.module.js>,
 <Rule '/browser/view/module.js' (HEAD, OPTIONS, GET) -> NODE-view.module.js>,
 <Rule '/browser/role/module.js' (HEAD, OPTIONS, GET) -> NODE-role.module.js>,
 <Rule '/browser/js/collection.js' (HEAD, OPTIONS, GET) -> browser.collection_js>,
 <Rule '/browser/js/messages.js' (HEAD, OPTIONS, GET) -> browser.messages_js>,
 <Rule '/browser/js/browser.js' (HEAD, OPTIONS, GET) -> browser.browser_js>,
 <Rule '/browser/js/error.js' (HEAD, OPTIONS, GET) -> browser.error_js>,
 <Rule '/browser/js/node.js' (HEAD, OPTIONS, GET) -> browser.node_js>,
 <Rule '/misc/bgprocess/list/' (HEAD, OPTIONS, GET) -> bgprocess.list>,
 <Rule '/misc/explain/explain.js' (HEAD, OPTIONS, GET) -> misc.explain_js>,
 <Rule '/user_management/user_management.js' (HEAD, OPTIONS, GET) -> user_management.script>,
 <Rule '/user_management/user/' (POST, OPTIONS) -> user_management.create>,
 <Rule '/file_manager/file_manager_config.js' (HEAD, OPTIONS, GET) -> file_manager.file_manager_config_js>,
 <Rule '/file_manager/file_manager.js' (HEAD, OPTIONS, GET) -> file_manager.file_manager_js>,
 <Rule '/grant_wizard/grant_wizard.js' (HEAD, OPTIONS, GET) -> grant_wizard.script>,
 <Rule '/file_manager/get_trans_id' (HEAD, POST, OPTIONS, GET) -> file_manager.get_trans_id>,
 <Rule '/file_manager/utility.js' (HEAD, OPTIONS, GET) -> file_manager.utility>,
 <Rule '/file_manager/en.js' (HEAD, OPTIONS, GET) -> file_manager.language>,
 <Rule '/preferences/preferences.js' (HEAD, OPTIONS, GET) -> preferences.script>,
 <Rule '/preferences/preferences' (HEAD, OPTIONS, GET) -> preferences.preferences>,
 <Rule '/dashboard/session_stats/' (HEAD, OPTIONS, GET) -> dashboard.session_stats>,
 <Rule '/dashboard/dashboard.js' (HEAD, OPTIONS, GET) -> dashboard.script>,
 <Rule '/sqleditor/sqleditor.js' (HEAD, OPTIONS, GET) -> sqleditor.script>,
 <Rule '/dashboard/tps_stats/' (HEAD, OPTIONS, GET) -> dashboard.tps_stats>,
 <Rule '/dashboard/bio_stats/' (HEAD, OPTIONS, GET) -> dashboard.bio_stats>,
 <Rule '/sqleditor/load_file/' (PUT, POST, OPTIONS) -> sqleditor.load_file>,
 <Rule '/sqleditor/save_file/' (PUT, POST, OPTIONS) -> sqleditor.save_file>,
 <Rule '/dashboard/ti_stats/' (HEAD, OPTIONS, GET) -> dashboard.ti_stats>,
 <Rule '/dashboard/to_stats/' (HEAD, OPTIONS, GET) -> dashboard.to_stats>,
 <Rule '/dashboard/activity/' (HEAD, OPTIONS, GET) -> dashboard.activity>,
 <Rule '/dashboard/prepared/' (HEAD, OPTIONS, GET) -> dashboard.prepared>,
 <Rule '/dashboard/config/' (HEAD, OPTIONS, GET) -> dashboard.config>,
 <Rule '/dashboard/locks/' (HEAD, OPTIONS, GET) -> dashboard.locks>,
 <Rule '/settings/reset_layout' (OPTIONS, DELETE) -> settings.reset_layout>,
 <Rule '/settings/settings.js' (HEAD, OPTIONS, GET) -> settings.script>,
 <Rule '/datagrid/datagrid.js' (HEAD, OPTIONS, GET) -> datagrid.script>,
 <Rule '/datagrid/filter' (HEAD, OPTIONS, GET) -> datagrid.show_filter>,
 <Rule '/settings/store' (POST, OPTIONS) -> settings.store>,
 <Rule '/settings/get' (POST, OPTIONS) -> settings.get>,
 <Rule '/browser/browser.css' (HEAD, OPTIONS, GET) -> browser.browser_css>,
 <Rule '/restore/restore.js' (HEAD, OPTIONS, GET) -> restore.script>,
 <Rule '/browser/nodes/' (HEAD, OPTIONS, GET) -> browser.get_nodes>,
 <Rule '/backup/backup.js' (HEAD, OPTIONS, GET) -> backup.script>,
 <Rule '/about/about.js' (HEAD, OPTIONS, GET) -> about.script>,
 <Rule '/misc/bgprocess/' (HEAD, OPTIONS, GET) -> bgprocess.index>,
 <Rule '/misc/ping' (HEAD, POST, OPTIONS, GET) -> misc.ping>,
 <Rule '/user_management/' (HEAD, OPTIONS, GET) -> user_management.index>,
 <Rule '/import_export/' (HEAD, OPTIONS, GET) -> import_export.index>,
 <Rule '/file_manager/' (HEAD, OPTIONS, GET) -> file_manager.index>,
 <Rule '/grant_wizard/' (HEAD, OPTIONS, GET) -> grant_wizard.index>,
 <Rule '/preferences/' (HEAD, OPTIONS, GET) -> preferences.index>,
 <Rule '/favicon.ico' (HEAD, OPTIONS, GET) -> redirects.favicon>,
 <Rule '/maintenance/' (HEAD, OPTIONS, GET) -> maintenance.index>,
 <Rule '/dashboard/' (HEAD, OPTIONS, GET) -> dashboard.index>,
 <Rule '/sqleditor/' (HEAD, OPTIONS, GET) -> sqleditor.index>,
 <Rule '/settings/' (HEAD, OPTIONS, GET) -> settings.index>,
 <Rule '/datagrid/' (HEAD, OPTIONS, GET) -> datagrid.index>,
 <Rule '/debugger/' (HEAD, OPTIONS, GET) -> debugger.index>,
 <Rule '/browser/' (HEAD, OPTIONS, GET) -> browser.index>,
 <Rule '/restore/' (HEAD, OPTIONS, GET) -> restore.index>,
 <Rule '/logout' (HEAD, OPTIONS, GET) -> security.logout>,
 <Rule '/change' (HEAD, POST, OPTIONS, GET) -> security.change_password>,
 <Rule '/backup/' (HEAD, OPTIONS, GET) -> backup.index>,
 <Rule '/login' (HEAD, POST, OPTIONS, GET) -> security.login>,
 <Rule '/reset' (HEAD, POST, OPTIONS, GET) -> security.forgot_password>,
 <Rule '/about/' (HEAD, OPTIONS, GET) -> about.index>,
 <Rule '/tools/' (HEAD, OPTIONS, GET) -> tools.index>,
 <Rule '/misc/' (HEAD, OPTIONS, GET) -> misc.index>,
 <Rule '/' (HEAD, OPTIONS, GET) -> redirects.index>,
 <Rule '/browser/catalog_object_column/dependency/<gid>/<sid>/<did>/<scid>/<coid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.dependency_id>,
 <Rule '/browser/catalog_object_column/dependency/<gid>/<sid>/<did>/<scid>/<coid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.dependency_id>,
 <Rule '/browser/catalog_object_column/dependent/<gid>/<sid>/<did>/<scid>/<coid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.dependent_id>,
 <Rule '/browser/catalog_object_column/dependent/<gid>/<sid>/<did>/<scid>/<coid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.dependent_id>,
 <Rule '/browser/catalog_object_column/nodes/<gid>/<sid>/<did>/<scid>/<coid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.nodes_id>,
 <Rule '/browser/catalog_object_column/nodes/<gid>/<sid>/<did>/<scid>/<coid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.nodes_id>,
 <Rule '/browser/catalog_object_column/obj/<gid>/<sid>/<did>/<scid>/<coid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.obj_id>,
 <Rule '/browser/catalog_object_column/sql/<gid>/<sid>/<did>/<scid>/<coid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.sql_id>,
 <Rule '/browser/catalog_object_column/obj/<gid>/<sid>/<did>/<scid>/<coid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.obj_id>,
 <Rule '/browser/catalog_object_column/sql/<gid>/<sid>/<did>/<scid>/<coid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.sql_id>,
 <Rule '/browser/exclusion_constraint/children/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.children_id>,
 <Rule '/browser/exclusion_constraint/children/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.children_id>,
 <Rule '/browser/exclusion_constraint/delete/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (OPTIONS, DELETE) -> NODE-exclusion_constraint.delete_id>,
 <Rule '/browser/exclusion_constraint/delete/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (OPTIONS, DELETE) -> NODE-exclusion_constraint.delete_id>,
 <Rule '/browser/exclusion_constraint/stats/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.stats_id>,
 <Rule '/browser/exclusion_constraint/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.nodes_id>,
 <Rule '/browser/exclusion_constraint/stats/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.stats_id>,
 <Rule '/browser/exclusion_constraint/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.nodes_id>,
 <Rule '/browser/exclusion_constraint/msql/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.msql_id>,
 <Rule '/browser/exclusion_constraint/msql/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.msql_id>,
 <Rule '/browser/exclusion_constraint/obj/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-exclusion_constraint.obj_id>,
 <Rule '/browser/exclusion_constraint/sql/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.sql_id>,
 <Rule '/browser/exclusion_constraint/obj/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-exclusion_constraint.obj_id>,
 <Rule '/browser/exclusion_constraint/sql/<gid>/<sid>/<did>/<scid>/<tid>/<exid>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.sql_id>,
 <Rule '/browser/domain_constraints/dependency/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.dependency_id>,
 <Rule '/browser/domain_constraints/dependency/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.dependency_id>,
 <Rule '/browser/domain_constraints/dependent/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.dependent_id>,
 <Rule '/browser/domain_constraints/dependent/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.dependent_id>,
 <Rule '/browser/domain_constraints/children/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.children_id>,
 <Rule '/browser/domain_constraints/children/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.children_id>,
 <Rule '/browser/domain_constraints/delete/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (OPTIONS, DELETE) -> NODE-domain_constraints.delete_id>,
 <Rule '/browser/domain_constraints/delete/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (OPTIONS, DELETE) -> NODE-domain_constraints.delete_id>,
 <Rule '/browser/domain_constraints/stats/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.stats_id>,
 <Rule '/browser/domain_constraints/nodes/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.nodes_id>,
 <Rule '/browser/domain_constraints/stats/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.stats_id>,
 <Rule '/browser/domain_constraints/nodes/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.nodes_id>,
 <Rule '/browser/domain_constraints/msql/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.msql_id>,
 <Rule '/browser/domain_constraints/msql/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.msql_id>,
 <Rule '/browser/domain_constraints/obj/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-domain_constraints.obj_id>,
 <Rule '/browser/domain_constraints/sql/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.sql_id>,
 <Rule '/browser/domain_constraints/obj/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-domain_constraints.obj_id>,
 <Rule '/browser/domain_constraints/sql/<gid>/<sid>/<did>/<scid>/<doid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.sql_id>,
 <Rule '/browser/check_constraints/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.dependency_id>,
 <Rule '/browser/unique_constraint/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.dependency_id>,
 <Rule '/browser/check_constraints/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.dependency_id>,
 <Rule '/browser/unique_constraint/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.dependency_id>,
 <Rule '/browser/check_constraints/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.dependent_id>,
 <Rule '/browser/unique_constraint/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.dependent_id>,
 <Rule '/browser/check_constraints/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.dependent_id>,
 <Rule '/browser/unique_constraint/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.dependent_id>,
 <Rule '/browser/check_constraints/validate/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.validate_id>,
 <Rule '/browser/check_constraints/children/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.children_id>,
 <Rule '/browser/unique_constraint/children/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.children_id>,
 <Rule '/browser/check_constraints/validate/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.validate_id>,
 <Rule '/browser/check_constraints/children/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.children_id>,
 <Rule '/browser/unique_constraint/children/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.children_id>,
 <Rule '/browser/check_constraints/delete/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (OPTIONS, DELETE) -> NODE-check_constraints.delete_id>,
 <Rule '/browser/unique_constraint/delete/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (OPTIONS, DELETE) -> NODE-unique_constraint.delete_id>,
 <Rule '/browser/check_constraints/delete/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (OPTIONS, DELETE) -> NODE-check_constraints.delete_id>,
 <Rule '/browser/unique_constraint/delete/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (OPTIONS, DELETE) -> NODE-unique_constraint.delete_id>,
 <Rule '/browser/check_constraints/stats/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.stats_id>,
 <Rule '/browser/check_constraints/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.nodes_id>,
 <Rule '/browser/unique_constraint/stats/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.stats_id>,
 <Rule '/browser/unique_constraint/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.nodes_id>,
 <Rule '/browser/check_constraints/stats/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.stats_id>,
 <Rule '/browser/check_constraints/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.nodes_id>,
 <Rule '/browser/unique_constraint/stats/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.stats_id>,
 <Rule '/browser/unique_constraint/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.nodes_id>,
 <Rule '/browser/check_constraints/msql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.msql_id>,
 <Rule '/browser/unique_constraint/msql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.msql_id>,
 <Rule '/browser/check_constraints/msql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.msql_id>,
 <Rule '/browser/unique_constraint/msql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.msql_id>,
 <Rule '/browser/check_constraints/sql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.sql_id>,
 <Rule '/browser/check_constraints/obj/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-check_constraints.obj_id>,
 <Rule '/browser/unique_constraint/obj/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-unique_constraint.obj_id>,
 <Rule '/browser/unique_constraint/sql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.sql_id>,
 <Rule '/browser/check_constraints/sql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.sql_id>,
 <Rule '/browser/check_constraints/obj/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-check_constraints.obj_id>,
 <Rule '/browser/unique_constraint/obj/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-unique_constraint.obj_id>,
 <Rule '/browser/unique_constraint/sql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.sql_id>,
 <Rule '/browser/user_mapping/dependency/<gid>/<sid>/<did>/<fid>/<fsid>/<umid>' (HEAD, OPTIONS, GET) -> NODE-user_mapping.dependency_id>,
 <Rule '/browser/user_mapping/dependent/<gid>/<sid>/<did>/<fid>/<fsid>/<umid>' (HEAD, OPTIONS, GET) -> NODE-user_mapping.dependent_id>,
 <Rule '/browser/user_mapping/children/<gid>/<sid>/<did>/<fid>/<fsid>/<umid>' (HEAD, OPTIONS, GET) -> NODE-user_mapping.children_id>,
 <Rule '/browser/user_mapping/delete/<gid>/<sid>/<did>/<fid>/<fsid>/<umid>' (OPTIONS, DELETE) -> NODE-user_mapping.delete_id>,
 <Rule '/browser/user_mapping/stats/<gid>/<sid>/<did>/<fid>/<fsid>/<umid>' (HEAD, OPTIONS, GET) -> NODE-user_mapping.stats_id>,
 <Rule '/browser/user_mapping/nodes/<gid>/<sid>/<did>/<fid>/<fsid>/<umid>' (HEAD, OPTIONS, GET) -> NODE-user_mapping.nodes_id>,
 <Rule '/browser/user_mapping/msql/<gid>/<sid>/<did>/<fid>/<fsid>/<umid>' (HEAD, OPTIONS, GET) -> NODE-user_mapping.msql_id>,
 <Rule '/browser/user_mapping/obj/<gid>/<sid>/<did>/<fid>/<fsid>/<umid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-user_mapping.obj_id>,
 <Rule '/browser/user_mapping/sql/<gid>/<sid>/<did>/<fid>/<fsid>/<umid>' (HEAD, OPTIONS, GET) -> NODE-user_mapping.sql_id>,
 <Rule '/browser/foreign_key/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.dependency_id>,
 <Rule '/browser/primary_key/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.dependency_id>,
 <Rule '/browser/foreign_key/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.dependency_id>,
 <Rule '/browser/primary_key/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.dependency_id>,
 <Rule '/browser/foreign_key/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.dependent_id>,
 <Rule '/browser/primary_key/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.dependent_id>,
 <Rule '/browser/foreign_key/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.dependent_id>,
 <Rule '/browser/primary_key/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.dependent_id>,
 <Rule '/browser/foreign_key/validate/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.validate_id>,
 <Rule '/browser/foreign_key/children/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.children_id>,
 <Rule '/browser/primary_key/children/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.children_id>,
 <Rule '/browser/foreign_key/validate/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.validate_id>,
 <Rule '/browser/foreign_key/children/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.children_id>,
 <Rule '/browser/primary_key/children/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.children_id>,
 <Rule '/browser/foreign_key/delete/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (OPTIONS, DELETE) -> NODE-foreign_key.delete_id>,
 <Rule '/browser/primary_key/delete/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (OPTIONS, DELETE) -> NODE-primary_key.delete_id>,
 <Rule '/browser/foreign_key/delete/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (OPTIONS, DELETE) -> NODE-foreign_key.delete_id>,
 <Rule '/browser/primary_key/delete/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (OPTIONS, DELETE) -> NODE-primary_key.delete_id>,
 <Rule '/browser/foreign_key/stats/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.stats_id>,
 <Rule '/browser/foreign_key/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.nodes_id>,
 <Rule '/browser/primary_key/stats/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.stats_id>,
 <Rule '/browser/primary_key/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.nodes_id>,
 <Rule '/browser/foreign_key/stats/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.stats_id>,
 <Rule '/browser/foreign_key/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.nodes_id>,
 <Rule '/browser/primary_key/stats/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.stats_id>,
 <Rule '/browser/primary_key/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.nodes_id>,
 <Rule '/browser/foreign_key/msql/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.msql_id>,
 <Rule '/browser/primary_key/msql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.msql_id>,
 <Rule '/browser/foreign_key/msql/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.msql_id>,
 <Rule '/browser/primary_key/msql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.msql_id>,
 <Rule '/browser/foreign_key/sql/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.sql_id>,
 <Rule '/browser/foreign_key/obj/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-foreign_key.obj_id>,
 <Rule '/browser/primary_key/obj/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-primary_key.obj_id>,
 <Rule '/browser/primary_key/sql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.sql_id>,
 <Rule '/browser/foreign_key/sql/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.sql_id>,
 <Rule '/browser/foreign_key/obj/<gid>/<sid>/<did>/<scid>/<tid>/<fkid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-foreign_key.obj_id>,
 <Rule '/browser/primary_key/obj/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-primary_key.obj_id>,
 <Rule '/browser/primary_key/sql/<gid>/<sid>/<did>/<scid>/<tid>/<cid>' (HEAD, OPTIONS, GET) -> NODE-primary_key.sql_id>,
 <Rule '/browser/trigger/get_triggerfunctions/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.get_triggerfunctions_id>,
 <Rule '/browser/trigger/get_triggerfunctions/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.get_triggerfunctions_id>,
 <Rule '/browser/trigger/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.dependency_id>,
 <Rule '/browser/trigger/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.dependency_id>,
 <Rule '/browser/trigger/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.dependent_id>,
 <Rule '/browser/trigger/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.dependent_id>,
 <Rule '/browser/trigger/children/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.children_id>,
 <Rule '/browser/trigger/children/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.children_id>,
 <Rule '/browser/trigger/enable/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (PUT, OPTIONS) -> NODE-trigger.enable_id>,
 <Rule '/browser/trigger/delete/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (OPTIONS, DELETE) -> NODE-trigger.delete_id>,
 <Rule '/browser/trigger/enable/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (PUT, OPTIONS) -> NODE-trigger.enable_id>,
 <Rule '/browser/trigger/delete/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (OPTIONS, DELETE) -> NODE-trigger.delete_id>,
 <Rule '/browser/trigger/stats/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.stats_id>,
 <Rule '/browser/trigger/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.nodes_id>,
 <Rule '/browser/trigger/stats/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.stats_id>,
 <Rule '/browser/trigger/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.nodes_id>,
 <Rule '/browser/trigger/msql/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.msql_id>,
 <Rule '/browser/trigger/msql/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.msql_id>,
 <Rule '/browser/trigger/sql/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.sql_id>,
 <Rule '/browser/trigger/obj/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-trigger.obj_id>,
 <Rule '/browser/trigger/sql/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (HEAD, OPTIONS, GET) -> NODE-trigger.sql_id>,
 <Rule '/browser/trigger/obj/<gid>/<sid>/<did>/<scid>/<tid>/<trid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-trigger.obj_id>,
 <Rule '/browser/column/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.dependency_id>,
 <Rule '/browser/column/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.dependency_id>,
 <Rule '/browser/column/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.dependent_id>,
 <Rule '/browser/column/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.dependent_id>,
 <Rule '/browser/column/children/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.children_id>,
 <Rule '/browser/column/children/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.children_id>,
 <Rule '/browser/column/stats/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.stats_id>,
 <Rule '/browser/column/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.nodes_id>,
 <Rule '/browser/column/stats/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.stats_id>,
 <Rule '/browser/column/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.nodes_id>,
 <Rule '/browser/column/msql/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.msql_id>,
 <Rule '/browser/column/msql/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.msql_id>,
 <Rule '/browser/column/obj/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-column.obj_id>,
 <Rule '/browser/column/sql/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.sql_id>,
 <Rule '/browser/column/obj/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-column.obj_id>,
 <Rule '/browser/column/sql/<gid>/<sid>/<did>/<scid>/<tid>/<clid>' (HEAD, OPTIONS, GET) -> NODE-column.sql_id>,
 <Rule '/browser/index/get_access_methods/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.get_access_methods_id>,
 <Rule '/browser/index/get_access_methods/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.get_access_methods_id>,
 <Rule '/browser/index/get_collations/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.get_collations_id>,
 <Rule '/browser/index/get_collations/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.get_collations_id>,
 <Rule '/browser/index/get_op_class/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.get_op_class_id>,
 <Rule '/browser/index/get_op_class/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.get_op_class_id>,
 <Rule '/browser/index/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.dependency_id>,
 <Rule '/browser/index/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.dependency_id>,
 <Rule '/browser/index/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.dependent_id>,
 <Rule '/browser/index/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.dependent_id>,
 <Rule '/browser/index/children/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.children_id>,
 <Rule '/browser/index/children/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.children_id>,
 <Rule '/browser/index/delete/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (OPTIONS, DELETE) -> NODE-index.delete_id>,
 <Rule '/browser/index/delete/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (OPTIONS, DELETE) -> NODE-index.delete_id>,
 <Rule '/browser/index/stats/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.stats_id>,
 <Rule '/browser/index/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.nodes_id>,
 <Rule '/browser/index/stats/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.stats_id>,
 <Rule '/browser/index/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.nodes_id>,
 <Rule '/browser/index/msql/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.msql_id>,
 <Rule '/browser/index/msql/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.msql_id>,
 <Rule '/browser/index/sql/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.sql_id>,
 <Rule '/browser/index/obj/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-index.obj_id>,
 <Rule '/browser/index/sql/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (HEAD, OPTIONS, GET) -> NODE-index.sql_id>,
 <Rule '/browser/index/obj/<gid>/<sid>/<did>/<scid>/<tid>/<idx>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-index.obj_id>,
 <Rule '/browser/rule/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.dependency_id>,
 <Rule '/browser/rule/dependency/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.dependency_id>,
 <Rule '/browser/rule/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.dependent_id>,
 <Rule '/browser/rule/dependent/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.dependent_id>,
 <Rule '/browser/rule/children/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.children_id>,
 <Rule '/browser/rule/children/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.children_id>,
 <Rule '/browser/rule/configs/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.configs_id>,
 <Rule '/browser/rule/configs/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.configs_id>,
 <Rule '/browser/rule/delete/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (OPTIONS, DELETE) -> NODE-rule.delete_id>,
 <Rule '/browser/rule/delete/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (OPTIONS, DELETE) -> NODE-rule.delete_id>,
 <Rule '/browser/rule/stats/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.stats_id>,
 <Rule '/browser/rule/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.nodes_id>,
 <Rule '/browser/rule/stats/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.stats_id>,
 <Rule '/browser/rule/nodes/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.nodes_id>,
 <Rule '/browser/rule/msql/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.msql_id>,
 <Rule '/browser/rule/msql/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.msql_id>,
 <Rule '/browser/rule/sql/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.sql_id>,
 <Rule '/browser/rule/obj/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-rule.obj_id>,
 <Rule '/browser/rule/sql/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-rule.sql_id>,
 <Rule '/browser/rule/obj/<gid>/<sid>/<did>/<scid>/<tid>/<rid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-rule.obj_id>,
 <Rule '/datagrid/initialize/datagrid/<cmd_type>/<obj_type>/<sid>/<did>/<obj_id>' (PUT, POST, OPTIONS) -> datagrid.initialize_datagrid>,
 <Rule '/browser/catalog_object_column/nodes/<gid>/<sid>/<did>/<scid>/<coid>/' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.nodes>,
 <Rule '/browser/catalog_object_column/nodes/<gid>/<sid>/<did>/<scid>/<coid>/' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.nodes>,
 <Rule '/browser/catalog_object_column/obj/<gid>/<sid>/<did>/<scid>/<coid>/' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.obj>,
 <Rule '/browser/catalog_object_column/obj/<gid>/<sid>/<did>/<scid>/<coid>/' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.obj>,
 <Rule '/browser/exclusion_constraint/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.nodes>,
 <Rule '/browser/exclusion_constraint/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.nodes>,
 <Rule '/browser/exclusion_constraint/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.msql>,
 <Rule '/browser/exclusion_constraint/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.msql>,
 <Rule '/browser/exclusion_constraint/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-exclusion_constraint.obj>,
 <Rule '/browser/exclusion_constraint/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-exclusion_constraint.obj>,
 <Rule '/browser/domain_constraints/nodes/<gid>/<sid>/<did>/<scid>/<doid>/' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.nodes>,
 <Rule '/browser/domain_constraints/nodes/<gid>/<sid>/<did>/<scid>/<doid>/' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.nodes>,
 <Rule '/browser/domain_constraints/msql/<gid>/<sid>/<did>/<scid>/<doid>/' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.msql>,
 <Rule '/browser/domain_constraints/msql/<gid>/<sid>/<did>/<scid>/<doid>/' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.msql>,
 <Rule '/browser/domain_constraints/obj/<gid>/<sid>/<did>/<scid>/<doid>/' (HEAD, POST, OPTIONS, GET) -> NODE-domain_constraints.obj>,
 <Rule '/browser/domain_constraints/obj/<gid>/<sid>/<did>/<scid>/<doid>/' (HEAD, POST, OPTIONS, GET) -> NODE-domain_constraints.obj>,
 <Rule '/browser/fts_configuration/copyConfig/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.copyConfig_id>,
 <Rule '/browser/fts_configuration/dependency/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.dependency_id>,
 <Rule '/browser/fts_configuration/copyConfig/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.copyConfig_id>,
 <Rule '/browser/fts_configuration/dependency/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.dependency_id>,
 <Rule '/browser/fts_configuration/dependent/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.dependent_id>,
 <Rule '/browser/fts_configuration/dependent/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.dependent_id>,
 <Rule '/browser/fts_configuration/children/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.children_id>,
 <Rule '/browser/fts_configuration/children/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.children_id>,
 <Rule '/browser/fts_configuration/parsers/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.parsers_id>,
 <Rule '/browser/fts_configuration/parsers/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.parsers_id>,
 <Rule '/browser/fts_configuration/tokens/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.tokens_id>,
 <Rule '/browser/fts_configuration/delete/<gid>/<sid>/<did>/<scid>/<cfgid>' (OPTIONS, DELETE) -> NODE-fts_configuration.delete_id>,
 <Rule '/browser/fts_configuration/tokens/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.tokens_id>,
 <Rule '/browser/fts_configuration/delete/<gid>/<sid>/<did>/<scid>/<cfgid>' (OPTIONS, DELETE) -> NODE-fts_configuration.delete_id>,
 <Rule '/browser/fts_configuration/stats/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.stats_id>,
 <Rule '/browser/fts_configuration/nodes/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.nodes_id>,
 <Rule '/browser/check_constraints/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-check_constraints.nodes>,
 <Rule '/browser/unique_constraint/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.nodes>,
 <Rule '/browser/fts_configuration/stats/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.stats_id>,
 <Rule '/browser/fts_configuration/nodes/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.nodes_id>,
 <Rule '/browser/check_constraints/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-check_constraints.nodes>,
 <Rule '/browser/unique_constraint/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.nodes>,
 <Rule '/browser/fts_configuration/msql/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.msql_id>,
 <Rule '/browser/check_constraints/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-check_constraints.msql>,
 <Rule '/browser/unique_constraint/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.msql>,
 <Rule '/browser/fts_configuration/msql/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.msql_id>,
 <Rule '/browser/check_constraints/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-check_constraints.msql>,
 <Rule '/browser/unique_constraint/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.msql>,
 <Rule '/browser/fts_configuration/sql/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.sql_id>,
 <Rule '/browser/fts_configuration/obj/<gid>/<sid>/<did>/<scid>/<cfgid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-fts_configuration.obj_id>,
 <Rule '/browser/check_constraints/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-check_constraints.obj>,
 <Rule '/browser/unique_constraint/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-unique_constraint.obj>,
 <Rule '/browser/fts_configuration/sql/<gid>/<sid>/<did>/<scid>/<cfgid>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.sql_id>,
 <Rule '/browser/fts_configuration/obj/<gid>/<sid>/<did>/<scid>/<cfgid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-fts_configuration.obj_id>,
 <Rule '/browser/check_constraints/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-check_constraints.obj>,
 <Rule '/browser/unique_constraint/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-unique_constraint.obj>,
 <Rule '/browser/trigger_function/get_languages/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.get_languages_id>,
 <Rule '/browser/trigger_function/get_languages/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.get_languages_id>,
 <Rule '/browser/trigger_function/dependency/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.dependency_id>,
 <Rule '/browser/trigger_function/select_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.select_sql_id>,
 <Rule '/browser/trigger_function/dependency/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.dependency_id>,
 <Rule '/browser/trigger_function/select_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.select_sql_id>,
 <Rule '/browser/trigger_function/dependent/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.dependent_id>,
 <Rule '/browser/trigger_function/get_types/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.get_types_id>,
 <Rule '/browser/trigger_function/dependent/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.dependent_id>,
 <Rule '/browser/trigger_function/get_types/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.get_types_id>,
 <Rule '/browser/trigger_function/exec_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.exec_sql_id>,
 <Rule '/browser/trigger_function/children/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.children_id>,
 <Rule '/browser/trigger_function/exec_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.exec_sql_id>,
 <Rule '/browser/trigger_function/children/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.children_id>,
 <Rule '/browser/trigger_function/delete/<gid>/<sid>/<did>/<scid>/<fnid>' (OPTIONS, DELETE) -> NODE-trigger_function.delete_id>,
 <Rule '/browser/trigger_function/delete/<gid>/<sid>/<did>/<scid>/<fnid>' (OPTIONS, DELETE) -> NODE-trigger_function.delete_id>,
 <Rule '/browser/trigger_function/stats/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.stats_id>,
 <Rule '/browser/trigger_function/nodes/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.nodes_id>,
 <Rule '/browser/trigger_function/stats/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.stats_id>,
 <Rule '/browser/trigger_function/nodes/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.nodes_id>,
 <Rule '/browser/trigger_function/msql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.msql_id>,
 <Rule '/browser/trigger_function/msql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.msql_id>,
 <Rule '/browser/trigger_function/sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.sql_id>,
 <Rule '/browser/trigger_function/obj/<gid>/<sid>/<did>/<scid>/<fnid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-trigger_function.obj_id>,
 <Rule '/browser/trigger_function/sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.sql_id>,
 <Rule '/browser/trigger_function/obj/<gid>/<sid>/<did>/<scid>/<fnid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-trigger_function.obj_id>,
 <Rule '/browser/fts_dictionary/fetch_templates/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.fetch_templates_id>,
 <Rule '/browser/fts_dictionary/fetch_templates/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.fetch_templates_id>,
 <Rule '/browser/foreign_server/dependency/<gid>/<sid>/<did>/<fid>/<fsid>' (HEAD, OPTIONS, GET) -> NODE-foreign_server.dependency_id>,
 <Rule '/browser/catalog_object/dependency/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.dependency_id>,
 <Rule '/browser/fts_dictionary/dependency/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.dependency_id>,
 <Rule '/browser/catalog_object/dependency/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.dependency_id>,
 <Rule '/browser/fts_dictionary/dependency/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.dependency_id>,
 <Rule '/browser/foreign_server/dependent/<gid>/<sid>/<did>/<fid>/<fsid>' (HEAD, OPTIONS, GET) -> NODE-foreign_server.dependent_id>,
 <Rule '/browser/catalog_object/dependent/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.dependent_id>,
 <Rule '/browser/fts_dictionary/dependent/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.dependent_id>,
 <Rule '/browser/catalog_object/dependent/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.dependent_id>,
 <Rule '/browser/fts_dictionary/dependent/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.dependent_id>,
 <Rule '/browser/foreign_server/children/<gid>/<sid>/<did>/<fid>/<fsid>' (HEAD, OPTIONS, GET) -> NODE-foreign_server.children_id>,
 <Rule '/browser/catalog_object/children/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.children_id>,
 <Rule '/browser/fts_dictionary/children/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.children_id>,
 <Rule '/browser/catalog_object/children/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.children_id>,
 <Rule '/browser/fts_dictionary/children/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.children_id>,
 <Rule '/browser/foreign_server/delete/<gid>/<sid>/<did>/<fid>/<fsid>' (OPTIONS, DELETE) -> NODE-foreign_server.delete_id>,
 <Rule '/browser/fts_dictionary/delete/<gid>/<sid>/<did>/<scid>/<dcid>' (OPTIONS, DELETE) -> NODE-fts_dictionary.delete_id>,
 <Rule '/browser/fts_dictionary/delete/<gid>/<sid>/<did>/<scid>/<dcid>' (OPTIONS, DELETE) -> NODE-fts_dictionary.delete_id>,
 <Rule '/browser/foreign_server/stats/<gid>/<sid>/<did>/<fid>/<fsid>' (HEAD, OPTIONS, GET) -> NODE-foreign_server.stats_id>,
 <Rule '/browser/foreign_server/nodes/<gid>/<sid>/<did>/<fid>/<fsid>' (HEAD, OPTIONS, GET) -> NODE-foreign_server.nodes_id>,
 <Rule '/browser/catalog_object/nodes/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.nodes_id>,
 <Rule '/browser/fts_dictionary/stats/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.stats_id>,
 <Rule '/browser/fts_dictionary/nodes/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.nodes_id>,
 <Rule '/browser/catalog_object/nodes/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.nodes_id>,
 <Rule '/browser/fts_dictionary/stats/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.stats_id>,
 <Rule '/browser/fts_dictionary/nodes/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.nodes_id>,
 <Rule '/browser/foreign_server/msql/<gid>/<sid>/<did>/<fid>/<fsid>' (HEAD, OPTIONS, GET) -> NODE-foreign_server.msql_id>,
 <Rule '/browser/fts_dictionary/msql/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.msql_id>,
 <Rule '/browser/fts_dictionary/msql/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.msql_id>,
 <Rule '/browser/foreign_server/obj/<gid>/<sid>/<did>/<fid>/<fsid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-foreign_server.obj_id>,
 <Rule '/browser/foreign_server/sql/<gid>/<sid>/<did>/<fid>/<fsid>' (HEAD, OPTIONS, GET) -> NODE-foreign_server.sql_id>,
 <Rule '/browser/catalog_object/obj/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.obj_id>,
 <Rule '/browser/catalog_object/sql/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.sql_id>,
 <Rule '/browser/fts_dictionary/sql/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.sql_id>,
 <Rule '/browser/fts_dictionary/obj/<gid>/<sid>/<did>/<scid>/<dcid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-fts_dictionary.obj_id>,
 <Rule '/browser/catalog_object/obj/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.obj_id>,
 <Rule '/browser/catalog_object/sql/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.sql_id>,
 <Rule '/browser/fts_dictionary/sql/<gid>/<sid>/<did>/<scid>/<dcid>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.sql_id>,
 <Rule '/browser/fts_dictionary/obj/<gid>/<sid>/<did>/<scid>/<dcid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-fts_dictionary.obj_id>,
 <Rule '/browser/foreign-table/get_foreign_servers/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_foreign_servers_id>,
 <Rule '/browser/foreign-table/get_foreign_servers/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_foreign_servers_id>,
 <Rule '/browser/foreign-table/get_collations/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_collations_id>,
 <Rule '/browser/foreign-table/get_collations/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_collations_id>,
 <Rule '/browser/foreign-table/get_columns/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_columns_id>,
 <Rule '/browser/foreign-table/get_columns/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_columns_id>,
 <Rule '/browser/foreign-table/get_tables/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_tables_id>,
 <Rule '/browser/foreign-table/delete_sql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.delete_sql_id>,
 <Rule '/browser/foreign-table/update_sql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.update_sql_id>,
 <Rule '/browser/foreign-table/select_sql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.select_sql_id>,
 <Rule '/browser/foreign-table/insert_sql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.insert_sql_id>,
 <Rule '/browser/foreign-table/dependency/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.dependency_id>,
 <Rule '/browser/foreign-table/get_tables/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_tables_id>,
 <Rule '/browser/foreign-table/delete_sql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.delete_sql_id>,
 <Rule '/browser/foreign-table/update_sql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.update_sql_id>,
 <Rule '/browser/foreign-table/select_sql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.select_sql_id>,
 <Rule '/browser/foreign-table/insert_sql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.insert_sql_id>,
 <Rule '/browser/foreign-table/dependency/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.dependency_id>,
 <Rule '/browser/foreign-table/dependent/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.dependent_id>,
 <Rule '/browser/foreign-table/get_types/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_types_id>,
 <Rule '/browser/foreign-table/dependent/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.dependent_id>,
 <Rule '/browser/foreign-table/get_types/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_types_id>,
 <Rule '/browser/foreign-table/children/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.children_id>,
 <Rule '/browser/foreign-table/children/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.children_id>,
 <Rule '/browser/foreign-table/delete/<gid>/<sid>/<did>/<scid>/<foid>' (OPTIONS, DELETE) -> NODE-foreign-table.delete_id>,
 <Rule '/browser/foreign-table/delete/<gid>/<sid>/<did>/<scid>/<foid>' (OPTIONS, DELETE) -> NODE-foreign-table.delete_id>,
 <Rule '/browser/foreign-table/stats/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.stats_id>,
 <Rule '/browser/foreign-table/nodes/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.nodes_id>,
 <Rule '/browser/foreign-table/stats/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.stats_id>,
 <Rule '/browser/foreign-table/nodes/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.nodes_id>,
 <Rule '/browser/foreign-table/msql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.msql_id>,
 <Rule '/browser/foreign-table/msql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.msql_id>,
 <Rule '/browser/foreign-table/sql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.sql_id>,
 <Rule '/browser/foreign-table/obj/<gid>/<sid>/<did>/<scid>/<foid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-foreign-table.obj_id>,
 <Rule '/browser/foreign-table/sql/<gid>/<sid>/<did>/<scid>/<foid>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.sql_id>,
 <Rule '/browser/foreign-table/obj/<gid>/<sid>/<did>/<scid>/<foid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-foreign-table.obj_id>,
 <Rule '/browser/fts_template/dependency/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.dependency_id>,
 <Rule '/browser/fts_template/get_lexize/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.get_lexize_id>,
 <Rule '/browser/fts_template/dependency/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.dependency_id>,
 <Rule '/browser/fts_template/get_lexize/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.get_lexize_id>,
 <Rule '/browser/fts_template/dependent/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.dependent_id>,
 <Rule '/browser/fts_template/dependent/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.dependent_id>,
 <Rule '/browser/fts_template/get_init/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.get_init_id>,
 <Rule '/browser/fts_template/children/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.children_id>,
 <Rule '/browser/fts_template/get_init/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.get_init_id>,
 <Rule '/browser/fts_template/children/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.children_id>,
 <Rule '/browser/fts_template/delete/<gid>/<sid>/<did>/<scid>/<tid>' (OPTIONS, DELETE) -> NODE-fts_template.delete_id>,
 <Rule '/browser/fts_template/delete/<gid>/<sid>/<did>/<scid>/<tid>' (OPTIONS, DELETE) -> NODE-fts_template.delete_id>,
 <Rule '/browser/user_mapping/nodes/<gid>/<sid>/<did>/<fid>/<fsid>/' (HEAD, OPTIONS, GET) -> NODE-user_mapping.nodes>,
 <Rule '/browser/fts_template/stats/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.stats_id>,
 <Rule '/browser/fts_template/nodes/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.nodes_id>,
 <Rule '/browser/fts_template/stats/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.stats_id>,
 <Rule '/browser/fts_template/nodes/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.nodes_id>,
 <Rule '/browser/user_mapping/msql/<gid>/<sid>/<did>/<fid>/<fsid>/' (HEAD, OPTIONS, GET) -> NODE-user_mapping.msql>,
 <Rule '/browser/fts_template/msql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.msql_id>,
 <Rule '/browser/fts_template/msql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.msql_id>,
 <Rule '/browser/user_mapping/obj/<gid>/<sid>/<did>/<fid>/<fsid>/' (HEAD, POST, OPTIONS, GET) -> NODE-user_mapping.obj>,
 <Rule '/browser/fts_template/sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.sql_id>,
 <Rule '/browser/fts_template/obj/<gid>/<sid>/<did>/<scid>/<tid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-fts_template.obj_id>,
 <Rule '/browser/fts_template/sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-fts_template.sql_id>,
 <Rule '/browser/fts_template/obj/<gid>/<sid>/<did>/<scid>/<tid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-fts_template.obj_id>,
 <Rule '/browser/foreign_key/get_coveringindex/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-foreign_key.get_coveringindex>,
 <Rule '/browser/foreign_key/get_coveringindex/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-foreign_key.get_coveringindex>,
 <Rule '/browser/foreign_key/indices/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-foreign_key.indices>,
 <Rule '/browser/foreign_key/indices/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-foreign_key.indices>,
 <Rule '/browser/constraints/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-constraints.nodes>,
 <Rule '/browser/foreign_key/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-foreign_key.nodes>,
 <Rule '/browser/primary_key/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-primary_key.nodes>,
 <Rule '/browser/constraints/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-constraints.nodes>,
 <Rule '/browser/foreign_key/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-foreign_key.nodes>,
 <Rule '/browser/primary_key/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-primary_key.nodes>,
 <Rule '/browser/foreign_key/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-foreign_key.msql>,
 <Rule '/browser/primary_key/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-primary_key.msql>,
 <Rule '/browser/foreign_key/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-foreign_key.msql>,
 <Rule '/browser/primary_key/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-primary_key.msql>,
 <Rule '/browser/constraints/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-constraints.proplist>,
 <Rule '/browser/foreign_key/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-foreign_key.obj>,
 <Rule '/browser/primary_key/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-primary_key.obj>,
 <Rule '/browser/constraints/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-constraints.proplist>,
 <Rule '/browser/foreign_key/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-foreign_key.obj>,
 <Rule '/browser/primary_key/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-primary_key.obj>,
 <Rule '/browser/fts_parser/headline_functions/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.headline_functions_id>,
 <Rule '/browser/fts_parser/headline_functions/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.headline_functions_id>,
 <Rule '/browser/fts_parser/lextype_functions/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.lextype_functions_id>,
 <Rule '/browser/fts_parser/lextype_functions/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.lextype_functions_id>,
 <Rule '/browser/fts_parser/start_functions/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.start_functions_id>,
 <Rule '/browser/fts_parser/token_functions/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.token_functions_id>,
 <Rule '/browser/fts_parser/start_functions/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.start_functions_id>,
 <Rule '/browser/fts_parser/token_functions/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.token_functions_id>,
 <Rule '/browser/fts_parser/end_functions/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.end_functions_id>,
 <Rule '/browser/fts_parser/end_functions/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.end_functions_id>,
 <Rule '/browser/fts_parser/dependency/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.dependency_id>,
 <Rule '/browser/fts_parser/dependency/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.dependency_id>,
 <Rule '/browser/fts_parser/dependent/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.dependent_id>,
 <Rule '/browser/fts_parser/dependent/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.dependent_id>,
 <Rule '/browser/fts_parser/children/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.children_id>,
 <Rule '/browser/fts_parser/children/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.children_id>,
 <Rule '/browser/fts_parser/delete/<gid>/<sid>/<did>/<scid>/<pid>' (OPTIONS, DELETE) -> NODE-fts_parser.delete_id>,
 <Rule '/browser/fts_parser/delete/<gid>/<sid>/<did>/<scid>/<pid>' (OPTIONS, DELETE) -> NODE-fts_parser.delete_id>,
 <Rule '/browser/fts_parser/stats/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.stats_id>,
 <Rule '/browser/fts_parser/nodes/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.nodes_id>,
 <Rule '/browser/fts_parser/stats/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.stats_id>,
 <Rule '/browser/fts_parser/nodes/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.nodes_id>,
 <Rule '/browser/fts_parser/msql/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.msql_id>,
 <Rule '/browser/fts_parser/msql/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.msql_id>,
 <Rule '/browser/fts_parser/sql/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.sql_id>,
 <Rule '/browser/fts_parser/obj/<gid>/<sid>/<did>/<scid>/<pid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-fts_parser.obj_id>,
 <Rule '/browser/fts_parser/sql/<gid>/<sid>/<did>/<scid>/<pid>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.sql_id>,
 <Rule '/browser/fts_parser/obj/<gid>/<sid>/<did>/<scid>/<pid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-fts_parser.obj_id>,
 <Rule '/browser/collation/get_collations/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.get_collations_id>,
 <Rule '/browser/collation/get_collations/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.get_collations_id>,
 <Rule '/browser/procedure/get_languages/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.get_languages_id>,
 <Rule '/browser/procedure/get_languages/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.get_languages_id>,
 <Rule '/browser/collation/dependency/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.dependency_id>,
 <Rule '/browser/procedure/dependency/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.dependency_id>,
 <Rule '/browser/procedure/select_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.select_sql_id>,
 <Rule '/browser/collation/dependency/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.dependency_id>,
 <Rule '/browser/procedure/dependency/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.dependency_id>,
 <Rule '/browser/procedure/select_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.select_sql_id>,
 <Rule '/browser/collation/dependent/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.dependent_id>,
 <Rule '/browser/procedure/dependent/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.dependent_id>,
 <Rule '/browser/procedure/get_types/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.get_types_id>,
 <Rule '/browser/collation/dependent/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.dependent_id>,
 <Rule '/browser/procedure/dependent/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.dependent_id>,
 <Rule '/browser/procedure/get_types/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.get_types_id>,
 <Rule '/browser/collation/children/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.children_id>,
 <Rule '/browser/procedure/exec_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.exec_sql_id>,
 <Rule '/browser/procedure/children/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.children_id>,
 <Rule '/browser/collation/children/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.children_id>,
 <Rule '/browser/procedure/exec_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.exec_sql_id>,
 <Rule '/browser/procedure/children/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.children_id>,
 <Rule '/browser/collation/delete/<gid>/<sid>/<did>/<scid>/<coid>' (OPTIONS, DELETE) -> NODE-collation.delete_id>,
 <Rule '/browser/procedure/delete/<gid>/<sid>/<did>/<scid>/<fnid>' (OPTIONS, DELETE) -> NODE-procedure.delete_id>,
 <Rule '/browser/collation/delete/<gid>/<sid>/<did>/<scid>/<coid>' (OPTIONS, DELETE) -> NODE-collation.delete_id>,
 <Rule '/browser/procedure/delete/<gid>/<sid>/<did>/<scid>/<fnid>' (OPTIONS, DELETE) -> NODE-procedure.delete_id>,
 <Rule '/browser/collation/stats/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.stats_id>,
 <Rule '/browser/collation/nodes/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.nodes_id>,
 <Rule '/browser/procedure/stats/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.stats_id>,
 <Rule '/browser/procedure/nodes/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.nodes_id>,
 <Rule '/browser/collation/stats/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.stats_id>,
 <Rule '/browser/collation/nodes/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.nodes_id>,
 <Rule '/browser/procedure/stats/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.stats_id>,
 <Rule '/browser/procedure/nodes/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.nodes_id>,
 <Rule '/browser/collation/msql/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.msql_id>,
 <Rule '/browser/procedure/msql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.msql_id>,
 <Rule '/browser/collation/msql/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.msql_id>,
 <Rule '/browser/procedure/msql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.msql_id>,
 <Rule '/browser/collation/sql/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.sql_id>,
 <Rule '/browser/collation/obj/<gid>/<sid>/<did>/<scid>/<coid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-collation.obj_id>,
 <Rule '/browser/procedure/sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.sql_id>,
 <Rule '/browser/procedure/obj/<gid>/<sid>/<did>/<scid>/<fnid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-procedure.obj_id>,
 <Rule '/browser/collation/sql/<gid>/<sid>/<did>/<scid>/<coid>' (HEAD, OPTIONS, GET) -> NODE-collation.sql_id>,
 <Rule '/browser/collation/obj/<gid>/<sid>/<did>/<scid>/<coid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-collation.obj_id>,
 <Rule '/browser/procedure/sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-procedure.sql_id>,
 <Rule '/browser/procedure/obj/<gid>/<sid>/<did>/<scid>/<fnid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-procedure.obj_id>,
 <Rule '/browser/function/get_languages/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.get_languages_id>,
 <Rule '/browser/function/get_languages/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.get_languages_id>,
 <Rule '/browser/function/dependency/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.dependency_id>,
 <Rule '/browser/function/select_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.select_sql_id>,
 <Rule '/browser/sequence/dependency/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.dependency_id>,
 <Rule '/browser/function/dependency/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.dependency_id>,
 <Rule '/browser/function/select_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.select_sql_id>,
 <Rule '/browser/sequence/dependency/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.dependency_id>,
 <Rule '/browser/function/dependent/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.dependent_id>,
 <Rule '/browser/function/get_types/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.get_types_id>,
 <Rule '/browser/sequence/dependent/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.dependent_id>,
 <Rule '/browser/function/dependent/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.dependent_id>,
 <Rule '/browser/function/get_types/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.get_types_id>,
 <Rule '/browser/sequence/dependent/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.dependent_id>,
 <Rule '/browser/function/exec_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.exec_sql_id>,
 <Rule '/browser/function/children/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.children_id>,
 <Rule '/browser/sequence/children/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.children_id>,
 <Rule '/browser/function/exec_sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.exec_sql_id>,
 <Rule '/browser/function/children/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.children_id>,
 <Rule '/browser/sequence/children/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.children_id>,
 <Rule '/browser/function/delete/<gid>/<sid>/<did>/<scid>/<fnid>' (OPTIONS, DELETE) -> NODE-function.delete_id>,
 <Rule '/browser/sequence/delete/<gid>/<sid>/<did>/<scid>/<seid>' (OPTIONS, DELETE) -> NODE-sequence.delete_id>,
 <Rule '/browser/function/delete/<gid>/<sid>/<did>/<scid>/<fnid>' (OPTIONS, DELETE) -> NODE-function.delete_id>,
 <Rule '/browser/sequence/delete/<gid>/<sid>/<did>/<scid>/<seid>' (OPTIONS, DELETE) -> NODE-sequence.delete_id>,
 <Rule '/browser/function/stats/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.stats_id>,
 <Rule '/browser/function/nodes/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.nodes_id>,
 <Rule '/browser/sequence/stats/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.stats_id>,
 <Rule '/browser/sequence/nodes/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.nodes_id>,
 <Rule '/browser/function/stats/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.stats_id>,
 <Rule '/browser/function/nodes/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.nodes_id>,
 <Rule '/browser/sequence/stats/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.stats_id>,
 <Rule '/browser/sequence/nodes/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.nodes_id>,
 <Rule '/browser/function/msql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.msql_id>,
 <Rule '/browser/sequence/msql/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.msql_id>,
 <Rule '/browser/function/msql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.msql_id>,
 <Rule '/browser/sequence/msql/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.msql_id>,
 <Rule '/browser/function/sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.sql_id>,
 <Rule '/browser/function/obj/<gid>/<sid>/<did>/<scid>/<fnid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-function.obj_id>,
 <Rule '/browser/sequence/obj/<gid>/<sid>/<did>/<scid>/<seid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-sequence.obj_id>,
 <Rule '/browser/sequence/sql/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.sql_id>,
 <Rule '/browser/function/sql/<gid>/<sid>/<did>/<scid>/<fnid>' (HEAD, OPTIONS, GET) -> NODE-function.sql_id>,
 <Rule '/browser/function/obj/<gid>/<sid>/<did>/<scid>/<fnid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-function.obj_id>,
 <Rule '/browser/sequence/obj/<gid>/<sid>/<did>/<scid>/<seid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-sequence.obj_id>,
 <Rule '/browser/sequence/sql/<gid>/<sid>/<did>/<scid>/<seid>' (HEAD, OPTIONS, GET) -> NODE-sequence.sql_id>,
 <Rule '/browser/trigger/get_triggerfunctions/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-trigger.get_triggerfunctions>,
 <Rule '/browser/trigger/get_triggerfunctions/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-trigger.get_triggerfunctions>,
 <Rule '/browser/trigger/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-trigger.nodes>,
 <Rule '/browser/trigger/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-trigger.nodes>,
 <Rule '/browser/trigger/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-trigger.msql>,
 <Rule '/browser/trigger/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-trigger.msql>,
 <Rule '/browser/trigger/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-trigger.obj>,
 <Rule '/browser/trigger/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-trigger.obj>,
 <Rule '/browser/domain/get_collations/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.get_collations_id>,
 <Rule '/browser/domain/get_collations/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.get_collations_id>,
 <Rule '/browser/domain/dependency/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.dependency_id>,
 <Rule '/browser/domain/dependency/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.dependency_id>,
 <Rule '/browser/domain/dependent/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.dependent_id>,
 <Rule '/browser/domain/get_types/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.get_types_id>,
 <Rule '/browser/domain/dependent/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.dependent_id>,
 <Rule '/browser/domain/get_types/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.get_types_id>,
 <Rule '/browser/domain/children/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.children_id>,
 <Rule '/browser/domain/children/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.children_id>,
 <Rule '/browser/domain/delete/<gid>/<sid>/<did>/<scid>/<doid>' (OPTIONS, DELETE) -> NODE-domain.delete_id>,
 <Rule '/browser/domain/delete/<gid>/<sid>/<did>/<scid>/<doid>' (OPTIONS, DELETE) -> NODE-domain.delete_id>,
 <Rule '/browser/domain/stats/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.stats_id>,
 <Rule '/browser/domain/nodes/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.nodes_id>,
 <Rule '/browser/column/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-column.nodes>,
 <Rule '/browser/domain/stats/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.stats_id>,
 <Rule '/browser/domain/nodes/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.nodes_id>,
 <Rule '/browser/column/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-column.nodes>,
 <Rule '/browser/domain/msql/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.msql_id>,
 <Rule '/browser/column/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-column.msql>,
 <Rule '/browser/domain/msql/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.msql_id>,
 <Rule '/browser/column/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-column.msql>,
 <Rule '/browser/domain/sql/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.sql_id>,
 <Rule '/browser/domain/obj/<gid>/<sid>/<did>/<scid>/<doid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-domain.obj_id>,
 <Rule '/browser/column/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-column.obj>,
 <Rule '/browser/domain/sql/<gid>/<sid>/<did>/<scid>/<doid>' (HEAD, OPTIONS, GET) -> NODE-domain.sql_id>,
 <Rule '/browser/domain/obj/<gid>/<sid>/<did>/<scid>/<doid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-domain.obj_id>,
 <Rule '/browser/column/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-column.obj>,
 <Rule '/browser/mview/get_toast_table_vacuum/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.get_toast_table_vacuum_id>,
 <Rule '/browser/mview/get_toast_table_vacuum/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.get_toast_table_vacuum_id>,
 <Rule '/browser/index/get_access_methods/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.get_access_methods>,
 <Rule '/browser/index/get_access_methods/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.get_access_methods>,
 <Rule '/browser/mview/get_table_vacuum/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.get_table_vacuum_id>,
 <Rule '/browser/mview/get_table_vacuum/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.get_table_vacuum_id>,
 <Rule '/browser/index/get_collations/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.get_collations>,
 <Rule '/browser/index/get_collations/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.get_collations>,
 <Rule '/browser/table/get_relations/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.get_relations_id>,
 <Rule '/browser/table/get_relations/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.get_relations_id>,
 <Rule '/browser/table/get_inherits/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.get_inherits_id>,
 <Rule '/browser/index/get_op_class/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.get_op_class>,
 <Rule '/browser/mview/refresh_data/<gid>/<sid>/<did>/<scid>/<vid>' (PUT, OPTIONS) -> NODE-mview.refresh_data_id>,
 <Rule '/browser/table/get_inherits/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.get_inherits_id>,
 <Rule '/browser/index/get_op_class/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.get_op_class>,
 <Rule '/browser/mview/refresh_data/<gid>/<sid>/<did>/<scid>/<vid>' (PUT, OPTIONS) -> NODE-mview.refresh_data_id>,
 <Rule '/browser/table/set_trigger/<gid>/<sid>/<did>/<scid>/<tid>' (PUT, OPTIONS) -> NODE-table.set_trigger_id>,
 <Rule '/browser/table/get_columns/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.get_columns_id>,
 <Rule '/browser/table/set_trigger/<gid>/<sid>/<did>/<scid>/<tid>' (PUT, OPTIONS) -> NODE-table.set_trigger_id>,
 <Rule '/browser/table/get_columns/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.get_columns_id>,
 <Rule '/browser/table/get_oftype/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.get_oftype_id>,
 <Rule '/browser/table/update_sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.update_sql_id>,
 <Rule '/browser/table/insert_sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.insert_sql_id>,
 <Rule '/browser/table/select_sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.select_sql_id>,
 <Rule '/browser/table/delete_sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.delete_sql_id>,
 <Rule '/browser/table/dependency/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.dependency_id>,
 <Rule '/browser/mview/get_tblspc/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.get_tblspc_id>,
 <Rule '/browser/mview/select_sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.select_sql_id>,
 <Rule '/browser/mview/dependency/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.dependency_id>,
 <Rule '/browser/mview/insert_sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.insert_sql_id>,
 <Rule '/browser/table/get_oftype/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.get_oftype_id>,
 <Rule '/browser/table/update_sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.update_sql_id>,
 <Rule '/browser/table/insert_sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.insert_sql_id>,
 <Rule '/browser/table/select_sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.select_sql_id>,
 <Rule '/browser/table/delete_sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.delete_sql_id>,
 <Rule '/browser/table/dependency/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.dependency_id>,
 <Rule '/browser/mview/get_tblspc/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.get_tblspc_id>,
 <Rule '/browser/mview/select_sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.select_sql_id>,
 <Rule '/browser/mview/dependency/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.dependency_id>,
 <Rule '/browser/mview/insert_sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.insert_sql_id>,
 <Rule '/browser/table/dependent/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.dependent_id>,
 <Rule '/browser/table/get_types/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.get_types_id>,
 <Rule '/browser/mview/dependent/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.dependent_id>,
 <Rule '/browser/table/dependent/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.dependent_id>,
 <Rule '/browser/table/get_types/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.get_types_id>,
 <Rule '/browser/mview/dependent/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.dependent_id>,
 <Rule '/browser/table/children/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.children_id>,
 <Rule '/browser/table/truncate/<gid>/<sid>/<did>/<scid>/<tid>' (PUT, OPTIONS) -> NODE-table.truncate_id>,
 <Rule '/browser/mview/children/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.children_id>,
 <Rule '/browser/table/children/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.children_id>,
 <Rule '/browser/table/truncate/<gid>/<sid>/<did>/<scid>/<tid>' (PUT, OPTIONS) -> NODE-table.truncate_id>,
 <Rule '/browser/mview/children/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.children_id>,
 <Rule '/browser/mview/configs/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.configs_id>,
 <Rule '/browser/mview/configs/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.configs_id>,
 <Rule '/browser/table/delete/<gid>/<sid>/<did>/<scid>/<tid>' (OPTIONS, DELETE) -> NODE-table.delete_id>,
 <Rule '/browser/mview/delete/<gid>/<sid>/<did>/<scid>/<vid>' (OPTIONS, DELETE) -> NODE-mview.delete_id>,
 <Rule '/browser/table/delete/<gid>/<sid>/<did>/<scid>/<tid>' (OPTIONS, DELETE) -> NODE-table.delete_id>,
 <Rule '/browser/mview/delete/<gid>/<sid>/<did>/<scid>/<vid>' (OPTIONS, DELETE) -> NODE-mview.delete_id>,
 <Rule '/browser/table/reset/<gid>/<sid>/<did>/<scid>/<tid>' (OPTIONS, DELETE) -> NODE-table.reset_id>,
 <Rule '/browser/table/stats/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.stats_id>,
 <Rule '/browser/table/nodes/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.nodes_id>,
 <Rule '/browser/index/stats/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.stats>,
 <Rule '/browser/index/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.nodes>,
 <Rule '/browser/mview/stats/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.stats_id>,
 <Rule '/browser/mview/nodes/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.nodes_id>,
 <Rule '/browser/table/reset/<gid>/<sid>/<did>/<scid>/<tid>' (OPTIONS, DELETE) -> NODE-table.reset_id>,
 <Rule '/browser/table/stats/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.stats_id>,
 <Rule '/browser/table/nodes/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.nodes_id>,
 <Rule '/browser/index/stats/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.stats>,
 <Rule '/browser/index/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.nodes>,
 <Rule '/browser/mview/stats/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.stats_id>,
 <Rule '/browser/mview/nodes/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.nodes_id>,
 <Rule '/browser/table/msql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.msql_id>,
 <Rule '/browser/index/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.msql>,
 <Rule '/browser/mview/msql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.msql_id>,
 <Rule '/browser/table/msql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.msql_id>,
 <Rule '/browser/index/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-index.msql>,
 <Rule '/browser/mview/msql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.msql_id>,
 <Rule '/browser/table/sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.sql_id>,
 <Rule '/browser/table/obj/<gid>/<sid>/<did>/<scid>/<tid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-table.obj_id>,
 <Rule '/browser/index/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-index.obj>,
 <Rule '/browser/mview/sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.sql_id>,
 <Rule '/browser/mview/obj/<gid>/<sid>/<did>/<scid>/<vid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-mview.obj_id>,
 <Rule '/browser/table/sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-table.sql_id>,
 <Rule '/browser/table/obj/<gid>/<sid>/<did>/<scid>/<tid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-table.obj_id>,
 <Rule '/browser/index/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-index.obj>,
 <Rule '/browser/mview/sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-mview.sql_id>,
 <Rule '/browser/mview/obj/<gid>/<sid>/<did>/<scid>/<vid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-mview.obj_id>,
 <Rule '/browser/type/get_external_functions/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_external_functions_id>,
 <Rule '/browser/view/get_toast_table_vacuum/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.get_toast_table_vacuum_id>,
 <Rule '/browser/type/get_external_functions/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_external_functions_id>,
 <Rule '/browser/view/get_toast_table_vacuum/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.get_toast_table_vacuum_id>,
 <Rule '/browser/view/get_table_vacuum/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.get_table_vacuum_id>,
 <Rule '/browser/view/get_table_vacuum/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.get_table_vacuum_id>,
 <Rule '/browser/type/get_collations/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_collations_id>,
 <Rule '/browser/type/get_subopclass/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_subopclass_id>,
 <Rule '/browser/type/get_collations/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_collations_id>,
 <Rule '/browser/type/get_subopclass/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_subopclass_id>,
 <Rule '/browser/type/get_canonical/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_canonical_id>,
 <Rule '/browser/type/get_stypediff/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_stypediff_id>,
 <Rule '/browser/type/get_canonical/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_canonical_id>,
 <Rule '/browser/type/get_stypediff/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_stypediff_id>,
 <Rule '/browser/type/get_stypes/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_stypes_id>,
 <Rule '/browser/type/dependency/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.dependency_id>,
 <Rule '/browser/view/get_tblspc/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.get_tblspc_id>,
 <Rule '/browser/view/select_sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.select_sql_id>,
 <Rule '/browser/view/insert_sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.insert_sql_id>,
 <Rule '/browser/view/dependency/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.dependency_id>,
 <Rule '/browser/type/get_stypes/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_stypes_id>,
 <Rule '/browser/type/dependency/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.dependency_id>,
 <Rule '/browser/view/get_tblspc/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.get_tblspc_id>,
 <Rule '/browser/view/select_sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.select_sql_id>,
 <Rule '/browser/view/insert_sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.insert_sql_id>,
 <Rule '/browser/view/dependency/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.dependency_id>,
 <Rule '/browser/type/dependent/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.dependent_id>,
 <Rule '/browser/type/get_types/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_types_id>,
 <Rule '/browser/view/dependent/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.dependent_id>,
 <Rule '/browser/type/dependent/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.dependent_id>,
 <Rule '/browser/type/get_types/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.get_types_id>,
 <Rule '/browser/view/dependent/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.dependent_id>,
 <Rule '/browser/type/children/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.children_id>,
 <Rule '/browser/view/children/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.children_id>,
 <Rule '/browser/type/children/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.children_id>,
 <Rule '/browser/view/children/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.children_id>,
 <Rule '/browser/view/configs/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.configs_id>,
 <Rule '/browser/view/configs/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.configs_id>,
 <Rule '/browser/type/delete/<gid>/<sid>/<did>/<scid>/<tid>' (OPTIONS, DELETE) -> NODE-type.delete_id>,
 <Rule '/browser/view/delete/<gid>/<sid>/<did>/<scid>/<vid>' (OPTIONS, DELETE) -> NODE-view.delete_id>,
 <Rule '/browser/type/delete/<gid>/<sid>/<did>/<scid>/<tid>' (OPTIONS, DELETE) -> NODE-type.delete_id>,
 <Rule '/browser/view/delete/<gid>/<sid>/<did>/<scid>/<vid>' (OPTIONS, DELETE) -> NODE-view.delete_id>,
 <Rule '/browser/rule/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-rule.nodes>,
 <Rule '/browser/type/stats/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.stats_id>,
 <Rule '/browser/type/nodes/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.nodes_id>,
 <Rule '/browser/view/stats/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.stats_id>,
 <Rule '/browser/view/nodes/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.nodes_id>,
 <Rule '/browser/rule/nodes/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-rule.nodes>,
 <Rule '/browser/type/stats/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.stats_id>,
 <Rule '/browser/type/nodes/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.nodes_id>,
 <Rule '/browser/view/stats/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.stats_id>,
 <Rule '/browser/view/nodes/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.nodes_id>,
 <Rule '/browser/rule/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-rule.msql>,
 <Rule '/browser/type/msql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.msql_id>,
 <Rule '/browser/view/msql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.msql_id>,
 <Rule '/browser/rule/msql/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, OPTIONS, GET) -> NODE-rule.msql>,
 <Rule '/browser/type/msql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.msql_id>,
 <Rule '/browser/view/msql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.msql_id>,
 <Rule '/browser/rule/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-rule.obj>,
 <Rule '/browser/type/sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.sql_id>,
 <Rule '/browser/type/obj/<gid>/<sid>/<did>/<scid>/<tid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-type.obj_id>,
 <Rule '/browser/view/sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.sql_id>,
 <Rule '/browser/view/obj/<gid>/<sid>/<did>/<scid>/<vid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-view.obj_id>,
 <Rule '/browser/rule/obj/<gid>/<sid>/<did>/<scid>/<tid>/' (HEAD, POST, OPTIONS, GET) -> NODE-rule.obj>,
 <Rule '/browser/type/sql/<gid>/<sid>/<did>/<scid>/<tid>' (HEAD, OPTIONS, GET) -> NODE-type.sql_id>,
 <Rule '/browser/type/obj/<gid>/<sid>/<did>/<scid>/<tid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-type.obj_id>,
 <Rule '/browser/view/sql/<gid>/<sid>/<did>/<scid>/<vid>' (HEAD, OPTIONS, GET) -> NODE-view.sql_id>,
 <Rule '/browser/view/obj/<gid>/<sid>/<did>/<scid>/<vid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-view.obj_id>,
 <Rule '/grant_wizard/properties/<gid>/<sid>/<did>/<node_id>/<node_type>/' (HEAD, POST, OPTIONS, GET) -> grant_wizard.properties>,
 <Rule '/debugger/initialize_target/<debug_type>/<sid>/<did>/<scid>/<func_id>' (HEAD, POST, OPTIONS, GET) -> debugger.initialize_target>,
 <Rule '/debugger/init/<node_type>/<sid>/<did>/<scid>/<fid>' (HEAD, OPTIONS, GET) -> debugger.init_function>,
 <Rule '/browser/foreign_data_wrapper/dependency/<gid>/<sid>/<did>/<fid>' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.dependency_id>,
 <Rule '/browser/foreign_data_wrapper/dependent/<gid>/<sid>/<did>/<fid>' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.dependent_id>,
 <Rule '/browser/foreign_data_wrapper/children/<gid>/<sid>/<did>/<fid>' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.children_id>,
 <Rule '/browser/foreign_data_wrapper/delete/<gid>/<sid>/<did>/<fid>' (OPTIONS, DELETE) -> NODE-foreign_data_wrapper.delete_id>,
 <Rule '/browser/foreign_data_wrapper/stats/<gid>/<sid>/<did>/<fid>' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.stats_id>,
 <Rule '/browser/foreign_data_wrapper/nodes/<gid>/<sid>/<did>/<fid>' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.nodes_id>,
 <Rule '/browser/foreign_data_wrapper/msql/<gid>/<sid>/<did>/<fid>' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.msql_id>,
 <Rule '/browser/foreign_data_wrapper/sql/<gid>/<sid>/<did>/<fid>' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.sql_id>,
 <Rule '/browser/foreign_data_wrapper/obj/<gid>/<sid>/<did>/<fid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-foreign_data_wrapper.obj_id>,
 <Rule '/browser/fts_configuration/dictionaries/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.dictionaries>,
 <Rule '/browser/fts_configuration/dictionaries/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.dictionaries>,
 <Rule '/browser/fts_configuration/copyConfig/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.copyConfig>,
 <Rule '/browser/fts_configuration/copyConfig/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.copyConfig>,
 <Rule '/browser/fts_configuration/parsers/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.parsers>,
 <Rule '/browser/fts_configuration/parsers/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.parsers>,
 <Rule '/browser/fts_configuration/tokens/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.tokens>,
 <Rule '/browser/fts_configuration/tokens/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.tokens>,
 <Rule '/browser/fts_configuration/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.nodes>,
 <Rule '/browser/fts_configuration/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.nodes>,
 <Rule '/browser/fts_configuration/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.msql>,
 <Rule '/browser/fts_configuration/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.msql>,
 <Rule '/browser/fts_configuration/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-fts_configuration.obj>,
 <Rule '/browser/fts_configuration/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-fts_configuration.obj>,
 <Rule '/browser/trigger_function/get_languages/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.get_languages>,
 <Rule '/browser/trigger_function/get_languages/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.get_languages>,
 <Rule '/browser/trigger_function/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.get_types>,
 <Rule '/browser/trigger_function/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.get_types>,
 <Rule '/browser/trigger_function/stats/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.stats>,
 <Rule '/browser/trigger_function/vopts/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.vopts>,
 <Rule '/browser/trigger_function/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.nodes>,
 <Rule '/browser/trigger_function/stats/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.stats>,
 <Rule '/browser/trigger_function/vopts/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.vopts>,
 <Rule '/browser/trigger_function/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.nodes>,
 <Rule '/browser/trigger_function/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.msql>,
 <Rule '/browser/trigger_function/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-trigger_function.msql>,
 <Rule '/browser/trigger_function/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-trigger_function.obj>,
 <Rule '/browser/trigger_function/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-trigger_function.obj>,
 <Rule '/browser/fts_dictionary/fetch_templates/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.fetch_templates>,
 <Rule '/browser/fts_dictionary/fetch_templates/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.fetch_templates>,
 <Rule '/browser/foreign_server/nodes/<gid>/<sid>/<did>/<fid>/' (HEAD, OPTIONS, GET) -> NODE-foreign_server.nodes>,
 <Rule '/browser/catalog_object/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-catalog_object.nodes>,
 <Rule '/browser/fts_dictionary/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.nodes>,
 <Rule '/browser/catalog_object/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-catalog_object.nodes>,
 <Rule '/browser/fts_dictionary/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.nodes>,
 <Rule '/browser/foreign_server/msql/<gid>/<sid>/<did>/<fid>/' (HEAD, OPTIONS, GET) -> NODE-foreign_server.msql>,
 <Rule '/browser/fts_dictionary/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.msql>,
 <Rule '/browser/fts_dictionary/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.msql>,
 <Rule '/browser/foreign_server/obj/<gid>/<sid>/<did>/<fid>/' (HEAD, POST, OPTIONS, GET) -> NODE-foreign_server.obj>,
 <Rule '/browser/catalog_object/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-catalog_object.obj>,
 <Rule '/browser/fts_dictionary/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-fts_dictionary.obj>,
 <Rule '/browser/catalog_object/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-catalog_object.obj>,
 <Rule '/browser/fts_dictionary/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-fts_dictionary.obj>,
 <Rule '/browser/foreign-table/get_foreign_servers/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_foreign_servers>,
 <Rule '/browser/foreign-table/get_foreign_servers/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_foreign_servers>,
 <Rule '/browser/foreign-table/get_collations/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_collations>,
 <Rule '/browser/foreign-table/get_collations/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_collations>,
 <Rule '/browser/foreign-table/get_columns/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_columns>,
 <Rule '/browser/foreign-table/get_columns/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_columns>,
 <Rule '/browser/event_trigger/dependency/<gid>/<sid>/<did>/<etid>' (HEAD, OPTIONS, GET) -> NODE-event_trigger.dependency_id>,
 <Rule '/browser/foreign-table/get_tables/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_tables>,
 <Rule '/browser/foreign-table/get_tables/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_tables>,
 <Rule '/browser/event_trigger/dependent/<gid>/<sid>/<did>/<etid>' (HEAD, OPTIONS, GET) -> NODE-event_trigger.dependent_id>,
 <Rule '/browser/foreign-table/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_types>,
 <Rule '/browser/foreign-table/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.get_types>,
 <Rule '/browser/event_trigger/children/<gid>/<sid>/<did>/<etid>' (HEAD, OPTIONS, GET) -> NODE-event_trigger.children_id>,
 <Rule '/browser/event_trigger/fopts/<gid>/<sid>/<did>/<etid>' (HEAD, OPTIONS, GET) -> NODE-event_trigger.fopts_id>,
 <Rule '/browser/event_trigger/stats/<gid>/<sid>/<did>/<etid>' (HEAD, OPTIONS, GET) -> NODE-event_trigger.stats_id>,
 <Rule '/browser/event_trigger/nodes/<gid>/<sid>/<did>/<etid>' (HEAD, OPTIONS, GET) -> NODE-event_trigger.nodes_id>,
 <Rule '/browser/foreign-table/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.nodes>,
 <Rule '/browser/foreign-table/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.nodes>,
 <Rule '/browser/event_trigger/msql/<gid>/<sid>/<did>/<etid>' (HEAD, OPTIONS, GET) -> NODE-event_trigger.msql_id>,
 <Rule '/browser/foreign-table/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.msql>,
 <Rule '/browser/foreign-table/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-foreign-table.msql>,
 <Rule '/browser/event_trigger/obj/<gid>/<sid>/<did>/<etid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-event_trigger.obj_id>,
 <Rule '/browser/event_trigger/sql/<gid>/<sid>/<did>/<etid>' (HEAD, OPTIONS, GET) -> NODE-event_trigger.sql_id>,
 <Rule '/browser/foreign-table/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-foreign-table.obj>,
 <Rule '/browser/foreign-table/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-foreign-table.obj>,
 <Rule '/browser/fts_template/get_lexize/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_template.get_lexize>,
 <Rule '/browser/fts_template/get_lexize/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_template.get_lexize>,
 <Rule '/browser/fts_template/get_init/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_template.get_init>,
 <Rule '/browser/fts_template/get_init/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_template.get_init>,
 <Rule '/browser/fts_template/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_template.nodes>,
 <Rule '/browser/fts_template/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_template.nodes>,
 <Rule '/browser/fts_template/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_template.msql>,
 <Rule '/browser/fts_template/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_template.msql>,
 <Rule '/browser/fts_template/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-fts_template.obj>,
 <Rule '/browser/fts_template/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-fts_template.obj>,
 <Rule '/browser/fts_parser/headline_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.headline_functions>,
 <Rule '/browser/fts_parser/headline_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.headline_functions>,
 <Rule '/browser/fts_parser/lextype_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.lextype_functions>,
 <Rule '/browser/fts_parser/lextype_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.lextype_functions>,
 <Rule '/browser/fts_parser/start_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.start_functions>,
 <Rule '/browser/fts_parser/token_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.token_functions>,
 <Rule '/browser/fts_parser/start_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.start_functions>,
 <Rule '/browser/fts_parser/token_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.token_functions>,
 <Rule '/browser/fts_parser/end_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.end_functions>,
 <Rule '/browser/fts_parser/end_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.end_functions>,
 <Rule '/browser/fts_parser/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.nodes>,
 <Rule '/browser/fts_parser/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.nodes>,
 <Rule '/browser/fts_parser/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.msql>,
 <Rule '/browser/fts_parser/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-fts_parser.msql>,
 <Rule '/browser/fts_parser/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-fts_parser.obj>,
 <Rule '/browser/fts_parser/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-fts_parser.obj>,
 <Rule '/browser/collation/get_collations/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-collation.get_collations>,
 <Rule '/browser/collation/get_collations/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-collation.get_collations>,
 <Rule '/browser/procedure/get_languages/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.get_languages>,
 <Rule '/browser/procedure/get_languages/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.get_languages>,
 <Rule '/browser/extension/dependency/<gid>/<sid>/<did>/<eid>' (HEAD, OPTIONS, GET) -> NODE-extension.dependency_id>,
 <Rule '/browser/extension/dependent/<gid>/<sid>/<did>/<eid>' (HEAD, OPTIONS, GET) -> NODE-extension.dependent_id>,
 <Rule '/browser/procedure/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.get_types>,
 <Rule '/browser/procedure/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.get_types>,
 <Rule '/browser/extension/children/<gid>/<sid>/<did>/<eid>' (HEAD, OPTIONS, GET) -> NODE-extension.children_id>,
 <Rule '/browser/extension/delete/<gid>/<sid>/<did>/<eid>' (OPTIONS, DELETE) -> NODE-extension.delete_id>,
 <Rule '/browser/extension/stats/<gid>/<sid>/<did>/<eid>' (HEAD, OPTIONS, GET) -> NODE-extension.stats_id>,
 <Rule '/browser/extension/nodes/<gid>/<sid>/<did>/<eid>' (HEAD, OPTIONS, GET) -> NODE-extension.nodes_id>,
 <Rule '/browser/collation/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-collation.nodes>,
 <Rule '/browser/procedure/stats/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.stats>,
 <Rule '/browser/procedure/vopts/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.vopts>,
 <Rule '/browser/procedure/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.nodes>,
 <Rule '/browser/collation/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-collation.nodes>,
 <Rule '/browser/procedure/stats/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.stats>,
 <Rule '/browser/procedure/vopts/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.vopts>,
 <Rule '/browser/procedure/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.nodes>,
 <Rule '/browser/extension/msql/<gid>/<sid>/<did>/<eid>' (HEAD, OPTIONS, GET) -> NODE-extension.msql_id>,
 <Rule '/browser/collation/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-collation.msql>,
 <Rule '/browser/procedure/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.msql>,
 <Rule '/browser/collation/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-collation.msql>,
 <Rule '/browser/procedure/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-procedure.msql>,
 <Rule '/browser/extension/sql/<gid>/<sid>/<did>/<eid>' (HEAD, OPTIONS, GET) -> NODE-extension.sql_id>,
 <Rule '/browser/extension/obj/<gid>/<sid>/<did>/<eid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-extension.obj_id>,
 <Rule '/browser/collation/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-collation.obj>,
 <Rule '/browser/procedure/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-procedure.obj>,
 <Rule '/browser/collation/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-collation.obj>,
 <Rule '/browser/procedure/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-procedure.obj>,
 <Rule '/browser/function/get_languages/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.get_languages>,
 <Rule '/browser/function/get_languages/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.get_languages>,
 <Rule '/browser/language/dependency/<gid>/<sid>/<did>/<lid>' (HEAD, OPTIONS, GET) -> NODE-language.dependency_id>,
 <Rule '/browser/language/dependent/<gid>/<sid>/<did>/<lid>' (HEAD, OPTIONS, GET) -> NODE-language.dependent_id>,
 <Rule '/browser/function/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.get_types>,
 <Rule '/browser/function/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.get_types>,
 <Rule '/browser/language/stats/<gid>/<sid>/<did>/<lid>' (HEAD, OPTIONS, GET) -> NODE-language.stats_id>,
 <Rule '/browser/language/nodes/<gid>/<sid>/<did>/<lid>' (HEAD, OPTIONS, GET) -> NODE-language.nodes_id>,
 <Rule '/browser/function/stats/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.stats>,
 <Rule '/browser/function/vopts/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.vopts>,
 <Rule '/browser/function/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.nodes>,
 <Rule '/browser/sequence/stats/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-sequence.stats>,
 <Rule '/browser/sequence/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-sequence.nodes>,
 <Rule '/browser/function/stats/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.stats>,
 <Rule '/browser/function/vopts/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.vopts>,
 <Rule '/browser/function/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.nodes>,
 <Rule '/browser/sequence/stats/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-sequence.stats>,
 <Rule '/browser/sequence/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-sequence.nodes>,
 <Rule '/browser/language/msql/<gid>/<sid>/<did>/<lid>' (HEAD, OPTIONS, GET) -> NODE-language.msql_id>,
 <Rule '/browser/function/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.msql>,
 <Rule '/browser/sequence/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-sequence.msql>,
 <Rule '/browser/function/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-function.msql>,
 <Rule '/browser/sequence/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-sequence.msql>,
 <Rule '/browser/language/obj/<gid>/<sid>/<did>/<lid>' (PUT, HEAD, OPTIONS, GET) -> NODE-language.obj_id>,
 <Rule '/browser/language/sql/<gid>/<sid>/<did>/<lid>' (HEAD, OPTIONS, GET) -> NODE-language.sql_id>,
 <Rule '/browser/function/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-function.obj>,
 <Rule '/browser/sequence/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-sequence.obj>,
 <Rule '/browser/function/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-function.obj>,
 <Rule '/browser/sequence/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-sequence.obj>,
 <Rule '/browser/catalog/dependency/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-catalog.dependency_id>,
 <Rule '/browser/catalog/dependent/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-catalog.dependent_id>,
 <Rule '/browser/catalog/children/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-catalog.children_id>,
 <Rule '/browser/catalog/delete/<gid>/<sid>/<did>/<scid>' (OPTIONS, DELETE) -> NODE-catalog.delete_id>,
 <Rule '/browser/catalog/stats/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-catalog.stats_id>,
 <Rule '/browser/catalog/nodes/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-catalog.nodes_id>,
 <Rule '/browser/catalog/msql/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-catalog.msql_id>,
 <Rule '/browser/catalog/obj/<gid>/<sid>/<did>/<scid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-catalog.obj_id>,
 <Rule '/browser/catalog/sql/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-catalog.sql_id>,
 <Rule '/browser/domain/get_collations/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-domain.get_collations>,
 <Rule '/browser/domain/get_collations/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-domain.get_collations>,
 <Rule '/browser/schema/dependency/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-schema.dependency_id>,
 <Rule '/browser/schema/dependent/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-schema.dependent_id>,
 <Rule '/browser/domain/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-domain.get_types>,
 <Rule '/browser/domain/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-domain.get_types>,
 <Rule '/browser/schema/children/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-schema.children_id>,
 <Rule '/browser/schema/delete/<gid>/<sid>/<did>/<scid>' (OPTIONS, DELETE) -> NODE-schema.delete_id>,
 <Rule '/browser/schema/stats/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-schema.stats_id>,
 <Rule '/browser/schema/nodes/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-schema.nodes_id>,
 <Rule '/browser/domain/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-domain.nodes>,
 <Rule '/browser/domain/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-domain.nodes>,
 <Rule '/browser/schema/msql/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-schema.msql_id>,
 <Rule '/browser/domain/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-domain.msql>,
 <Rule '/browser/domain/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-domain.msql>,
 <Rule '/browser/schema/obj/<gid>/<sid>/<did>/<scid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-schema.obj_id>,
 <Rule '/browser/schema/sql/<gid>/<sid>/<did>/<scid>' (HEAD, OPTIONS, GET) -> NODE-schema.sql_id>,
 <Rule '/browser/domain/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-domain.obj>,
 <Rule '/browser/domain/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-domain.obj>,
 <Rule '/browser/table/get_toast_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_toast_table_vacuum>,
 <Rule '/browser/mview/get_toast_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.get_toast_table_vacuum>,
 <Rule '/browser/table/get_toast_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_toast_table_vacuum>,
 <Rule '/browser/mview/get_toast_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.get_toast_table_vacuum>,
 <Rule '/browser/table/get_access_methods/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_access_methods>,
 <Rule '/browser/table/get_access_methods/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_access_methods>,
 <Rule '/browser/table/get_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_table_vacuum>,
 <Rule '/browser/mview/get_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.get_table_vacuum>,
 <Rule '/browser/table/get_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_table_vacuum>,
 <Rule '/browser/mview/get_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.get_table_vacuum>,
 <Rule '/browser/table/get_oper_class/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_oper_class>,
 <Rule '/browser/table/get_oper_class/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_oper_class>,
 <Rule '/browser/table/get_relations/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_relations>,
 <Rule '/browser/table/get_relations/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_relations>,
 <Rule '/browser/table/get_operator/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_operator>,
 <Rule '/browser/table/get_inherits/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_inherits>,
 <Rule '/browser/table/get_operator/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_operator>,
 <Rule '/browser/table/get_inherits/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_inherits>,
 <Rule '/browser/table/get_columns/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_columns>,
 <Rule '/browser/table/get_columns/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_columns>,
 <Rule '/browser/table/get_oftype/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_oftype>,
 <Rule '/browser/table/all_tables/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.all_tables>,
 <Rule '/browser/mview/get_tblspc/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.get_tblspc>,
 <Rule '/browser/mview/select_sql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.select_sql>,
 <Rule '/browser/mview/insert_sql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.insert_sql>,
 <Rule '/browser/table/get_oftype/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_oftype>,
 <Rule '/browser/table/all_tables/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.all_tables>,
 <Rule '/browser/mview/get_tblspc/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.get_tblspc>,
 <Rule '/browser/mview/select_sql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.select_sql>,
 <Rule '/browser/mview/insert_sql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.insert_sql>,
 <Rule '/browser/table/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_types>,
 <Rule '/browser/table/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.get_types>,
 <Rule '/browser/table/stats/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.stats>,
 <Rule '/browser/table/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.nodes>,
 <Rule '/browser/mview/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.nodes>,
 <Rule '/browser/table/stats/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.stats>,
 <Rule '/browser/table/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.nodes>,
 <Rule '/browser/mview/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.nodes>,
 <Rule '/browser/table/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.msql>,
 <Rule '/browser/mview/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.msql>,
 <Rule '/browser/table/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-table.msql>,
 <Rule '/browser/mview/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-mview.msql>,
 <Rule '/browser/table/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-table.obj>,
 <Rule '/browser/mview/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-mview.obj>,
 <Rule '/browser/table/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-table.obj>,
 <Rule '/browser/mview/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-mview.obj>,
 <Rule '/browser/type/get_external_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_external_functions>,
 <Rule '/browser/view/get_toast_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.get_toast_table_vacuum>,
 <Rule '/browser/type/get_external_functions/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_external_functions>,
 <Rule '/browser/view/get_toast_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.get_toast_table_vacuum>,
 <Rule '/browser/view/get_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.get_table_vacuum>,
 <Rule '/browser/view/get_table_vacuum/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.get_table_vacuum>,
 <Rule '/browser/type/get_collations/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_collations>,
 <Rule '/browser/type/get_subopclass/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_subopclass>,
 <Rule '/browser/type/get_collations/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_collations>,
 <Rule '/browser/type/get_subopclass/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_subopclass>,
 <Rule '/browser/cast/get_functions/<gid>/<sid>/<did>/<cid>' (POST, OPTIONS) -> NODE-cast.get_functions_id>,
 <Rule '/browser/type/get_canonical/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_canonical>,
 <Rule '/browser/type/get_stypediff/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_stypediff>,
 <Rule '/browser/type/get_canonical/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_canonical>,
 <Rule '/browser/type/get_stypediff/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_stypediff>,
 <Rule '/browser/cast/dependency/<gid>/<sid>/<did>/<cid>' (HEAD, OPTIONS, GET) -> NODE-cast.dependency_id>,
 <Rule '/browser/type/get_stypes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_stypes>,
 <Rule '/browser/view/get_tblspc/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.get_tblspc>,
 <Rule '/browser/view/select_sql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.select_sql>,
 <Rule '/browser/view/insert_sql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.insert_sql>,
 <Rule '/browser/type/get_stypes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_stypes>,
 <Rule '/browser/view/get_tblspc/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.get_tblspc>,
 <Rule '/browser/view/select_sql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.select_sql>,
 <Rule '/browser/view/insert_sql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.insert_sql>,
 <Rule '/browser/cast/dependent/<gid>/<sid>/<did>/<cid>' (HEAD, OPTIONS, GET) -> NODE-cast.dependent_id>,
 <Rule '/browser/type/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_types>,
 <Rule '/browser/type/get_types/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.get_types>,
 <Rule '/browser/cast/get_type/<gid>/<sid>/<did>/<cid>' (HEAD, OPTIONS, GET) -> NODE-cast.get_type_id>,
 <Rule '/browser/cast/children/<gid>/<sid>/<did>/<cid>' (HEAD, OPTIONS, GET) -> NODE-cast.children_id>,
 <Rule '/browser/cast/delete/<gid>/<sid>/<did>/<cid>' (OPTIONS, DELETE) -> NODE-cast.delete_id>,
 <Rule '/browser/cast/stats/<gid>/<sid>/<did>/<cid>' (HEAD, OPTIONS, GET) -> NODE-cast.stats_id>,
 <Rule '/browser/cast/nodes/<gid>/<sid>/<did>/<cid>' (HEAD, OPTIONS, GET) -> NODE-cast.nodes_id>,
 <Rule '/browser/type/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.nodes>,
 <Rule '/browser/view/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.nodes>,
 <Rule '/browser/type/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.nodes>,
 <Rule '/browser/view/nodes/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.nodes>,
 <Rule '/browser/cast/msql/<gid>/<sid>/<did>/<cid>' (HEAD, OPTIONS, GET) -> NODE-cast.msql_id>,
 <Rule '/browser/type/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.msql>,
 <Rule '/browser/view/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.msql>,
 <Rule '/browser/type/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-type.msql>,
 <Rule '/browser/view/msql/<gid>/<sid>/<did>/<scid>/' (HEAD, OPTIONS, GET) -> NODE-view.msql>,
 <Rule '/browser/cast/sql/<gid>/<sid>/<did>/<cid>' (HEAD, OPTIONS, GET) -> NODE-cast.sql_id>,
 <Rule '/browser/cast/obj/<gid>/<sid>/<did>/<cid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-cast.obj_id>,
 <Rule '/browser/type/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-type.obj>,
 <Rule '/browser/view/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-view.obj>,
 <Rule '/browser/type/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-type.obj>,
 <Rule '/browser/view/obj/<gid>/<sid>/<did>/<scid>/' (HEAD, POST, OPTIONS, GET) -> NODE-view.obj>,
 <Rule '/debugger/get_arguments/<sid>/<did>/<scid>/<func_id>' (HEAD, OPTIONS, GET) -> debugger.get_arguments_sqlite>,
 <Rule '/debugger/set_arguments/<sid>/<did>/<scid>/<func_id>' (POST, OPTIONS) -> debugger.set_arguments_sqlite>,
 <Rule '/datagrid/filter/validate/<sid>/<did>/<obj_id>' (PUT, POST, OPTIONS) -> datagrid.validate_filter>,
 <Rule '/browser/foreign_data_wrapper/get_validators/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.get_validators>,
 <Rule '/browser/foreign_data_wrapper/get_handlers/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.get_handlers>,
 <Rule '/browser/foreign_data_wrapper/nodes/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.nodes>,
 <Rule '/browser/foreign_data_wrapper/msql/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.msql>,
 <Rule '/browser/foreign_data_wrapper/obj/<gid>/<sid>/<did>/' (HEAD, POST, OPTIONS, GET) -> NODE-foreign_data_wrapper.obj>,
 <Rule '/browser/resource_group/dependency/<gid>/<sid>/<rg_id>' (HEAD, OPTIONS, GET) -> NODE-resource_group.dependency_id>,
 <Rule '/browser/resource_group/dependent/<gid>/<sid>/<rg_id>' (HEAD, OPTIONS, GET) -> NODE-resource_group.dependent_id>,
 <Rule '/browser/resource_group/stats/<gid>/<sid>/<rg_id>' (HEAD, OPTIONS, GET) -> NODE-resource_group.stats_id>,
 <Rule '/browser/resource_group/nodes/<gid>/<sid>/<rg_id>' (HEAD, OPTIONS, GET) -> NODE-resource_group.nodes_id>,
 <Rule '/browser/resource_group/msql/<gid>/<sid>/<rg_id>' (HEAD, OPTIONS, GET) -> NODE-resource_group.msql_id>,
 <Rule '/browser/resource_group/obj/<gid>/<sid>/<rg_id>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-resource_group.obj_id>,
 <Rule '/browser/resource_group/sql/<gid>/<sid>/<rg_id>' (HEAD, OPTIONS, GET) -> NODE-resource_group.sql_id>,
 <Rule '/browser/event_trigger/fopts/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-event_trigger.fopts>,
 <Rule '/browser/event_trigger/nodes/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-event_trigger.nodes>,
 <Rule '/browser/event_trigger/msql/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-event_trigger.msql>,
 <Rule '/browser/event_trigger/obj/<gid>/<sid>/<did>/' (HEAD, POST, OPTIONS, GET) -> NODE-event_trigger.obj>,
 <Rule '/browser/tablespace/move_objects_sql/<gid>/<sid>/<tsid>' (HEAD, OPTIONS, GET) -> NODE-tablespace.move_objects_sql_id>,
 <Rule '/browser/tablespace/move_objects/<gid>/<sid>/<tsid>' (PUT, OPTIONS) -> NODE-tablespace.move_objects_id>,
 <Rule '/browser/tablespace/dependency/<gid>/<sid>/<tsid>' (HEAD, OPTIONS, GET) -> NODE-tablespace.dependency_id>,
 <Rule '/browser/tablespace/dependent/<gid>/<sid>/<tsid>' (HEAD, OPTIONS, GET) -> NODE-tablespace.dependent_id>,
 <Rule '/browser/tablespace/children/<gid>/<sid>/<tsid>' (HEAD, OPTIONS, GET) -> NODE-tablespace.children_id>,
 <Rule '/browser/tablespace/stats/<gid>/<sid>/<tsid>' (HEAD, OPTIONS, GET) -> NODE-tablespace.stats_id>,
 <Rule '/browser/tablespace/nodes/<gid>/<sid>/<tsid>' (HEAD, OPTIONS, GET) -> NODE-tablespace.nodes_id>,
 <Rule '/browser/tablespace/msql/<gid>/<sid>/<tsid>' (HEAD, OPTIONS, GET) -> NODE-tablespace.msql_id>,
 <Rule '/browser/tablespace/sql/<gid>/<sid>/<tsid>' (HEAD, OPTIONS, GET) -> NODE-tablespace.sql_id>,
 <Rule '/browser/tablespace/obj/<gid>/<sid>/<tsid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-tablespace.obj_id>,
 <Rule '/browser/extension/schemas/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-extension.schemas>,
 <Rule '/browser/extension/avails/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-extension.avails>,
 <Rule '/browser/extension/nodes/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-extension.nodes>,
 <Rule '/browser/extension/msql/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-extension.msql>,
 <Rule '/browser/extension/obj/<gid>/<sid>/<did>/' (HEAD, POST, OPTIONS, GET) -> NODE-extension.obj>,
 <Rule '/browser/database/get_encodings/<gid>/<sid>/<did>' (HEAD, OPTIONS, GET) -> NODE-database.get_encodings_id>,
 <Rule '/browser/language/get_functions/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-language.get_functions>,
 <Rule '/browser/database/dependency/<gid>/<sid>/<did>' (HEAD, OPTIONS, GET) -> NODE-database.dependency_id>,
 <Rule '/browser/database/get_ctypes/<gid>/<sid>/<did>' (HEAD, OPTIONS, GET) -> NODE-database.get_ctypes_id>,
 <Rule '/browser/database/dependent/<gid>/<sid>/<did>' (HEAD, OPTIONS, GET) -> NODE-database.dependent_id>,
 <Rule '/browser/database/children/<gid>/<sid>/<did>' (HEAD, OPTIONS, GET) -> NODE-database.children_id>,
 <Rule '/browser/database/connect/<gid>/<sid>/<did>' (HEAD, POST, DELETE, OPTIONS, GET) -> NODE-database.connect_id>,
 <Rule '/browser/database/stats/<gid>/<sid>/<did>' (HEAD, OPTIONS, GET) -> NODE-database.stats_id>,
 <Rule '/browser/database/nodes/<gid>/<sid>/<did>' (HEAD, OPTIONS, GET) -> NODE-database.nodes_id>,
 <Rule '/browser/language/nodes/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-language.nodes>,
 <Rule '/browser/database/msql/<gid>/<sid>/<did>' (HEAD, OPTIONS, GET) -> NODE-database.msql_id>,
 <Rule '/browser/language/msql/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-language.msql>,
 <Rule '/browser/database/sql/<gid>/<sid>/<did>' (HEAD, OPTIONS, GET) -> NODE-database.sql_id>,
 <Rule '/browser/database/obj/<gid>/<sid>/<did>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-database.obj_id>,
 <Rule '/browser/language/obj/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-language.obj>,
 <Rule '/browser/catalog/nodes/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-catalog.nodes>,
 <Rule '/browser/catalog/msql/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-catalog.msql>,
 <Rule '/browser/catalog/obj/<gid>/<sid>/<did>/' (HEAD, POST, OPTIONS, GET) -> NODE-catalog.obj>,
 <Rule '/browser/schema/nodes/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-schema.nodes>,
 <Rule '/browser/schema/msql/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-schema.msql>,
 <Rule '/browser/schema/obj/<gid>/<sid>/<did>/' (HEAD, POST, OPTIONS, GET) -> NODE-schema.obj>,
 <Rule '/browser/cast/get_functions/<gid>/<sid>/<did>/' (POST, OPTIONS) -> NODE-cast.get_functions>,
 <Rule '/browser/role/dependency/<gid>/<sid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-role.dependency_id>,
 <Rule '/browser/role/dependent/<gid>/<sid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-role.dependent_id>,
 <Rule '/browser/role/variables/<gid>/<sid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-role.variables_id>,
 <Rule '/browser/cast/get_type/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-cast.get_type>,
 <Rule '/browser/role/children/<gid>/<sid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-role.children_id>,
 <Rule '/browser/cast/nodes/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-cast.nodes>,
 <Rule '/browser/role/nodes/<gid>/<sid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-role.nodes_id>,
 <Rule '/browser/cast/msql/<gid>/<sid>/<did>/' (HEAD, OPTIONS, GET) -> NODE-cast.msql>,
 <Rule '/browser/role/msql/<gid>/<sid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-role.msql_id>,
 <Rule '/browser/cast/obj/<gid>/<sid>/<did>/' (HEAD, POST, OPTIONS, GET) -> NODE-cast.obj>,
 <Rule '/browser/role/obj/<gid>/<sid>/<rid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-role.obj_id>,
 <Rule '/browser/role/sql/<gid>/<sid>/<rid>' (HEAD, OPTIONS, GET) -> NODE-role.sql_id>,
 <Rule '/misc/bgprocess/status/<pid>/<out>/<err>/' (HEAD, OPTIONS, GET) -> bgprocess.status>,
 <Rule '/grant_wizard/msql/<gid>/<sid>/<did>/' (HEAD, POST, OPTIONS, GET) -> grant_wizard.msql>,
 <Rule '/grant_wizard/save/<gid>/<sid>/<did>/' (HEAD, POST, OPTIONS, GET) -> grant_wizard.save>,
 <Rule '/grant_wizard/acl/<gid>/<sid>/<did>/' (HEAD, POST, OPTIONS, GET) -> grant_wizard.acl_list>,
 <Rule '/debugger/set_breakpoint/<trans_id>/<line_no>/<set_type>' (HEAD, OPTIONS, GET) -> debugger.set_clear_breakpoint>,
 <Rule '/datagrid/initialize/query_tool/<sid>/<did>' (POST, OPTIONS) -> datagrid.initialize_query_tool>,
 <Rule '/datagrid/panel/<trans_id>/<is_query_tool>/<editor_title>' (HEAD, OPTIONS, GET) -> datagrid.panel>,
 <Rule '/browser/resource_group/nodes/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-resource_group.nodes>,
 <Rule '/browser/resource_group/msql/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-resource_group.msql>,
 <Rule '/browser/resource_group/obj/<gid>/<sid>/' (HEAD, POST, OPTIONS, GET) -> NODE-resource_group.obj>,
 <Rule '/browser/tablespace/stats/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-tablespace.stats>,
 <Rule '/browser/tablespace/vopts/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-tablespace.vopts>,
 <Rule '/browser/tablespace/nodes/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-tablespace.nodes>,
 <Rule '/browser/tablespace/msql/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-tablespace.msql>,
 <Rule '/browser/tablespace/obj/<gid>/<sid>/' (HEAD, POST, OPTIONS, GET) -> NODE-tablespace.obj>,
 <Rule '/browser/database/get_encodings/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-database.get_encodings>,
 <Rule '/browser/database/get_ctypes/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-database.get_ctypes>,
 <Rule '/browser/database/stats/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-database.stats>,
 <Rule '/browser/database/vopts/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-database.vopts>,
 <Rule '/browser/database/nodes/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-database.nodes>,
 <Rule '/browser/database/msql/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-database.msql>,
 <Rule '/browser/database/obj/<gid>/<sid>/' (HEAD, POST, OPTIONS, GET) -> NODE-database.obj>,
 <Rule '/browser/server/change_password/<gid>/<sid>' (POST, OPTIONS) -> NODE-server.change_password_id>,
 <Rule '/browser/server/restore_point/<gid>/<sid>' (POST, OPTIONS) -> NODE-server.restore_point_id>,
 <Rule '/browser/server/wal_replay/<gid>/<sid>' (PUT, OPTIONS, DELETE) -> NODE-server.wal_replay_id>,
 <Rule '/browser/server/dependency/<gid>/<sid>' (HEAD, OPTIONS, GET) -> NODE-server.dependency_id>,
 <Rule '/browser/server/dependent/<gid>/<sid>' (HEAD, OPTIONS, GET) -> NODE-server.dependent_id>,
 <Rule '/browser/server/children/<gid>/<sid>' (HEAD, OPTIONS, GET) -> NODE-server.children_id>,
 <Rule '/browser/server/connect/<gid>/<sid>' (HEAD, POST, DELETE, OPTIONS, GET) -> NODE-server.connect_id>,
 <Rule '/browser/server/reload/<gid>/<sid>' (HEAD, OPTIONS, GET) -> NODE-server.reload_id>,
 <Rule '/browser/server/stats/<gid>/<sid>' (HEAD, OPTIONS, GET) -> NODE-server.stats_id>,
 <Rule '/browser/server/nodes/<gid>/<sid>' (HEAD, OPTIONS, GET) -> NODE-server.nodes_id>,
 <Rule '/browser/server/msql/<gid>/<sid>' (HEAD, OPTIONS, GET) -> NODE-server.msql_id>,
 <Rule '/browser/server/obj/<gid>/<sid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-server.obj_id>,
 <Rule '/browser/server/sql/<gid>/<sid>' (HEAD, OPTIONS, GET) -> NODE-server.sql_id>,
 <Rule '/browser/role/vopts/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-role.vopts>,
 <Rule '/browser/role/nodes/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-role.nodes>,
 <Rule '/browser/role/msql/<gid>/<sid>/' (HEAD, OPTIONS, GET) -> NODE-role.msql>,
 <Rule '/browser/role/obj/<gid>/<sid>/' (HEAD, POST, OPTIONS, GET) -> NODE-role.obj>,
 <Rule '/maintenance/create_job/<sid>/<did>' (POST, OPTIONS) -> maintenance.create_maintenance_job>,
 <Rule '/dashboard/session_stats/<sid>/<did>' (HEAD, OPTIONS, GET) -> dashboard.session_stats>,
 <Rule '/sqleditor/query_tool/preferences/<trans_id>' (PUT, HEAD, OPTIONS, GET) -> sqleditor.preferences>,
 <Rule '/sqleditor/query_tool/start/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.start_query_tool>,
 <Rule '/sqleditor/view_data/start/<trans_id>' (HEAD, OPTIONS, GET) -> sqleditor.start_view_data>,
 <Rule '/dashboard/tps_stats/<sid>/<did>' (HEAD, OPTIONS, GET) -> dashboard.tps_stats>,
 <Rule '/dashboard/bio_stats/<sid>/<did>' (HEAD, OPTIONS, GET) -> dashboard.bio_stats>,
 <Rule '/dashboard/ti_stats/<sid>/<did>' (HEAD, OPTIONS, GET) -> dashboard.ti_stats>,
 <Rule '/dashboard/to_stats/<sid>/<did>' (HEAD, OPTIONS, GET) -> dashboard.to_stats>,
 <Rule '/dashboard/activity/<sid>/<did>' (HEAD, OPTIONS, GET) -> dashboard.activity>,
 <Rule '/dashboard/prepared/<sid>/<did>' (HEAD, OPTIONS, GET) -> dashboard.prepared>,
 <Rule '/sqleditor/filter/inclusive/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.append_filter_inclusive>,
 <Rule '/sqleditor/filter/exclusive/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.append_filter_exclusive>,
 <Rule '/sqleditor/filter/remove/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.remove_filter>,
 <Rule '/sqleditor/filter/apply/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.apply_filter>,
 <Rule '/sqleditor/filter/get/<trans_id>' (HEAD, OPTIONS, GET) -> sqleditor.get_filter>,
 <Rule '/sqleditor/object/get/<trans_id>' (HEAD, OPTIONS, GET) -> sqleditor.get_object_name>,
 <Rule '/sqleditor/fetch/types/<trans_id>' (HEAD, OPTIONS, GET) -> sqleditor.fetch_pg_types>,
 <Rule '/dashboard/locks/<sid>/<did>' (HEAD, OPTIONS, GET) -> dashboard.locks>,
 <Rule '/debugger/start_execution/<trans_id>/<port_num>' (HEAD, OPTIONS, GET) -> debugger.start_execution>,
 <Rule '/debugger/execute_query/<trans_id>/<query_type>' (HEAD, OPTIONS, GET) -> debugger.execute_debugger_query>,
 <Rule '/debugger/select_frame/<trans_id>/<frame_id>' (HEAD, OPTIONS, GET) -> debugger.select_frame>,
 <Rule '/datagrid/initialize/query_tool/<sid>' (POST, OPTIONS) -> datagrid.initialize_query_tool>,
 <Rule '/settings/store/<setting>/<value>' (HEAD, OPTIONS, GET) -> settings.store>,
 <Rule '/settings/get/<setting>/<default>' (HEAD, OPTIONS, GET) -> settings.get>,
 <Rule '/browser/catalog_object_column/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.static>,
 <Rule '/browser/catalog_object_column/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-catalog_object_column.static>,
 <Rule '/browser/foreign_data_wrapper/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-foreign_data_wrapper.static>,
 <Rule '/browser/exclusion_constraint/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.static>,
 <Rule '/browser/exclusion_constraint/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-exclusion_constraint.static>,
 <Rule '/browser/domain_constraints/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.static>,
 <Rule '/browser/domain_constraints/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-domain_constraints.static>,
 <Rule '/browser/fts_configuration/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.static>,
 <Rule '/browser/check_constraints/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.static>,
 <Rule '/browser/unique_constraint/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.static>,
 <Rule '/browser/fts_configuration/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-fts_configuration.static>,
 <Rule '/browser/check_constraints/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-check_constraints.static>,
 <Rule '/browser/unique_constraint/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-unique_constraint.static>,
 <Rule '/browser/trigger_function/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.static>,
 <Rule '/browser/trigger_function/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-trigger_function.static>,
 <Rule '/browser/foreign_server/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-foreign_server.static>,
 <Rule '/browser/catalog_object/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.static>,
 <Rule '/browser/fts_dictionary/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.static>,
 <Rule '/browser/catalog_object/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-catalog_object.static>,
 <Rule '/browser/fts_dictionary/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-fts_dictionary.static>,
 <Rule '/browser/resource_group/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-resource_group.static>,
 <Rule '/browser/event_trigger/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-event_trigger.static>,
 <Rule '/browser/foreign-table/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.static>,
 <Rule '/browser/foreign-table/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-foreign-table.static>,
 <Rule '/browser/server-group/dependency/<gid>' (HEAD, OPTIONS, GET) -> NODE-server-group.dependency_id>,
 <Rule '/browser/server-group/dependent/<gid>' (HEAD, OPTIONS, GET) -> NODE-server-group.dependent_id>,
 <Rule '/browser/server-group/children/<gid>' (HEAD, OPTIONS, GET) -> NODE-server-group.children_id>,
 <Rule '/browser/user_mapping/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-user_mapping.static>,
 <Rule '/browser/fts_template/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-fts_template.static>,
 <Rule '/browser/fts_template/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-fts_template.static>,
 <Rule '/browser/server-group/stats/<gid>' (HEAD, OPTIONS, GET) -> NODE-server-group.stats_id>,
 <Rule '/browser/server-group/nodes/<gid>' (HEAD, OPTIONS, GET) -> NODE-server-group.nodes_id>,
 <Rule '/browser/server-group/msql/<gid>' (HEAD, OPTIONS, GET) -> NODE-server-group.msql_id>,
 <Rule '/browser/server-group/obj/<gid>' (PUT, HEAD, DELETE, OPTIONS, GET) -> NODE-server-group.obj_id>,
 <Rule '/browser/server-group/sql/<gid>' (HEAD, OPTIONS, GET) -> NODE-server-group.sql_id>,
 <Rule '/browser/constraints/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-constraints.static>,
 <Rule '/browser/foreign_key/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.static>,
 <Rule '/browser/primary_key/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-primary_key.static>,
 <Rule '/browser/constraints/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-constraints.static>,
 <Rule '/browser/foreign_key/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-foreign_key.static>,
 <Rule '/browser/primary_key/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-primary_key.static>,
 <Rule '/browser/fts_parser/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.static>,
 <Rule '/browser/fts_parser/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-fts_parser.static>,
 <Rule '/browser/tablespace/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-tablespace.static>,
 <Rule '/browser/extension/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-extension.static>,
 <Rule '/browser/collation/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-collation.static>,
 <Rule '/browser/procedure/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-procedure.static>,
 <Rule '/browser/collation/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-collation.static>,
 <Rule '/browser/procedure/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-procedure.static>,
 <Rule '/browser/database/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-database.static>,
 <Rule '/browser/language/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-language.static>,
 <Rule '/browser/function/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-function.static>,
 <Rule '/browser/sequence/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-sequence.static>,
 <Rule '/browser/function/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-function.static>,
 <Rule '/browser/sequence/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-sequence.static>,
 <Rule '/browser/trigger/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-trigger.static>,
 <Rule '/browser/catalog/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-catalog.static>,
 <Rule '/browser/trigger/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-trigger.static>,
 <Rule '/browser/server/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-server.static>,
 <Rule '/browser/schema/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-schema.static>,
 <Rule '/browser/domain/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-domain.static>,
 <Rule '/browser/column/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-column.static>,
 <Rule '/browser/domain/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-domain.static>,
 <Rule '/browser/column/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-column.static>,
 <Rule '/browser/server/nodes/<gid>/' (HEAD, OPTIONS, GET) -> NODE-server.nodes>,
 <Rule '/browser/server/obj/<gid>/' (HEAD, POST, OPTIONS, GET) -> NODE-server.obj>,
 <Rule '/browser/table/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-table.static>,
 <Rule '/browser/index/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-index.static>,
 <Rule '/browser/mview/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-mview.static>,
 <Rule '/browser/table/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-table.static>,
 <Rule '/browser/index/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-index.static>,
 <Rule '/browser/mview/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-mview.static>,
 <Rule '/browser/cast/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-cast.static>,
 <Rule '/browser/rule/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-rule.static>,
 <Rule '/browser/type/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-type.static>,
 <Rule '/browser/view/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-view.static>,
 <Rule '/browser/rule/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-rule.static>,
 <Rule '/browser/type/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-type.static>,
 <Rule '/browser/view/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-view.static>,
 <Rule '/browser/role/static/<filename>' (HEAD, OPTIONS, GET) -> NODE-role.static>,
 <Rule '/backup/create_job/backup_object/<sid>' (POST, OPTIONS) -> backup.create_backup_objects_job>,
 <Rule '/misc/statistics/static/<filename>' (HEAD, OPTIONS, GET) -> statistics.static>,
 <Rule '/misc/bgprocess/acknowledge/<pid>/' (PUT, OPTIONS) -> bgprocess.acknowledge>,
 <Rule '/misc/bgprocess/status/<pid>/' (HEAD, OPTIONS, GET) -> bgprocess.status>,
 <Rule '/misc/bgprocess/static/<filename>' (HEAD, OPTIONS, GET) -> bgprocess.static>,
 <Rule '/misc/depends/static/<filename>' (HEAD, OPTIONS, GET) -> depends.static>,
 <Rule '/misc/sql/static/<filename>' (HEAD, OPTIONS, GET) -> sql.static>,
 <Rule '/user_management/user/<uid>' (HEAD, OPTIONS, GET) -> user_management.user>,
 <Rule '/user_management/user/<uid>' (OPTIONS, DELETE) -> user_management.delete>,
 <Rule '/user_management/user/<uid>' (PUT, OPTIONS) -> user_management.update>,
 <Rule '/user_management/role/<rid>' (HEAD, OPTIONS, GET) -> user_management.role>,
 <Rule '/import_export/create_job/<sid>' (POST, OPTIONS) -> import_export.create_import_export_job>,
 <Rule '/import_export/static/<filename>' (HEAD, OPTIONS, GET) -> import_export.static>,
 <Rule '/file_manager/del_trans_id/<trans_id>' (HEAD, POST, OPTIONS, GET) -> file_manager.delete_trans_id>,
 <Rule '/file_manager/filemanager/<trans_id>/' (HEAD, POST, OPTIONS, GET) -> file_manager.file_manager>,
 <Rule '/file_manager/static/<filename>' (HEAD, OPTIONS, GET) -> file_manager.static>,
 <Rule '/file_manager/<trans_id>/file_manager_config.json' (HEAD, OPTIONS, GET) -> file_manager.file_manager_config>,
 <Rule '/preferences/preferences/<pid>' (PUT, OPTIONS) -> preferences.save>,
 <Rule '/preferences/static/<filename>' (HEAD, OPTIONS, GET) -> preferences.static>,
 <Rule '/maintenance/static/<filename>' (HEAD, OPTIONS, GET) -> maintenance.static>,
 <Rule '/dashboard/session_stats/<sid>' (HEAD, OPTIONS, GET) -> dashboard.session_stats>,
 <Rule '/sqleditor/auto_rollback/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.set_auto_rollback>,
 <Rule '/sqleditor/autocomplete/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.auto_complete>,
 <Rule '/sqleditor/auto_commit/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.set_auto_commit>,
 <Rule '/dashboard/tps_stats/<sid>' (HEAD, OPTIONS, GET) -> dashboard.tps_stats>,
 <Rule '/dashboard/bio_stats/<sid>' (HEAD, OPTIONS, GET) -> dashboard.bio_stats>,
 <Rule '/dashboard/ti_stats/<sid>' (HEAD, OPTIONS, GET) -> dashboard.ti_stats>,
 <Rule '/dashboard/to_stats/<sid>' (HEAD, OPTIONS, GET) -> dashboard.to_stats>,
 <Rule '/dashboard/activity/<sid>' (HEAD, OPTIONS, GET) -> dashboard.activity>,
 <Rule '/dashboard/prepared/<sid>' (HEAD, OPTIONS, GET) -> dashboard.prepared>,
 <Rule '/dashboard/config/<sid>' (HEAD, OPTIONS, GET) -> dashboard.config>,
 <Rule '/sqleditor/cancel/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.cancel_transaction>,
 <Rule '/dashboard/static/<filename>' (HEAD, OPTIONS, GET) -> dashboard.static>,
 <Rule '/sqleditor/static/<filename>' (HEAD, OPTIONS, GET) -> sqleditor.static>,
 <Rule '/dashboard/locks/<sid>' (HEAD, OPTIONS, GET) -> dashboard.locks>,
 <Rule '/sqleditor/limit/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.set_limit>,
 <Rule '/sqleditor/poll/<trans_id>' (HEAD, OPTIONS, GET) -> sqleditor.poll>,
 <Rule '/sqleditor/save/<trans_id>' (PUT, POST, OPTIONS) -> sqleditor.save>,
 <Rule '/dashboard/<sid>/<did>' (HEAD, OPTIONS, GET) -> dashboard.index>,
 <Rule '/debugger/poll_end_execution_result/<trans_id>/' (HEAD, OPTIONS, GET) -> debugger.poll_end_execution_result>,
 <Rule '/debugger/clear_all_breakpoint/<trans_id>' (POST, OPTIONS) -> debugger.clear_all_breakpoint>,
 <Rule '/debugger/start_listener/<trans_id>' (HEAD, POST, OPTIONS, GET) -> debugger.start_debugger_listener>,
 <Rule '/debugger/deposit_value/<trans_id>' (POST, OPTIONS) -> debugger.deposit_parameter_value>,
 <Rule '/debugger/poll_result/<trans_id>/' (HEAD, OPTIONS, GET) -> debugger.poll_result>,
 <Rule '/debugger/messages/<trans_id>/' (HEAD, OPTIONS, GET) -> debugger.messages>,
 <Rule '/debugger/restart/<trans_id>' (HEAD, OPTIONS, GET) -> debugger.restart_debugging>,
 <Rule '/debugger/direct/<trans_id>' (HEAD, OPTIONS, GET) -> debugger.direct_new>,
 <Rule '/settings/static/<filename>' (HEAD, OPTIONS, GET) -> settings.static>,
 <Rule '/datagrid/static/<filename>' (HEAD, OPTIONS, GET) -> datagrid.static>,
 <Rule '/debugger/static/<filename>' (HEAD, OPTIONS, GET) -> debugger.static>,
 <Rule '/datagrid/close/<trans_id>' (HEAD, OPTIONS, GET) -> datagrid.close>,
 <Rule '/debugger/close/<trans_id>' (HEAD, OPTIONS, GET) -> debugger.close>,
 <Rule '/settings/get/<setting>' (HEAD, OPTIONS, GET) -> settings.get>,
 <Rule '/browser/server-group/<filename>' (HEAD, OPTIONS, GET) -> NODE-server-group.static>,
 <Rule '/restore/create_job/<sid>' (POST, OPTIONS) -> restore.create_restore_job>,
 <Rule '/browser/static/<filename>' (HEAD, OPTIONS, GET) -> browser.static>,
 <Rule '/backup/create_job/<sid>' (POST, OPTIONS) -> backup.create_backup_job>,
 <Rule '/tools/static/<filename>' (HEAD, OPTIONS, GET) -> tools.static>,
 <Rule '/misc/static/<filename>' (HEAD, OPTIONS, GET) -> misc.static>,
 <Rule '/help/help/<filename>' (HEAD, OPTIONS, GET) -> help.static>,
 <Rule '/user_management/user/' (HEAD, OPTIONS, GET) -> user_management.user>,
 <Rule '/user_management/role/' (HEAD, OPTIONS, GET) -> user_management.role>,
 <Rule '/user_management/<filename>' (HEAD, OPTIONS, GET) -> user_management.static>,
 <Rule '/grant_wizard/<filename>' (HEAD, OPTIONS, GET) -> grant_wizard.static>,
 <Rule '/dashboard/<sid>' (HEAD, OPTIONS, GET) -> dashboard.index>,
 <Rule '/restore/<filename>' (HEAD, OPTIONS, GET) -> restore.static>,
 <Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
 <Rule '//static/<filename>' (HEAD, OPTIONS, GET) -> redirects.static>,
 <Rule '/backup/<filename>' (HEAD, OPTIONS, GET) -> backup.static>,
 <Rule '/reset/<token>' (HEAD, POST, OPTIONS, GET) -> security.reset_password>,
 <Rule '/about/<filename>' (HEAD, OPTIONS, GET) -> about.static>])
Please check output in file: logger.log placed at .../pgadmin4/web/regression
send: 'ehlo 22.0.168.192.in-addr.arpa\r\n'
reply: '250-smtp.gmail.com at your service, [2a02:c7f:6c05:9c00:fc72:48f0:30fb:fe27]\r\n'
reply: '250-SIZE 35882577\r\n'
reply: '250-8BITMIME\r\n'
reply: '250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-CHUNKING\r\n'
reply: '250 SMTPUTF8\r\n'
reply: retcode (250); Msg: smtp.gmail.com at your service, [2a02:c7f:6c05:9c00:fc72:48f0:30fb:fe27]
SIZE 35882577
8BITMIME
AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
ENHANCEDSTATUSCODES
PIPELINING
CHUNKING
SMTPUTF8
send: 'AUTH PLAIN AGRhdmUucGFnZUBlbnRlcnByaXNlZGIuY29tAFAwd2VyQ29ubmVjdA==\r\n'
reply: '235 2.7.0 Accepted\r\n'
reply: retcode (235); Msg: 2.7.0 Accepted
send: u'mail FROM:<no-reply@localhost> size=1118\r\n'
reply: '250 2.1.0 OK q6sm5053521wjt.46 - gsmtp\r\n'
reply: retcode (250); Msg: 2.1.0 OK q6sm5053521wjt.46 - gsmtp
send: u'rcpt TO:<[email protected]>\r\n'
reply: '250 2.1.5 OK q6sm5053521wjt.46 - gsmtp\r\n'
reply: retcode (250); Msg: 2.1.5 OK q6sm5053521wjt.46 - gsmtp
send: 'data\r\n'
reply: '354  Go ahead q6sm5053521wjt.46 - gsmtp\r\n'
reply: retcode (354); Msg: Go ahead q6sm5053521wjt.46 - gsmtp
data: (354, 'Go ahead q6sm5053521wjt.46 - gsmtp')
send: 'Content-Type: multipart/mixed; boundary="===============8112721885542338143=="\r\nMIME-Version: 1.0\r\nSubject: Password reset instructions for pgAdmin 4\r\nFrom: no-reply@localhost\r\nTo: [email protected]\r\nDate: Wed, 29 Jun 2016 20:12:45 +0100\r\nMessage-ID: <[email protected]>\r\n\r\n--===============8112721885542338143==\r\nContent-Type: multipart/alternative;\r\n boundary="===============2051661191218566762=="\r\nMIME-Version: 1.0\r\n\r\n--===============2051661191218566762==\r\nContent-Type: text/plain; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\nClick the link below to reset your password:\r\n\r\nhttp://localhost/reset/WyIxIiwiOTBkYWVjMThhYjhjNzdiZDlkMTBlZDg2NzlhOGUwOTYiXQ.ClWvLA.O9lqPpblE2PQrCi4vPkPttblsQU\r\n--===============2051661191218566762==\r\nContent-Type: text/html; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\n<p><a href="http://localhost/reset/WyIxIiwiOTBkYWVjMThhYjhjNzdiZDlkMTBlZDg2NzlhOGUwOTYiXQ.ClWvLA.O9lqPpblE2PQrCi... here to reset your password</a></p>\r\n--===============2051661191218566762==--\r\n\r\n--===============8112721885542338143==--\r\n.\r\n'
reply: '250 2.0.0 OK 1467227566 q6sm5053521wjt.46 - gsmtp\r\n'
reply: retcode (250); Msg: 2.0.0 OK 1467227566 q6sm5053521wjt.46 - gsmtp
data: (250, '2.0.0 OK 1467227566 q6sm5053521wjt.46 - gsmtp')
send: 'quit\r\n'
reply: '221 2.0.0 closing connection q6sm5053521wjt.46 - gsmtp\r\n'
reply: retcode (221); Msg: 2.0.0 closing connection q6sm5053521wjt.46 - gsmtp
send: 'ehlo 22.0.168.192.in-addr.arpa\r\n'
reply: '250-smtp.gmail.com at your service, [2a02:c7f:6c05:9c00:fc72:48f0:30fb:fe27]\r\n'
reply: '250-SIZE 35882577\r\n'
reply: '250-8BITMIME\r\n'
reply: '250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-CHUNKING\r\n'
reply: '250 SMTPUTF8\r\n'
reply: retcode (250); Msg: smtp.gmail.com at your service, [2a02:c7f:6c05:9c00:fc72:48f0:30fb:fe27]
SIZE 35882577
8BITMIME
AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
ENHANCEDSTATUSCODES
PIPELINING
CHUNKING
SMTPUTF8
send: 'AUTH PLAIN AGRhdmUucGFnZUBlbnRlcnByaXNlZGIuY29tAFAwd2VyQ29ubmVjdA==\r\n'
reply: '235 2.7.0 Accepted\r\n'
reply: retcode (235); Msg: 2.7.0 Accepted
send: u'mail FROM:<no-reply@localhost> size=1065\r\n'
reply: '250 2.1.0 OK x194sm2818814wmf.13 - gsmtp\r\n'
reply: retcode (250); Msg: 2.1.0 OK x194sm2818814wmf.13 - gsmtp
send: u'rcpt TO:<[email protected]>\r\n'
reply: '250 2.1.5 OK x194sm2818814wmf.13 - gsmtp\r\n'
reply: retcode (250); Msg: 2.1.5 OK x194sm2818814wmf.13 - gsmtp
send: 'data\r\n'
reply: '354  Go ahead x194sm2818814wmf.13 - gsmtp\r\n'
reply: retcode (354); Msg: Go ahead x194sm2818814wmf.13 - gsmtp
data: (354, 'Go ahead x194sm2818814wmf.13 - gsmtp')
send: 'Content-Type: multipart/mixed; boundary="===============1543246453746814732=="\r\nMIME-Version: 1.0\r\nSubject: Your password for pgAdmin 4 has been changed\r\nFrom: no-reply@localhost\r\nTo: [email protected]\r\nDate: Wed, 29 Jun 2016 20:12:47 +0100\r\nMessage-ID: <[email protected]>\r\n\r\n--===============1543246453746814732==\r\nContent-Type: multipart/alternative;\r\n boundary="===============5956468165144037350=="\r\nMIME-Version: 1.0\r\n\r\n--===============5956468165144037350==\r\nContent-Type: text/plain; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\nYour password has been changed\r\nIf you did not change your password, click the link below to reset it.\r\nhttp://localhost/reset\r\n\r\n--===============5956468165144037350==\r\nContent-Type: text/html; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\n<p>Your password has been changed.</p>\r\n<p>If you did not change your password, <a href="http://localhost/reset">click here to reset it</a>.</p>\r\n\r\n--===============5956468165144037350==--\r\n\r\n--===============1543246453746814732==--\r\n.\r\n'
reply: '250 2.0.0 OK 1467227568 x194sm2818814wmf.13 - gsmtp\r\n'
reply: retcode (250); Msg: 2.0.0 OK 1467227568 x194sm2818814wmf.13 - gsmtp
data: (250, '2.0.0 OK 1467227568 x194sm2818814wmf.13 - gsmtp')
send: 'quit\r\n'
reply: '221 2.0.0 closing connection x194sm2818814wmf.13 - gsmtp\r\n'
reply: retcode (221); Msg: 2.0.0 closing connection x194sm2818814wmf.13 - gsmtp
send: 'ehlo 22.0.168.192.in-addr.arpa\r\n'
reply: '250-smtp.gmail.com at your service, [2a02:c7f:6c05:9c00:fc72:48f0:30fb:fe27]\r\n'
reply: '250-SIZE 35882577\r\n'
reply: '250-8BITMIME\r\n'
reply: '250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-CHUNKING\r\n'
reply: '250 SMTPUTF8\r\n'
reply: retcode (250); Msg: smtp.gmail.com at your service, [2a02:c7f:6c05:9c00:fc72:48f0:30fb:fe27]
SIZE 35882577
8BITMIME
AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
ENHANCEDSTATUSCODES
PIPELINING
CHUNKING
SMTPUTF8
send: 'AUTH PLAIN AGRhdmUucGFnZUBlbnRlcnByaXNlZGIuY29tAFAwd2VyQ29ubmVjdA==\r\n'
reply: '235 2.7.0 Accepted\r\n'
reply: retcode (235); Msg: 2.7.0 Accepted
send: u'mail FROM:<no-reply@localhost> size=1065\r\n'
reply: '250 2.1.0 OK j4sm5081037wjg.20 - gsmtp\r\n'
reply: retcode (250); Msg: 2.1.0 OK j4sm5081037wjg.20 - gsmtp
send: u'rcpt TO:<[email protected]>\r\n'
reply: '250 2.1.5 OK j4sm5081037wjg.20 - gsmtp\r\n'
reply: retcode (250); Msg: 2.1.5 OK j4sm5081037wjg.20 - gsmtp
send: 'data\r\n'
reply: '354  Go ahead j4sm5081037wjg.20 - gsmtp\r\n'
reply: retcode (354); Msg: Go ahead j4sm5081037wjg.20 - gsmtp
data: (354, 'Go ahead j4sm5081037wjg.20 - gsmtp')
send: 'Content-Type: multipart/mixed; boundary="===============2557152597075911208=="\r\nMIME-Version: 1.0\r\nSubject: Your password for pgAdmin 4 has been changed\r\nFrom: no-reply@localhost\r\nTo: [email protected]\r\nDate: Wed, 29 Jun 2016 20:12:49 +0100\r\nMessage-ID: <[email protected]>\r\n\r\n--===============2557152597075911208==\r\nContent-Type: multipart/alternative;\r\n boundary="===============6228397783242031757=="\r\nMIME-Version: 1.0\r\n\r\n--===============6228397783242031757==\r\nContent-Type: text/plain; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\nYour password has been changed\r\nIf you did not change your password, click the link below to reset it.\r\nhttp://localhost/reset\r\n\r\n--===============6228397783242031757==\r\nContent-Type: text/html; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\n<p>Your password has been changed.</p>\r\n<p>If you did not change your password, <a href="http://localhost/reset">click here to reset it</a>.</p>\r\n\r\n--===============6228397783242031757==--\r\n\r\n--===============2557152597075911208==--\r\n.\r\n'
reply: '250 2.0.0 OK 1467227570 j4sm5081037wjg.20 - gsmtp\r\n'
reply: retcode (250); Msg: 2.0.0 OK 1467227570 j4sm5081037wjg.20 - gsmtp
data: (250, '2.0.0 OK 1467227570 j4sm5081037wjg.20 - gsmtp')
send: 'quit\r\n'
reply: '221 2.0.0 closing connection j4sm5081037wjg.20 - gsmtp\r\n'
reply: retcode (221); Msg: 2.0.0 closing connection j4sm5081037wjg.20 - gsmtp
2016-06-29 20:12:50,299: INFO	pgadmin:	Connection Request for server#3
2016-06-29 20:12:50,307: SQL	pgadmin:	Execute (scalar) for server #3 - DB:postgres (Query-id: 6379209):

SET DateStyle=ISO;
SET client_min_messages=notice;
SET bytea_output=escape;
SET client_encoding='UNICODE';
2016-06-29 20:12:50,307: SQL	pgadmin:	Execute (scalar) for server #3 - DB:postgres (Query-id: 6224014):
SELECT version()
2016-06-29 20:12:50,308: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 9082267):

SELECT
    db.oid as did, db.datname, db.datallowconn, pg_encoding_to_char(db.encoding) AS serverencoding,
    has_database_privilege(db.oid, 'CREATE') as cancreate, datlastsysoid
FROM
    pg_database db
WHERE db.datname = current_database()
2016-06-29 20:12:50,309: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 4390393):

SELECT
    oid as id, rolname as name, rolsuper as is_superuser,
    rolcreaterole as can_create_role, rolcreatedb as can_create_db
FROM
    pg_catalog.pg_roles
WHERE
    rolname = current_user
2016-06-29 20:12:50,311: INFO	pgadmin:	Connection Established for server:                 3 - PostgreSQL 9.4
2016-06-29 20:12:50,311: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 8447701):

                    SELECT CASE WHEN usesuper
                           THEN pg_is_in_recovery()
                           ELSE FALSE
                           END as inrecovery,
                           CASE WHEN usesuper AND pg_is_in_recovery()
                           THEN pg_is_xlog_replay_paused()
                           ELSE FALSE
                           END as isreplaypaused
                    FROM pg_user WHERE usename=current_user
2016-06-29 20:12:50,319: INFO	pgadmin:	Connection Request for server#3
2016-06-29 20:12:50,321: INFO	pgadmin:	Connection Established for server:                 3 - PostgreSQL 9.4
2016-06-29 20:12:50,321: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 1727388):

                    SELECT CASE WHEN usesuper
                           THEN pg_is_in_recovery()
                           ELSE FALSE
                           END as inrecovery,
                           CASE WHEN usesuper AND pg_is_in_recovery()
                           THEN pg_is_xlog_replay_paused()
                           ELSE FALSE
                           END as isreplaypaused
                    FROM pg_user WHERE usename=current_user
2016-06-29 20:12:50,339: SQL	pgadmin:	Execute (scalar) for server #3 - DB:postgres (Query-id: 8901265):
CREATE DATABASE efe08e1
    WITH 
    OWNER = postgres
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1;

2016-06-29 20:12:50,616: SQL	pgadmin:	Execute (scalar) for server #3 - DB:postgres (Query-id: 2154944):
GRANT TEMPORARY ON DATABASE efe08e1 TO postgres;
2016-06-29 20:12:50,619: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 3496660):
SELECT
    db.oid as did, db.datname as name, db.dattablespace AS spcoid,
    spcname, datallowconn, pg_encoding_to_char(encoding) AS encoding,
    pg_get_userbyid(datdba) AS datowner, datcollate, datctype, datconnlimit,
    has_database_privilege(db.oid, 'CREATE') as cancreate,
    current_setting('default_tablespace') AS default_tablespace,
    descr.description as comments,
    (SELECT array_agg(provider || '=' || label) FROM pg_shseclabel sl1 WHERE sl1.objoid=db.oid) AS seclabels,
    array_to_string(datacl::text[], ', ') AS acl
FROM pg_database db
    LEFT OUTER JOIN pg_tablespace ta ON db.dattablespace=ta.OID
    LEFT OUTER JOIN pg_shdescription descr ON (
        db.oid=descr.objoid AND descr.classoid='pg_database'::regclass
    )
WHERE db.datname = 'efe08e1'::text
ORDER BY datname
2016-06-29 20:12:50,628: INFO	pgadmin:	Connection Request for server#3
2016-06-29 20:12:50,631: INFO	pgadmin:	Connection Established for server:                 3 - PostgreSQL 9.4
2016-06-29 20:12:50,631: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 5099329):

                    SELECT CASE WHEN usesuper
                           THEN pg_is_in_recovery()
                           ELSE FALSE
                           END as inrecovery,
                           CASE WHEN usesuper AND pg_is_in_recovery()
                           THEN pg_is_xlog_replay_paused()
                           ELSE FALSE
                           END as isreplaypaused
                    FROM pg_user WHERE usename=current_user
2016-06-29 20:12:50,638: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 590129):

SELECT
    db.oid as did, db.datname, db.datallowconn,
    pg_encoding_to_char(db.encoding) AS serverencoding,
    has_database_privilege(db.oid, 'CREATE') as cancreate, datlastsysoid
FROM
    pg_database db
WHERE db.oid = 158545
2016-06-29 20:12:50,646: INFO	pgadmin:	Connection Request for server#3
2016-06-29 20:12:50,648: INFO	pgadmin:	Connection Established for server:                 3 - PostgreSQL 9.4
2016-06-29 20:12:50,648: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 6138710):

                    SELECT CASE WHEN usesuper
                           THEN pg_is_in_recovery()
                           ELSE FALSE
                           END as inrecovery,
                           CASE WHEN usesuper AND pg_is_in_recovery()
                           THEN pg_is_xlog_replay_paused()
                           ELSE FALSE
                           END as isreplaypaused
                    FROM pg_user WHERE usename=current_user
2016-06-29 20:12:50,657: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 4052321):

SELECT
    db.oid as did, db.datname, db.datallowconn,
    pg_encoding_to_char(db.encoding) AS serverencoding,
    has_database_privilege(db.oid, 'CREATE') as cancreate, datlastsysoid
FROM
    pg_database db
WHERE db.oid = 158545
2016-06-29 20:12:50,663: INFO	pgadmin:	Connection Request for server#3
2016-06-29 20:12:50,665: INFO	pgadmin:	Connection Established for server:                 3 - PostgreSQL 9.4
2016-06-29 20:12:50,666: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 6504564):

                    SELECT CASE WHEN usesuper
                           THEN pg_is_in_recovery()
                           ELSE FALSE
                           END as inrecovery,
                           CASE WHEN usesuper AND pg_is_in_recovery()
                           THEN pg_is_xlog_replay_paused()
                           ELSE FALSE
                           END as isreplaypaused
                    FROM pg_user WHERE usename=current_user
2016-06-29 20:12:50,672: SQL	pgadmin:	Execute (dict) for server #3 - DB:postgres (Query-id: 361546):

SELECT
    db.oid as did, db.datname, db.datallowconn,
    pg_encoding_to_char(db.encoding) AS serverencoding,
    has_database_privilege(db.oid, 'CREATE') as cancreate, datlastsysoid
FROM
    pg_database db
WHERE db.oid = 158545
(pgadmin4)piranha:pgadmin4 dpage$ 

diff --git a/.gitignore b/.gitignore
index ec82803..b58ab47 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,7 @@ runtime/ui_BrowserWindow.h
 runtime/.qmake.stash
 web/config_local.py
 web/regression/test_config.json
+web/regression/test_advanced_config.json
 pgadmin4.log
 *.swp
 *.swo
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py
new file mode 100644
index 0000000..60ed4c7
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py
@@ -0,0 +1,16 @@
+# ##########################################################################
+#
+# #pgAdmin 4 - PostgreSQL Tools
+#
+# #Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# #This software is released under the PostgreSQL Licence
+#
+# ##########################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class DatabaseGenerateTestCase(BaseTestGenerator):
+
+    def runTest(self):
+        return
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py
new file mode 100644
index 0000000..4278383
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py
@@ -0,0 +1,101 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, advance_config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+import pickle
+import uuid
+import os
+from regression.test_utils import get_ids
+
+
+class DatabaseAddTestCase(LoginTestCase):
+    """
+    This class will check server group node present on the object browser's
+    tree node by response code.
+    """
+    priority = 7
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node URL', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add database under 1st server of tree node. """
+
+        srv_id = get_ids()
+
+        server_id = srv_id["sid"][0]
+        srv_grp = config_data['test_server_group']
+
+        response = self.tester.post('browser/server/connect/' + str(srv_grp) +
+                                    '/' + server_id,
+                                    data=dict(
+                                    password=config_data
+                                    ['test_server_credentials'][0]
+                                    ['test_db_password']),
+                                    follow_redirects=True)
+
+        self.assertEquals(response.status_code, 200)
+
+        srv_connect = json.loads(response.data.decode())
+
+        if srv_connect['data']['connected']:
+
+            data = {
+                     "datacl": advance_config_data['test_add_database_data'][0]
+                     ['test_privileges_acl'],
+                     "datconnlimit": advance_config_data
+                     ['test_add_database_data'][0]['test_conn_limit'],
+                     "datowner": advance_config_data
+                     ['test_add_database_data'][0]['test_owner'],
+                     "deffuncacl": advance_config_data
+                     ['test_add_database_data'][0]['test_fun_acl'],
+                     "defseqacl": advance_config_data
+                     ['test_add_database_data'][0]['test_seq_acl'],
+                     "deftblacl": advance_config_data
+                     ['test_add_database_data'][0]['test_tbl_acl'],
+                     "deftypeacl": advance_config_data
+                     ['test_add_database_data'][0]['test_type_acl'],
+                     "encoding": advance_config_data
+                     ['test_add_database_data'][0]['test_encoding'],
+                     "name": str(uuid.uuid4())[1:8],
+                     "privileges": advance_config_data
+                     ['test_add_database_data'][0]['test_privileges'],
+                     "securities": advance_config_data
+                     ['test_add_database_data'][0]['test_securities'],
+                     "variables": advance_config_data
+                     ['test_add_database_data'][0]['test_variables']
+                    }
+
+            db_response = self.tester.post(self.url + str(srv_grp) + "/" +
+                                           server_id + "/",
+                                           data=json.dumps(data),
+                                           content_type='html/json')
+
+            self.assertTrue(db_response.status_code, 200)
+
+            respdata = json.loads(db_response.data.decode())
+
+            db_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+
+                exst_server_id = open(pickle_path, 'rb')
+
+                tol_server_id = pickle.load(exst_server_id)
+                pickle_id_dict = tol_server_id
+
+                pickle_id_dict["did"].append(db_id)
+
+                db_output = open(pickle_path, 'wb')
+                pickle.dump(pickle_id_dict, db_output)
+                db_output.close()
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py
new file mode 100644
index 0000000..ca8ed9b
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py
@@ -0,0 +1,45 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_nodes import test_getnodes
+from regression.test_utils import get_ids
+
+
+class DatabaseDeleteTestCase(LoginTestCase):
+    """ This class will delete the database under last added server. """
+
+    priority = 98
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node URL', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete the database."""
+
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if len(db_con) == 0:
+            raise Exception("No database(s) to delete.")
+
+        response = self.tester.delete(self.url + str(srv_grp) + '/' +
+                                      str(server_id) + '/' + str(db_id),
+                                      follow_redirects=True)
+
+        respdata = json.loads(response.data.decode())
+        self.assertTrue(respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py
new file mode 100644
index 0000000..e931985
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py
@@ -0,0 +1,43 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_nodes import test_getnodes
+from regression.test_utils import get_ids
+
+
+class DatabasesGetTestCase(LoginTestCase):
+    """
+    This class will fetch added database under server node.
+    """
+    priority = 8
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node URL', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch added database. """
+
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id),
+                                       follow_redirects=True)
+
+            self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py
new file mode 100644
index 0000000..ad83603
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py
@@ -0,0 +1,51 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data,  advance_config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class DatabasesUpdateTestCase(LoginTestCase):
+    """
+    This class will update the database under last added server.
+    """
+    priority = 9
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update the comments field of database."""
+
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            data = {
+                "comments": advance_config_data["test_db_update_data"][0]
+                ["test_comment"],
+                "id": db_id
+                   }
+
+            put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                           str(server_id) + '/' + str(db_id),
+                                           data=json.dumps(data),
+                                           follow_redirects=True)
+
+            self.assertEquals(put_response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/tests/__init__.py
index 28cdb94..4fd2066 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/__init__.py
@@ -12,4 +12,4 @@ from pgadmin.utils.route import BaseTestGenerator
 
 class ServerGenerateTestCase(BaseTestGenerator):
     def runTest(self):
-        print ("In ServerGenerateTestCase...")
+        return
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py
index 0af13d3..7499b85 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py
@@ -8,16 +8,14 @@
 # ##########################################################################
 
 import json
-
+import pickle
+import os
 from pgadmin.browser.tests.test_login import LoginTestCase
-from regression.config import config_data
+from regression.config import config_data, pickle_path
 
 
 class ServersAddTestCase(LoginTestCase):
-    """
-    This class will add the servers under default server group and verify with
-    server's name.
-    """
+    """ This class will add the servers under default server group. """
 
     priority = 4
 
@@ -27,14 +25,19 @@ class ServersAddTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will add the server under default server group.
-        Verify the added server with response code as well as server name.
-        """
+        """ This function will add the server under default server group."""
+
+        # Storing parent id's into pickle dict
+        pickle_id_dict = \
+            {
+                "sid": [],  # server
+                "did": []   # database
+            }
 
         srv_grp = config_data['test_server_group']
 
         for srv in config_data['test_server_credentials']:
+
             data = {"name": srv['test_name'],
                     "comment": "",
                     "host": srv['test_host'],
@@ -44,10 +47,20 @@ class ServersAddTestCase(LoginTestCase):
                     "role": "",
                     "sslmode": srv['test_sslmode']}
 
-            url = self.url + str(srv_grp) + "/"
-
-            response = self.tester.post(url, data=json.dumps(data),
+            response = self.tester.post(self.url + str(srv_grp) + "/",
+                                        data=json.dumps(data),
                                         content_type='html/json')
+
             self.assertTrue(response.status_code, 200)
-            respdata = json.loads(response.data)
-            self.assertTrue(respdata['node']['label'], srv['test_name'])
+            respdata = json.loads(response.data.decode())
+
+            server_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                pickle_id_dict = pickle.load(exst_server_id)
+
+            pickle_id_dict["sid"].append(server_id)
+            output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, output)
+            output.close()
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py
index 329d74f..997308e 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py
@@ -8,17 +8,14 @@
 # ##################################################################
 
 import json
-
 from pgadmin.browser.tests.test_login import LoginTestCase
 from regression.config import config_data
 
 
-class ServersDeleteTestCase(LoginTestCase):
-    """
-    This class will check server node present on the object browser's tree node
-    by response code.
-    """
-    priority = 7
+class ServerDeleteTestCase(LoginTestCase):
+    """ This class will delete the last server present under tree node."""
+
+    priority = 99
 
     scenarios = [
         # Fetching the default url for server node
@@ -26,32 +23,22 @@ class ServersDeleteTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will get all available servers under object browser
-        and delete the servers using server id.
-        """
+        """ This function will get all available servers under object browser
+        and delete the last server using server id."""
 
         srv_grp = config_data['test_server_group']
 
-        for srv in config_data['test_server_credentials']:
-
-            data = {"name": srv['test_name'],
-                    "host": srv['test_host'],
-                    "port": srv['test_db_port'],
-                    "db": srv['test_maintenance_db'],
-                    "username": srv['test_db_username'],
-                    "role": "",
-                    "sslmode": srv['test_sslmode']}
+        url = self.url + str(srv_grp) + "/"
 
-            url = self.url + str(srv_grp) + "/"
+        response = self.tester.get(url)
+        respdata = json.loads(response.data.decode())
 
-            response = self.tester.get(url, data=json.dumps(data),
-                                       content_type='html/json')
-            self.assertTrue(response.status_code, 200)
-            respdata = json.loads(response.data)
+        if len(respdata) == 0:
+            raise Exception("No server(s) to delete.")
 
-            for server in respdata:
-                response = self.tester.delete(url + json.dumps(server['id']))
-                self.assertTrue(response.status_code, 200)
-                respdata = json.loads(response.data)
-                self.assertTrue(respdata['success'], 1)
+        # delete last server
+        server = respdata[-1]
+        response = self.tester.delete(url + str(server['id']))
+        self.assertTrue(response.status_code, 200)
+        respdata = json.loads(response.data.decode())
+        self.assertTrue(respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py
index 050843e..163fef3 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py
@@ -7,15 +7,14 @@
 #
 # ##########################################################################
 
-import json
-
 from pgadmin.browser.tests.test_login import LoginTestCase
 from regression.config import config_data
+from regression.test_utils import get_ids
 
 
 class ServersGetTestCase(LoginTestCase):
     """
-    This class will check server node present on the object browser's tree node
+    This class will fetch added servers under default server group
     by response code.
     """
 
@@ -27,23 +26,16 @@ class ServersGetTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will get all available servers present under
-        object browser.
-        """
+        """ This function will fetch the added servers to object browser. """
 
+        all_id = get_ids()
+        server_id = all_id["sid"]
         srv_grp = config_data['test_server_group']
 
-        for srv in config_data['test_server_credentials']:
-            data = {"name": srv['test_name'],
-                    "host": srv['test_host'],
-                    "port": srv['test_db_port'],
-                    "db": srv['test_maintenance_db'],
-                    "username": srv['test_db_username'],
-                    "role": "",
-                    "sslmode": srv['test_sslmode']}
-
-            url = self.url + str(srv_grp) + "/"
-            response = self.tester.get(url, data=json.dumps(data),
+        for srv in server_id:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(srv),
                                        content_type='html/json')
-            self.assertTrue(response.status_code, 200)
+
+            self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py
index 306bb03..f8cef24 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py
@@ -8,16 +8,13 @@
 # ##########################################################################
 
 import json
-
 from pgadmin.browser.tests.test_login import LoginTestCase
 from regression.config import config_data
+from regression.test_utils import get_ids
 
 
-class ServersUpdateTestCase(LoginTestCase):
-    """
-    This class will check server node present on the object browser's tree node
-    by response code.
-    """
+class ServerUpdateTestCase(LoginTestCase):
+    """ This class will update server's comment field. """
 
     priority = 6
 
@@ -27,39 +24,41 @@ class ServersUpdateTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will edit and update the server's comment field
-        by the server id.
-        """
+        """ This function will update the server's comment field. """
 
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
         srv_grp = config_data['test_server_group']
 
-        for srv in config_data['test_server_credentials']:
+        response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                   str(server_id),
+                                   follow_redirects=True)
 
-            data = {"name": srv['test_name'],
-                    "host": srv['test_host'],
-                    "port": srv['test_db_port'],
-                    "db": srv['test_maintenance_db'],
-                    "username": srv['test_db_username'],
-                    "role": "",
-                    "sslmode": srv['test_sslmode']}
+        con_response = self.tester.post('browser/server/connect/{0}/{1}'.format
+                                        (srv_grp, server_id),
+                                        data=dict(password=
+                                                  config_data
+                                                  ['test_server_credentials'][0]
+                                                  ['test_db_password']),
+                                        follow_redirects=True)
 
-            url = self.url + str(srv_grp) + "/"
+        srv_con = json.loads(con_response.data.decode())
 
-            response = self.tester.get(url, data=json.dumps(data),
-                                       content_type='html/json')
+        if len(srv_con) == 0:
+            raise Exception("No Server(s) connected to update.")
 
-            self.assertTrue(response.status_code, 200)
-            respdata = json.loads(response.data)
+        data = \
+            {
+                "comment": config_data
+                ['test_server_update_data']['test_comment'],
+                "id": server_id
+            }
 
-            for server in respdata:
+        put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                       str(server_id), data=json.dumps(data),
+                                       content_type='html/json')
 
-                url = self.url + str(srv_grp) + "/" + json.dumps(server['id'])
+        self.assertEquals(put_response.status_code, 200)
 
-                for server in config_data['test_server_update_data']:
-                    data = {"comment": server['test_comment']}
-                    response = self.tester.put(url, data=json.dumps(data),
-                                               content_type='html/json')
-                    self.assertTrue(response.status_code, 200)
-                    respdata = json.loads(response.data)
-                    self.assertTrue(respdata['success'], 1)
+        respdata = json.loads(put_response.data.decode())
+        self.assertTrue(respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/tests/test_sg_add.py b/web/pgadmin/browser/server_groups/tests/test_sg_add.py
deleted file mode 100644
index e70bb65..0000000
--- a/web/pgadmin/browser/server_groups/tests/test_sg_add.py
+++ /dev/null
@@ -1,36 +0,0 @@
-###########################################################################
-#
-# pgAdmin 4 - PostgreSQL Tools
-#
-# Copyright (C) 2013 - 2016, The pgAdmin Development Team
-# This software is released under the PostgreSQL Licence
-#
-###########################################################################
-
-import json
-
-from pgadmin.browser.tests.test_login import LoginTestCase
-from regression.config import config_data
-
-
-class SgNodeTestCase(LoginTestCase):
-    """
-     This class will check available server groups in pgAdmin.
-    """
-
-    priority = 1
-
-    scenarios = [
-        # Fetching the default url for server group node
-        ('Check Server Group Node', dict(url='/browser/server-group/obj/'))
-    ]
-
-    def runTest(self):
-        """This function will check available server groups."""
-
-        i = config_data['test_server_group']
-
-        response = self.tester.get(self.url + str(i), content_type='html/json')
-        self.assertTrue(response.status_code, 200)
-        respdata = json.loads(response.data)
-        self.assertTrue(respdata['id'], i)
diff --git a/web/pgadmin/browser/server_groups/tests/test_sg_get.py b/web/pgadmin/browser/server_groups/tests/test_sg_get.py
new file mode 100644
index 0000000..c552d8e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/tests/test_sg_get.py
@@ -0,0 +1,36 @@
+###########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+###########################################################################
+
+import json
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.config import config_data
+
+
+class SgGetTestCase(LoginTestCase):
+    """
+     This class will check available server groups in pgAdmin.
+    """
+
+    priority = 3
+
+    scenarios = [
+        # Fetching the default url for server group node
+        ('Check Server Group Node', dict(url='/browser/server-group/obj/'))
+    ]
+
+    def runTest(self):
+        """This function will check available server groups."""
+
+        srv_grp = config_data['test_server_group']
+
+        response = self.tester.get(self.url + str(srv_grp),
+                                   content_type='html/json')
+        self.assertEquals(response.status_code, 200)
+        respdata = json.loads(response.data.decode())
+        self.assertTrue(respdata['id'], srv_grp)
diff --git a/web/pgadmin/browser/tests/__init__.py b/web/pgadmin/browser/tests/__init__.py
index 2381efd..4470711 100644
--- a/web/pgadmin/browser/tests/__init__.py
+++ b/web/pgadmin/browser/tests/__init__.py
@@ -11,5 +11,6 @@ from pgadmin.utils.route import BaseTestGenerator
 
 
 class BrowserGenerateTestCase(BaseTestGenerator):
+
     def runTest(self):
-        print ("In BrowserGenerateTestCase...")
+        return
diff --git a/web/pgadmin/browser/tests/test_change_password.py b/web/pgadmin/browser/tests/test_change_password.py
index dedb7d9..5c4930d 100644
--- a/web/pgadmin/browser/tests/test_change_password.py
+++ b/web/pgadmin/browser/tests/test_change_password.py
@@ -85,10 +85,10 @@ class ChangePasswordTestCase(LoginTestCase):
         """This function will check change password functionality."""
 
         response = self.tester.get('/change', follow_redirects=True)
-        self.assertIn('pgAdmin 4 Password Change', response.data)
+        self.assertIn('pgAdmin 4 Password Change', response.data.decode('utf8'))
         response = self.tester.post('/change', data=dict(
             password=self.password,
             new_password=self.new_password,
             new_password_confirm=self.new_password_confirm),
                                     follow_redirects=True)
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf8'))
diff --git a/web/pgadmin/browser/tests/test_login.py b/web/pgadmin/browser/tests/test_login.py
index 7c2b796..d272a63 100644
--- a/web/pgadmin/browser/tests/test_login.py
+++ b/web/pgadmin/browser/tests/test_login.py
@@ -8,7 +8,6 @@
 ##########################################################################
 
 import uuid
-
 from pgadmin.utils.route import BaseTestGenerator
 from regression.config import config_data
 
@@ -67,7 +66,9 @@ class LoginTestCase(BaseTestGenerator):
                    ['test_login_username']),
             password=(config_data['pgAdmin4_login_credentials']
                       ['test_login_password']),
-            respdata='You are currently running version'))
+            respdata='Gravatar image for %s' %
+                     config_data['pgAdmin4_login_credentials']
+                     ['test_login_username']))
     ]
 
     def runTest(self):
@@ -76,4 +77,4 @@ class LoginTestCase(BaseTestGenerator):
         response = self.tester.post('/login', data=dict(
             email=self.email, password=self.password),
                                     follow_redirects=True)
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf8'))
diff --git a/web/pgadmin/browser/tests/test_logout.py b/web/pgadmin/browser/tests/test_logout.py
index 8971e72..d9611ae 100644
--- a/web/pgadmin/browser/tests/test_logout.py
+++ b/web/pgadmin/browser/tests/test_logout.py
@@ -14,14 +14,13 @@ from regression.config import config_data
 class LogoutTest(LoginTestCase):
     """
     This class verifies the logout functionality; provided the user is already
-    logged-in. Dictionary parameters define the scenario appended by test
-    name.
+    logged-in.
     """
 
-    priority = 3
+    priority = 100
 
     scenarios = [
-        # This test case validate the logout page
+        # This test case validate the logout page.
         ('Logging Out', dict(respdata='Redirecting...'))
     ]
 
@@ -29,7 +28,7 @@ class LogoutTest(LoginTestCase):
         """This function checks the logout functionality."""
 
         response = self.tester.get('/logout')
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf8'))
 
     def tearDown(self):
         """
diff --git a/web/pgadmin/browser/tests/test_reset_password.py b/web/pgadmin/browser/tests/test_reset_password.py
index 030b182..31a3992 100644
--- a/web/pgadmin/browser/tests/test_reset_password.py
+++ b/web/pgadmin/browser/tests/test_reset_password.py
@@ -41,8 +41,9 @@ class ResetPasswordTestCase(BaseTestGenerator):
         """This function checks reset password functionality."""
 
         response = self.tester.get('/reset')
-        self.assertIn('Recover pgAdmin 4 Password', response.data)
+        self.assertIn('Recover pgAdmin 4 Password',
+                      response.data.decode('utf8'))
         response = self.tester.post(
             '/reset', data=dict(email=self.email),
             follow_redirects=True)
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf8'))
diff --git a/web/pgadmin/utils/route.py b/web/pgadmin/utils/route.py
index fb9de69..e439965 100644
--- a/web/pgadmin/utils/route.py
+++ b/web/pgadmin/utils/route.py
@@ -52,7 +52,10 @@ class TestsGeneratorRegistry(ABCMeta):
         from werkzeug.utils import find_modules
 
         for module_name in find_modules(pkg, False, True):
-            module = import_module(module_name)
+            try:
+                module = import_module(module_name)
+            except ImportError:
+                pass
 
 
 import six
diff --git a/web/regression/README b/web/regression/README
index e0003e4..0751661 100644
--- a/web/regression/README
+++ b/web/regression/README
@@ -40,23 +40,25 @@ General Information
     3. test_server_get.py
     4. test_server_update.py
 
-2) The pgAdmin4 source tree includes a file template for the server configuration
-   named ‘test_config.json.in' in the ‘pgAdmin4/web/regression’ directory. After
-   completing the pgAdmin4 configuration, you must make a working copy of the
-   template called test_config.json before modifying the file contents.
+2) The pgAdmin4 source tree includes 2 different configuration file templates.
+   One file template for the server configuration named ‘test_config.json.in'
+   and another for test configuration named 'test_advanced_config.json.in' in
+   the ‘pgAdmin4/web/regression’ directory. After completing the pgAdmin4
+   configuration, you must make a working copy of the templates called
+   test_config.json and test_advance_config.json before modifying the file contents.
 
 	2a) The following command copies the test_config.json.in file, creating a
-	    configuration file named test_config.json
+	    configuration file named test_config.json (same way user can copy
+	    test_advance_config.json.in file into test_advance_config.json)
 
             # cp pgadmin4/web/regression/test_config.json.in \
               pgadmin4/web/regression/test_config.json
 
-	2b) After creating the server configuration file, add (or modify)
-	    parameter values as per requirements. The configuration
-	    files are owned by root/user. The pgAdmin4 regression framework expects
-	    to find the files in the  directory '/<installation dir>/web/regression/'.
-	    If you move the file to another location, you must create a symbolic link
-	    that specifies the new location.
+	2b) After creating the server and test configuration file, add (or modify)
+	    parameter values as per requirements. The pgAdmin4 regression framework
+	    expects to find the files in the  directory
+	    '/<installation dir>/web/regression/'. If you move the file to another
+	    location, you must create a symbolic link that specifies the new location.
 
 	2c) Specifying Server Configuration file:
 
@@ -64,6 +66,13 @@ General Information
 	    server details and connection properties as per their local setup. The
 	    test_config file is in json format and property values are case-sensitive.
 
+	2d) Specifying the Test Configuration file:
+
+	    The user can add/change test data as per their need. The
+	    test_advanced_config file is in json format and property values are
+	    case-sensitive.
+
+
 Test Data Details
 -----------------
 
diff --git a/web/regression/config.py b/web/regression/config.py
index bef65fb..80686a1 100644
--- a/web/regression/config.py
+++ b/web/regression/config.py
@@ -14,3 +14,8 @@ root = os.path.dirname(os.path.realpath(__file__))
 
 with open(root + '/test_config.json') as data_file:
     config_data = json.load(data_file)
+
+with open(root + '/test_advanced_config.json') as data_file:
+    advance_config_data = json.load(data_file)
+
+pickle_path = os.path.join(root, 'parent_id.pkl')
diff --git a/web/regression/parent_id.pkl b/web/regression/parent_id.pkl
new file mode 100644
index 0000000..f4ab4ee
--- /dev/null
+++ b/web/regression/parent_id.pkl
@@ -0,0 +1,14 @@
+(dp0
+S'did'
+p1
+(lp2
+I158545
+aI158546
+asS'sid'
+p3
+(lp4
+V3
+p5
+aV5
+p6
+as.
\ No newline at end of file
diff --git a/web/regression/test_advanced_config.json.in b/web/regression/test_advanced_config.json.in
new file mode 100644
index 0000000..3729bcb
--- /dev/null
+++ b/web/regression/test_advanced_config.json.in
@@ -0,0 +1,105 @@
+{
+  "test_add_database_data": [
+   {
+    "test_privileges_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "C",
+            "privilege": true,
+            "with_grant": true
+          },
+          {
+            "privilege_type": "T",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_conn_limit": -1,
+    "test_owner": "postgres",
+    "test_fun_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "X",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_seq_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "r",
+            "privilege": true,
+            "with_grant": false
+          },
+          {
+            "privilege_type": "w",
+            "privilege": true,
+            "with_grant": false
+          },
+          {
+            "privilege_type": "U",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_tbl_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "a",
+            "privilege": true,
+            "with_grant": true
+          },
+          {
+            "privilege_type": "r",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_type_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "U",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_encoding": "UTF8",
+    "test_name": "test_db_automation",
+    "test_privileges": [],
+    "test_securities": [],
+    "test_variables": []
+  }
+ ],
+
+  "test_db_update_data": [
+  {
+      "test_comment": "This is db update comment"
+  }
+ ]
+
+}
diff --git a/web/regression/test_nodes.py b/web/regression/test_nodes.py
new file mode 100644
index 0000000..b3fd5ef
--- /dev/null
+++ b/web/regression/test_nodes.py
@@ -0,0 +1,42 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+import json
+from regression.test_utils import get_ids
+
+
+def test_getnodes(node=None):
+    # Connect to server and database.
+
+    if not node:
+        return None
+
+    all_id = get_ids()
+
+    server_id = all_id["sid"][0]
+    db_id = all_id["did"][0]
+    srv_grp = config_data['test_server_group']
+
+    # Connect to server
+    response = node.tester.post('browser/server/connect/{0}/{1}'.format
+                                (srv_grp, server_id),
+                                data=dict(password=config_data
+                                ['test_server_credentials'][0]
+                                ['test_db_password']), follow_redirects=True)
+
+    # Connect to database
+    con_response = node.tester.post('browser/database/connect/'
+                                    '{0}/{1}/{2}'.format
+                                    (srv_grp, server_id, db_id),
+                                    follow_redirects=True)
+
+    db_con = json.loads(con_response.data.decode())
+
+    return db_con
diff --git a/web/regression/test_utils.py b/web/regression/test_utils.py
new file mode 100644
index 0000000..c68744f
--- /dev/null
+++ b/web/regression/test_utils.py
@@ -0,0 +1,20 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+import pickle
+from regression.config import pickle_path
+
+
+def get_ids(url=pickle_path):
+    # This function will read parent nodes id's from pickle and return it.
+
+    output = open(url, 'rb')
+    ids = pickle.load(output)
+    output.close()
+    return ids
diff --git a/web/regression/testsuite.py b/web/regression/testsuite.py
index 6e6fb0c..9f076c2 100644
--- a/web/regression/testsuite.py
+++ b/web/regression/testsuite.py
@@ -13,7 +13,8 @@ them to TestSuite. """
 import os
 import sys
 import unittest
-
+import operator
+import logging
 from testscenarios.scenarios import generate_scenarios
 
 # We need to include the root directory in sys.path to ensure that we can
@@ -24,6 +25,13 @@ root = os.path.dirname(current_path)
 if sys.path[0] != root:
     sys.path.insert(0, root)
 
+import config
+
+# Get the config database schema version. We store this in pgadmin.model
+# as it turns out that putting it in the config files isn't a great idea
+from pgadmin.model import SCHEMA_VERSION
+config.SETTINGS_SCHEMA_VERSION = SCHEMA_VERSION
+
 from pgadmin import create_app
 
 # Create the app!
@@ -45,6 +53,22 @@ TestsGeneratorRegistry.load_generators('pgadmin')
 # application. We can trigger test request to the application.
 test_client = app.test_client()
 
+class StreamToLogger(object):
+    """
+    Fake file-like stream object that redirects writes to a logger instance.
+    """
+    def __init__(self, logger, log_level=logging.INFO):
+        self.logger = logger
+        self.log_level = log_level
+        self.linebuf = ''
+
+    def write(self, buf):
+        for line in buf.rstrip().splitlines():
+            self.logger.log(self.log_level, line.rstrip())
+
+    def flush(self):
+        pass
+
 
 def suite():
     """ Defining test suite which will execute all the testcases present in
@@ -59,6 +83,8 @@ def suite():
 
         modules.insert(gen.priority, gen)
 
+    modules.sort(key=operator.attrgetter('priority'))
+
     for m in modules:
         obj = m()
         obj.setTestClient(test_client)
@@ -69,5 +95,25 @@ def suite():
 
 
 if __name__ == '__main__':
+
+    print("Please check output in file: logger.log placed at "
+          ".../pgadmin4/web/regression")
+
+    logging.basicConfig(level=logging.DEBUG,
+                        format='%(asctime)s:%(levelname)s:%(name)s:%(message)s',
+                        filename="logger.log",
+                        filemode='w'
+                        )
+
+    stdout_logger = logging.getLogger('STDOUT')
+    sl = StreamToLogger(stdout_logger, logging.INFO)
+    sys.stdout = sl
+
+    stderr_logger = logging.getLogger('STDERR')
+    sl = StreamToLogger(stderr_logger, logging.ERROR)
+    sys.stderr = sl
+
     suite = suite()
-    tests = unittest.TextTestRunner(descriptions=True, verbosity=2).run(suite)
+    tests = unittest.TextTestRunner(descriptions=True, verbosity=2,
+                                    stream=sys.stdout).run(suite)
+    os.remove("parent_id.pkl")


-- 
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers


Attachments:

  [text/plain] stdout.txt (186.3K, 2-stdout.txt)
  download

  [application/octet-stream] logger.log (30.7K, 3-logger.log)
  download

  [text/plain] regression.diff (41.1K, 4-regression.diff)
  download | inline diff:
diff --git a/.gitignore b/.gitignore
index ec82803..b58ab47 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,7 @@ runtime/ui_BrowserWindow.h
 runtime/.qmake.stash
 web/config_local.py
 web/regression/test_config.json
+web/regression/test_advanced_config.json
 pgadmin4.log
 *.swp
 *.swo
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py
new file mode 100644
index 0000000..60ed4c7
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py
@@ -0,0 +1,16 @@
+# ##########################################################################
+#
+# #pgAdmin 4 - PostgreSQL Tools
+#
+# #Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# #This software is released under the PostgreSQL Licence
+#
+# ##########################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class DatabaseGenerateTestCase(BaseTestGenerator):
+
+    def runTest(self):
+        return
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py
new file mode 100644
index 0000000..4278383
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py
@@ -0,0 +1,101 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, advance_config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+import pickle
+import uuid
+import os
+from regression.test_utils import get_ids
+
+
+class DatabaseAddTestCase(LoginTestCase):
+    """
+    This class will check server group node present on the object browser's
+    tree node by response code.
+    """
+    priority = 7
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node URL', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add database under 1st server of tree node. """
+
+        srv_id = get_ids()
+
+        server_id = srv_id["sid"][0]
+        srv_grp = config_data['test_server_group']
+
+        response = self.tester.post('browser/server/connect/' + str(srv_grp) +
+                                    '/' + server_id,
+                                    data=dict(
+                                    password=config_data
+                                    ['test_server_credentials'][0]
+                                    ['test_db_password']),
+                                    follow_redirects=True)
+
+        self.assertEquals(response.status_code, 200)
+
+        srv_connect = json.loads(response.data.decode())
+
+        if srv_connect['data']['connected']:
+
+            data = {
+                     "datacl": advance_config_data['test_add_database_data'][0]
+                     ['test_privileges_acl'],
+                     "datconnlimit": advance_config_data
+                     ['test_add_database_data'][0]['test_conn_limit'],
+                     "datowner": advance_config_data
+                     ['test_add_database_data'][0]['test_owner'],
+                     "deffuncacl": advance_config_data
+                     ['test_add_database_data'][0]['test_fun_acl'],
+                     "defseqacl": advance_config_data
+                     ['test_add_database_data'][0]['test_seq_acl'],
+                     "deftblacl": advance_config_data
+                     ['test_add_database_data'][0]['test_tbl_acl'],
+                     "deftypeacl": advance_config_data
+                     ['test_add_database_data'][0]['test_type_acl'],
+                     "encoding": advance_config_data
+                     ['test_add_database_data'][0]['test_encoding'],
+                     "name": str(uuid.uuid4())[1:8],
+                     "privileges": advance_config_data
+                     ['test_add_database_data'][0]['test_privileges'],
+                     "securities": advance_config_data
+                     ['test_add_database_data'][0]['test_securities'],
+                     "variables": advance_config_data
+                     ['test_add_database_data'][0]['test_variables']
+                    }
+
+            db_response = self.tester.post(self.url + str(srv_grp) + "/" +
+                                           server_id + "/",
+                                           data=json.dumps(data),
+                                           content_type='html/json')
+
+            self.assertTrue(db_response.status_code, 200)
+
+            respdata = json.loads(db_response.data.decode())
+
+            db_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+
+                exst_server_id = open(pickle_path, 'rb')
+
+                tol_server_id = pickle.load(exst_server_id)
+                pickle_id_dict = tol_server_id
+
+                pickle_id_dict["did"].append(db_id)
+
+                db_output = open(pickle_path, 'wb')
+                pickle.dump(pickle_id_dict, db_output)
+                db_output.close()
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py
new file mode 100644
index 0000000..ca8ed9b
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py
@@ -0,0 +1,45 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_nodes import test_getnodes
+from regression.test_utils import get_ids
+
+
+class DatabaseDeleteTestCase(LoginTestCase):
+    """ This class will delete the database under last added server. """
+
+    priority = 98
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node URL', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete the database."""
+
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if len(db_con) == 0:
+            raise Exception("No database(s) to delete.")
+
+        response = self.tester.delete(self.url + str(srv_grp) + '/' +
+                                      str(server_id) + '/' + str(db_id),
+                                      follow_redirects=True)
+
+        respdata = json.loads(response.data.decode())
+        self.assertTrue(respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py
new file mode 100644
index 0000000..e931985
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py
@@ -0,0 +1,43 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_nodes import test_getnodes
+from regression.test_utils import get_ids
+
+
+class DatabasesGetTestCase(LoginTestCase):
+    """
+    This class will fetch added database under server node.
+    """
+    priority = 8
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node URL', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch added database. """
+
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id),
+                                       follow_redirects=True)
+
+            self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py
new file mode 100644
index 0000000..ad83603
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py
@@ -0,0 +1,51 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data,  advance_config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class DatabasesUpdateTestCase(LoginTestCase):
+    """
+    This class will update the database under last added server.
+    """
+    priority = 9
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update the comments field of database."""
+
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            data = {
+                "comments": advance_config_data["test_db_update_data"][0]
+                ["test_comment"],
+                "id": db_id
+                   }
+
+            put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                           str(server_id) + '/' + str(db_id),
+                                           data=json.dumps(data),
+                                           follow_redirects=True)
+
+            self.assertEquals(put_response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/tests/__init__.py
index 28cdb94..4fd2066 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/__init__.py
@@ -12,4 +12,4 @@ from pgadmin.utils.route import BaseTestGenerator
 
 class ServerGenerateTestCase(BaseTestGenerator):
     def runTest(self):
-        print ("In ServerGenerateTestCase...")
+        return
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py
index 0af13d3..7499b85 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py
@@ -8,16 +8,14 @@
 # ##########################################################################
 
 import json
-
+import pickle
+import os
 from pgadmin.browser.tests.test_login import LoginTestCase
-from regression.config import config_data
+from regression.config import config_data, pickle_path
 
 
 class ServersAddTestCase(LoginTestCase):
-    """
-    This class will add the servers under default server group and verify with
-    server's name.
-    """
+    """ This class will add the servers under default server group. """
 
     priority = 4
 
@@ -27,14 +25,19 @@ class ServersAddTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will add the server under default server group.
-        Verify the added server with response code as well as server name.
-        """
+        """ This function will add the server under default server group."""
+
+        # Storing parent id's into pickle dict
+        pickle_id_dict = \
+            {
+                "sid": [],  # server
+                "did": []   # database
+            }
 
         srv_grp = config_data['test_server_group']
 
         for srv in config_data['test_server_credentials']:
+
             data = {"name": srv['test_name'],
                     "comment": "",
                     "host": srv['test_host'],
@@ -44,10 +47,20 @@ class ServersAddTestCase(LoginTestCase):
                     "role": "",
                     "sslmode": srv['test_sslmode']}
 
-            url = self.url + str(srv_grp) + "/"
-
-            response = self.tester.post(url, data=json.dumps(data),
+            response = self.tester.post(self.url + str(srv_grp) + "/",
+                                        data=json.dumps(data),
                                         content_type='html/json')
+
             self.assertTrue(response.status_code, 200)
-            respdata = json.loads(response.data)
-            self.assertTrue(respdata['node']['label'], srv['test_name'])
+            respdata = json.loads(response.data.decode())
+
+            server_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                pickle_id_dict = pickle.load(exst_server_id)
+
+            pickle_id_dict["sid"].append(server_id)
+            output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, output)
+            output.close()
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py
index 329d74f..997308e 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py
@@ -8,17 +8,14 @@
 # ##################################################################
 
 import json
-
 from pgadmin.browser.tests.test_login import LoginTestCase
 from regression.config import config_data
 
 
-class ServersDeleteTestCase(LoginTestCase):
-    """
-    This class will check server node present on the object browser's tree node
-    by response code.
-    """
-    priority = 7
+class ServerDeleteTestCase(LoginTestCase):
+    """ This class will delete the last server present under tree node."""
+
+    priority = 99
 
     scenarios = [
         # Fetching the default url for server node
@@ -26,32 +23,22 @@ class ServersDeleteTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will get all available servers under object browser
-        and delete the servers using server id.
-        """
+        """ This function will get all available servers under object browser
+        and delete the last server using server id."""
 
         srv_grp = config_data['test_server_group']
 
-        for srv in config_data['test_server_credentials']:
-
-            data = {"name": srv['test_name'],
-                    "host": srv['test_host'],
-                    "port": srv['test_db_port'],
-                    "db": srv['test_maintenance_db'],
-                    "username": srv['test_db_username'],
-                    "role": "",
-                    "sslmode": srv['test_sslmode']}
+        url = self.url + str(srv_grp) + "/"
 
-            url = self.url + str(srv_grp) + "/"
+        response = self.tester.get(url)
+        respdata = json.loads(response.data.decode())
 
-            response = self.tester.get(url, data=json.dumps(data),
-                                       content_type='html/json')
-            self.assertTrue(response.status_code, 200)
-            respdata = json.loads(response.data)
+        if len(respdata) == 0:
+            raise Exception("No server(s) to delete.")
 
-            for server in respdata:
-                response = self.tester.delete(url + json.dumps(server['id']))
-                self.assertTrue(response.status_code, 200)
-                respdata = json.loads(response.data)
-                self.assertTrue(respdata['success'], 1)
+        # delete last server
+        server = respdata[-1]
+        response = self.tester.delete(url + str(server['id']))
+        self.assertTrue(response.status_code, 200)
+        respdata = json.loads(response.data.decode())
+        self.assertTrue(respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py
index 050843e..163fef3 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py
@@ -7,15 +7,14 @@
 #
 # ##########################################################################
 
-import json
-
 from pgadmin.browser.tests.test_login import LoginTestCase
 from regression.config import config_data
+from regression.test_utils import get_ids
 
 
 class ServersGetTestCase(LoginTestCase):
     """
-    This class will check server node present on the object browser's tree node
+    This class will fetch added servers under default server group
     by response code.
     """
 
@@ -27,23 +26,16 @@ class ServersGetTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will get all available servers present under
-        object browser.
-        """
+        """ This function will fetch the added servers to object browser. """
 
+        all_id = get_ids()
+        server_id = all_id["sid"]
         srv_grp = config_data['test_server_group']
 
-        for srv in config_data['test_server_credentials']:
-            data = {"name": srv['test_name'],
-                    "host": srv['test_host'],
-                    "port": srv['test_db_port'],
-                    "db": srv['test_maintenance_db'],
-                    "username": srv['test_db_username'],
-                    "role": "",
-                    "sslmode": srv['test_sslmode']}
-
-            url = self.url + str(srv_grp) + "/"
-            response = self.tester.get(url, data=json.dumps(data),
+        for srv in server_id:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(srv),
                                        content_type='html/json')
-            self.assertTrue(response.status_code, 200)
+
+            self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py
index 306bb03..f8cef24 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py
@@ -8,16 +8,13 @@
 # ##########################################################################
 
 import json
-
 from pgadmin.browser.tests.test_login import LoginTestCase
 from regression.config import config_data
+from regression.test_utils import get_ids
 
 
-class ServersUpdateTestCase(LoginTestCase):
-    """
-    This class will check server node present on the object browser's tree node
-    by response code.
-    """
+class ServerUpdateTestCase(LoginTestCase):
+    """ This class will update server's comment field. """
 
     priority = 6
 
@@ -27,39 +24,41 @@ class ServersUpdateTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will edit and update the server's comment field
-        by the server id.
-        """
+        """ This function will update the server's comment field. """
 
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
         srv_grp = config_data['test_server_group']
 
-        for srv in config_data['test_server_credentials']:
+        response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                   str(server_id),
+                                   follow_redirects=True)
 
-            data = {"name": srv['test_name'],
-                    "host": srv['test_host'],
-                    "port": srv['test_db_port'],
-                    "db": srv['test_maintenance_db'],
-                    "username": srv['test_db_username'],
-                    "role": "",
-                    "sslmode": srv['test_sslmode']}
+        con_response = self.tester.post('browser/server/connect/{0}/{1}'.format
+                                        (srv_grp, server_id),
+                                        data=dict(password=
+                                                  config_data
+                                                  ['test_server_credentials'][0]
+                                                  ['test_db_password']),
+                                        follow_redirects=True)
 
-            url = self.url + str(srv_grp) + "/"
+        srv_con = json.loads(con_response.data.decode())
 
-            response = self.tester.get(url, data=json.dumps(data),
-                                       content_type='html/json')
+        if len(srv_con) == 0:
+            raise Exception("No Server(s) connected to update.")
 
-            self.assertTrue(response.status_code, 200)
-            respdata = json.loads(response.data)
+        data = \
+            {
+                "comment": config_data
+                ['test_server_update_data']['test_comment'],
+                "id": server_id
+            }
 
-            for server in respdata:
+        put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                       str(server_id), data=json.dumps(data),
+                                       content_type='html/json')
 
-                url = self.url + str(srv_grp) + "/" + json.dumps(server['id'])
+        self.assertEquals(put_response.status_code, 200)
 
-                for server in config_data['test_server_update_data']:
-                    data = {"comment": server['test_comment']}
-                    response = self.tester.put(url, data=json.dumps(data),
-                                               content_type='html/json')
-                    self.assertTrue(response.status_code, 200)
-                    respdata = json.loads(response.data)
-                    self.assertTrue(respdata['success'], 1)
+        respdata = json.loads(put_response.data.decode())
+        self.assertTrue(respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/tests/test_sg_add.py b/web/pgadmin/browser/server_groups/tests/test_sg_add.py
deleted file mode 100644
index e70bb65..0000000
--- a/web/pgadmin/browser/server_groups/tests/test_sg_add.py
+++ /dev/null
@@ -1,36 +0,0 @@
-###########################################################################
-#
-# pgAdmin 4 - PostgreSQL Tools
-#
-# Copyright (C) 2013 - 2016, The pgAdmin Development Team
-# This software is released under the PostgreSQL Licence
-#
-###########################################################################
-
-import json
-
-from pgadmin.browser.tests.test_login import LoginTestCase
-from regression.config import config_data
-
-
-class SgNodeTestCase(LoginTestCase):
-    """
-     This class will check available server groups in pgAdmin.
-    """
-
-    priority = 1
-
-    scenarios = [
-        # Fetching the default url for server group node
-        ('Check Server Group Node', dict(url='/browser/server-group/obj/'))
-    ]
-
-    def runTest(self):
-        """This function will check available server groups."""
-
-        i = config_data['test_server_group']
-
-        response = self.tester.get(self.url + str(i), content_type='html/json')
-        self.assertTrue(response.status_code, 200)
-        respdata = json.loads(response.data)
-        self.assertTrue(respdata['id'], i)
diff --git a/web/pgadmin/browser/server_groups/tests/test_sg_get.py b/web/pgadmin/browser/server_groups/tests/test_sg_get.py
new file mode 100644
index 0000000..c552d8e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/tests/test_sg_get.py
@@ -0,0 +1,36 @@
+###########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+###########################################################################
+
+import json
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.config import config_data
+
+
+class SgGetTestCase(LoginTestCase):
+    """
+     This class will check available server groups in pgAdmin.
+    """
+
+    priority = 3
+
+    scenarios = [
+        # Fetching the default url for server group node
+        ('Check Server Group Node', dict(url='/browser/server-group/obj/'))
+    ]
+
+    def runTest(self):
+        """This function will check available server groups."""
+
+        srv_grp = config_data['test_server_group']
+
+        response = self.tester.get(self.url + str(srv_grp),
+                                   content_type='html/json')
+        self.assertEquals(response.status_code, 200)
+        respdata = json.loads(response.data.decode())
+        self.assertTrue(respdata['id'], srv_grp)
diff --git a/web/pgadmin/browser/tests/__init__.py b/web/pgadmin/browser/tests/__init__.py
index 2381efd..4470711 100644
--- a/web/pgadmin/browser/tests/__init__.py
+++ b/web/pgadmin/browser/tests/__init__.py
@@ -11,5 +11,6 @@ from pgadmin.utils.route import BaseTestGenerator
 
 
 class BrowserGenerateTestCase(BaseTestGenerator):
+
     def runTest(self):
-        print ("In BrowserGenerateTestCase...")
+        return
diff --git a/web/pgadmin/browser/tests/test_change_password.py b/web/pgadmin/browser/tests/test_change_password.py
index dedb7d9..5c4930d 100644
--- a/web/pgadmin/browser/tests/test_change_password.py
+++ b/web/pgadmin/browser/tests/test_change_password.py
@@ -85,10 +85,10 @@ class ChangePasswordTestCase(LoginTestCase):
         """This function will check change password functionality."""
 
         response = self.tester.get('/change', follow_redirects=True)
-        self.assertIn('pgAdmin 4 Password Change', response.data)
+        self.assertIn('pgAdmin 4 Password Change', response.data.decode('utf8'))
         response = self.tester.post('/change', data=dict(
             password=self.password,
             new_password=self.new_password,
             new_password_confirm=self.new_password_confirm),
                                     follow_redirects=True)
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf8'))
diff --git a/web/pgadmin/browser/tests/test_login.py b/web/pgadmin/browser/tests/test_login.py
index 7c2b796..d272a63 100644
--- a/web/pgadmin/browser/tests/test_login.py
+++ b/web/pgadmin/browser/tests/test_login.py
@@ -8,7 +8,6 @@
 ##########################################################################
 
 import uuid
-
 from pgadmin.utils.route import BaseTestGenerator
 from regression.config import config_data
 
@@ -67,7 +66,9 @@ class LoginTestCase(BaseTestGenerator):
                    ['test_login_username']),
             password=(config_data['pgAdmin4_login_credentials']
                       ['test_login_password']),
-            respdata='You are currently running version'))
+            respdata='Gravatar image for %s' %
+                     config_data['pgAdmin4_login_credentials']
+                     ['test_login_username']))
     ]
 
     def runTest(self):
@@ -76,4 +77,4 @@ class LoginTestCase(BaseTestGenerator):
         response = self.tester.post('/login', data=dict(
             email=self.email, password=self.password),
                                     follow_redirects=True)
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf8'))
diff --git a/web/pgadmin/browser/tests/test_logout.py b/web/pgadmin/browser/tests/test_logout.py
index 8971e72..d9611ae 100644
--- a/web/pgadmin/browser/tests/test_logout.py
+++ b/web/pgadmin/browser/tests/test_logout.py
@@ -14,14 +14,13 @@ from regression.config import config_data
 class LogoutTest(LoginTestCase):
     """
     This class verifies the logout functionality; provided the user is already
-    logged-in. Dictionary parameters define the scenario appended by test
-    name.
+    logged-in.
     """
 
-    priority = 3
+    priority = 100
 
     scenarios = [
-        # This test case validate the logout page
+        # This test case validate the logout page.
         ('Logging Out', dict(respdata='Redirecting...'))
     ]
 
@@ -29,7 +28,7 @@ class LogoutTest(LoginTestCase):
         """This function checks the logout functionality."""
 
         response = self.tester.get('/logout')
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf8'))
 
     def tearDown(self):
         """
diff --git a/web/pgadmin/browser/tests/test_reset_password.py b/web/pgadmin/browser/tests/test_reset_password.py
index 030b182..31a3992 100644
--- a/web/pgadmin/browser/tests/test_reset_password.py
+++ b/web/pgadmin/browser/tests/test_reset_password.py
@@ -41,8 +41,9 @@ class ResetPasswordTestCase(BaseTestGenerator):
         """This function checks reset password functionality."""
 
         response = self.tester.get('/reset')
-        self.assertIn('Recover pgAdmin 4 Password', response.data)
+        self.assertIn('Recover pgAdmin 4 Password',
+                      response.data.decode('utf8'))
         response = self.tester.post(
             '/reset', data=dict(email=self.email),
             follow_redirects=True)
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf8'))
diff --git a/web/pgadmin/utils/route.py b/web/pgadmin/utils/route.py
index fb9de69..e439965 100644
--- a/web/pgadmin/utils/route.py
+++ b/web/pgadmin/utils/route.py
@@ -52,7 +52,10 @@ class TestsGeneratorRegistry(ABCMeta):
         from werkzeug.utils import find_modules
 
         for module_name in find_modules(pkg, False, True):
-            module = import_module(module_name)
+            try:
+                module = import_module(module_name)
+            except ImportError:
+                pass
 
 
 import six
diff --git a/web/regression/README b/web/regression/README
index e0003e4..0751661 100644
--- a/web/regression/README
+++ b/web/regression/README
@@ -40,23 +40,25 @@ General Information
     3. test_server_get.py
     4. test_server_update.py
 
-2) The pgAdmin4 source tree includes a file template for the server configuration
-   named ‘test_config.json.in' in the ‘pgAdmin4/web/regression’ directory. After
-   completing the pgAdmin4 configuration, you must make a working copy of the
-   template called test_config.json before modifying the file contents.
+2) The pgAdmin4 source tree includes 2 different configuration file templates.
+   One file template for the server configuration named ‘test_config.json.in'
+   and another for test configuration named 'test_advanced_config.json.in' in
+   the ‘pgAdmin4/web/regression’ directory. After completing the pgAdmin4
+   configuration, you must make a working copy of the templates called
+   test_config.json and test_advance_config.json before modifying the file contents.
 
 	2a) The following command copies the test_config.json.in file, creating a
-	    configuration file named test_config.json
+	    configuration file named test_config.json (same way user can copy
+	    test_advance_config.json.in file into test_advance_config.json)
 
             # cp pgadmin4/web/regression/test_config.json.in \
               pgadmin4/web/regression/test_config.json
 
-	2b) After creating the server configuration file, add (or modify)
-	    parameter values as per requirements. The configuration
-	    files are owned by root/user. The pgAdmin4 regression framework expects
-	    to find the files in the  directory '/<installation dir>/web/regression/'.
-	    If you move the file to another location, you must create a symbolic link
-	    that specifies the new location.
+	2b) After creating the server and test configuration file, add (or modify)
+	    parameter values as per requirements. The pgAdmin4 regression framework
+	    expects to find the files in the  directory
+	    '/<installation dir>/web/regression/'. If you move the file to another
+	    location, you must create a symbolic link that specifies the new location.
 
 	2c) Specifying Server Configuration file:
 
@@ -64,6 +66,13 @@ General Information
 	    server details and connection properties as per their local setup. The
 	    test_config file is in json format and property values are case-sensitive.
 
+	2d) Specifying the Test Configuration file:
+
+	    The user can add/change test data as per their need. The
+	    test_advanced_config file is in json format and property values are
+	    case-sensitive.
+
+
 Test Data Details
 -----------------
 
diff --git a/web/regression/config.py b/web/regression/config.py
index bef65fb..80686a1 100644
--- a/web/regression/config.py
+++ b/web/regression/config.py
@@ -14,3 +14,8 @@ root = os.path.dirname(os.path.realpath(__file__))
 
 with open(root + '/test_config.json') as data_file:
     config_data = json.load(data_file)
+
+with open(root + '/test_advanced_config.json') as data_file:
+    advance_config_data = json.load(data_file)
+
+pickle_path = os.path.join(root, 'parent_id.pkl')
diff --git a/web/regression/parent_id.pkl b/web/regression/parent_id.pkl
new file mode 100644
index 0000000..f4ab4ee
--- /dev/null
+++ b/web/regression/parent_id.pkl
@@ -0,0 +1,14 @@
+(dp0
+S'did'
+p1
+(lp2
+I158545
+aI158546
+asS'sid'
+p3
+(lp4
+V3
+p5
+aV5
+p6
+as.
\ No newline at end of file
diff --git a/web/regression/test_advanced_config.json.in b/web/regression/test_advanced_config.json.in
new file mode 100644
index 0000000..3729bcb
--- /dev/null
+++ b/web/regression/test_advanced_config.json.in
@@ -0,0 +1,105 @@
+{
+  "test_add_database_data": [
+   {
+    "test_privileges_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "C",
+            "privilege": true,
+            "with_grant": true
+          },
+          {
+            "privilege_type": "T",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_conn_limit": -1,
+    "test_owner": "postgres",
+    "test_fun_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "X",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_seq_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "r",
+            "privilege": true,
+            "with_grant": false
+          },
+          {
+            "privilege_type": "w",
+            "privilege": true,
+            "with_grant": false
+          },
+          {
+            "privilege_type": "U",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_tbl_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "a",
+            "privilege": true,
+            "with_grant": true
+          },
+          {
+            "privilege_type": "r",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_type_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "U",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_encoding": "UTF8",
+    "test_name": "test_db_automation",
+    "test_privileges": [],
+    "test_securities": [],
+    "test_variables": []
+  }
+ ],
+
+  "test_db_update_data": [
+  {
+      "test_comment": "This is db update comment"
+  }
+ ]
+
+}
diff --git a/web/regression/test_nodes.py b/web/regression/test_nodes.py
new file mode 100644
index 0000000..b3fd5ef
--- /dev/null
+++ b/web/regression/test_nodes.py
@@ -0,0 +1,42 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+import json
+from regression.test_utils import get_ids
+
+
+def test_getnodes(node=None):
+    # Connect to server and database.
+
+    if not node:
+        return None
+
+    all_id = get_ids()
+
+    server_id = all_id["sid"][0]
+    db_id = all_id["did"][0]
+    srv_grp = config_data['test_server_group']
+
+    # Connect to server
+    response = node.tester.post('browser/server/connect/{0}/{1}'.format
+                                (srv_grp, server_id),
+                                data=dict(password=config_data
+                                ['test_server_credentials'][0]
+                                ['test_db_password']), follow_redirects=True)
+
+    # Connect to database
+    con_response = node.tester.post('browser/database/connect/'
+                                    '{0}/{1}/{2}'.format
+                                    (srv_grp, server_id, db_id),
+                                    follow_redirects=True)
+
+    db_con = json.loads(con_response.data.decode())
+
+    return db_con
diff --git a/web/regression/test_utils.py b/web/regression/test_utils.py
new file mode 100644
index 0000000..c68744f
--- /dev/null
+++ b/web/regression/test_utils.py
@@ -0,0 +1,20 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+import pickle
+from regression.config import pickle_path
+
+
+def get_ids(url=pickle_path):
+    # This function will read parent nodes id's from pickle and return it.
+
+    output = open(url, 'rb')
+    ids = pickle.load(output)
+    output.close()
+    return ids
diff --git a/web/regression/testsuite.py b/web/regression/testsuite.py
index 6e6fb0c..9f076c2 100644
--- a/web/regression/testsuite.py
+++ b/web/regression/testsuite.py
@@ -13,7 +13,8 @@ them to TestSuite. """
 import os
 import sys
 import unittest
-
+import operator
+import logging
 from testscenarios.scenarios import generate_scenarios
 
 # We need to include the root directory in sys.path to ensure that we can
@@ -24,6 +25,13 @@ root = os.path.dirname(current_path)
 if sys.path[0] != root:
     sys.path.insert(0, root)
 
+import config
+
+# Get the config database schema version. We store this in pgadmin.model
+# as it turns out that putting it in the config files isn't a great idea
+from pgadmin.model import SCHEMA_VERSION
+config.SETTINGS_SCHEMA_VERSION = SCHEMA_VERSION
+
 from pgadmin import create_app
 
 # Create the app!
@@ -45,6 +53,22 @@ TestsGeneratorRegistry.load_generators('pgadmin')
 # application. We can trigger test request to the application.
 test_client = app.test_client()
 
+class StreamToLogger(object):
+    """
+    Fake file-like stream object that redirects writes to a logger instance.
+    """
+    def __init__(self, logger, log_level=logging.INFO):
+        self.logger = logger
+        self.log_level = log_level
+        self.linebuf = ''
+
+    def write(self, buf):
+        for line in buf.rstrip().splitlines():
+            self.logger.log(self.log_level, line.rstrip())
+
+    def flush(self):
+        pass
+
 
 def suite():
     """ Defining test suite which will execute all the testcases present in
@@ -59,6 +83,8 @@ def suite():
 
         modules.insert(gen.priority, gen)
 
+    modules.sort(key=operator.attrgetter('priority'))
+
     for m in modules:
         obj = m()
         obj.setTestClient(test_client)
@@ -69,5 +95,25 @@ def suite():
 
 
 if __name__ == '__main__':
+
+    print("Please check output in file: logger.log placed at "
+          ".../pgadmin4/web/regression")
+
+    logging.basicConfig(level=logging.DEBUG,
+                        format='%(asctime)s:%(levelname)s:%(name)s:%(message)s',
+                        filename="logger.log",
+                        filemode='w'
+                        )
+
+    stdout_logger = logging.getLogger('STDOUT')
+    sl = StreamToLogger(stdout_logger, logging.INFO)
+    sys.stdout = sl
+
+    stderr_logger = logging.getLogger('STDERR')
+    sl = StreamToLogger(stderr_logger, logging.ERROR)
+    sys.stderr = sl
+
     suite = suite()
-    tests = unittest.TextTestRunner(descriptions=True, verbosity=2).run(suite)
+    tests = unittest.TextTestRunner(descriptions=True, verbosity=2,
+                                    stream=sys.stdout).run(suite)
+    os.remove("parent_id.pkl")


view thread (27+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: pgAdmin IV API test cases patch
  In-Reply-To: <CA+OCxow+V_RU2y1q07R07UzZOmxLh+3WouSpwMXkYiz4v_V=qw@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox