public inbox for [email protected]
help / color / mirror / Atom feedFrom: 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