Subject: pgAdmin4 - help adding new node to Browser Tree

From: Warren Chan <[email-masked]>
Date: Wed, 2 Sep 2020 04:20:46 +0000 (UTC)

Hi, 

I'm trying to learn about the pgAdmin4 project and am hoping to make some contributions sometime in the future.
I'm new to Flask and python but am keen to learn.
While trying to familiarize myself with the application and the way it works, I've tried to create a 'test' node under the schema node, I want to list test items under this node - not listing anything particular at the moment but wanted to get an understanding of how the application ties together). In order to just get a new node added under schema, I've copied the sequence folder under \web\pgadmin\browser\server_groups\servers\databases\schemas and renamed the applicable folders to tests (I want a test node to appear under schema).
I've updated the \tests\_init_.py file so that the SequenceModule has been changed to TestModule (updated the NODE_TYPE etc). I've also updated the SequenceView to become TestView and other parts of the view like the template path etc. 

In addition to this I've changed the name in the \tests\static\js\sequence.js file to \tests\static\js\test.js and have also updated the test.js file so that any references to sequence has been changed to test and have added 'pgadmin.node.tests' to the webpack.config.js and 'pgadmin.node.test': path.join(__dirname, './pgadmin/browser/server_groups/servers/databases/schemas/tests/static/js/test') to the webpack.shim.js file
Doing this I was hoping that a new 'Test' node would appear under the schema directory and opening this node, would render all the sequences (as I haven't changed any of the sql). However I only get the new 'Test' node being rendered, and when I open this, I get a Server Node with the server I'm connected to being added, not the list of sequences I was hoping for. 

Is there an additional setting / steps I need to add somewhere in order to get the TestView to render under the TestModule node?

I'd appreciate any pointers to get this working as the next thing I'd like, would be to start modifying the sql and getting different database objects being listed.
Best regards,Warren Chan

---

From: Aditya Toshniwal <[email-masked]>
Date: Wed, 2 Sep 2020 13:48:49 +0530

Hi Warren,

Can you check the browser console if any errors ? Can you also share the
patch so that I can help you further by debugging at my end ?

On Wed, Sep 2, 2020 at 9:51 AM Warren Chan <[email-masked]> wrote:

> While trying to familiarize myself with the application and the way it
> works, I've tried to create a 'test' node under the schema node, I want to
> list test items under this node - not listing anything particular at the
> moment but wanted to get an understanding of how the application ties
> together). In order to just get a new node added under schema, I've
> copied the sequence folder under
> \web\pgadmin\browser\server_groups\servers\databases\schemas and renamed
> the applicable folders to tests (I want a test node to appear under schema).
>
> I've updated the \tests\_init_.py file so that the SequenceModule has been
> changed to TestModule (updated the NODE_TYPE etc). I've also updated the
> SequenceView to become TestView and other parts of the view like the
> template path etc.
>
> In addition to this I've changed the name in the
> \tests\static\js\sequence.js file to \tests\static\js\test.js and have
> also updated the test.js file so that any references to sequence has been
> changed to test and have added 'pgadmin.node.tests' to the
> webpack.config.js and 'pgadmin.node.test': path.join(__dirname,
> './pgadmin/browser/server_groups/servers/databases/schemas/tests/static/js/test')
> to the webpack.shim.js file
>
> Doing this I was hoping that a new 'Test' node would appear under the
> schema directory and opening this node, would render all the sequences (as
> I haven't changed any of the sql). However I only get the new 'Test' node
> being rendered, and when I open this, I get a Server Node with the server
> I'm connected to being added, not the list of sequences I was hoping for.
>
> Is there an additional setting / steps I need to add somewhere in order to
> get the TestView to render under the TestModule node?
>
> I'd appreciate any pointers to get this working as the next thing I'd
> like, would be to start modifying the sql and getting different database
> objects being listed.
>
> Best regards,
> Warren Chan
>
>
>

-- 
Thanks,
Aditya Toshniwal
pgAdmin hacker | Sr. Software Engineer | *edbpostgres.com*
<http://edbpostgres.com>
"Don't Complain about Heat, Plant a TREE"

---

From: Warren Chan <[email-masked]>
Date: Thu, 3 Sep 2020 02:59:31 +0000 (UTC)

Hi Aditya,
thanks for helping, really appreciate you taking the time.
I've attached a patch as requested and yes, when i expand the new Foo node I've created, I get the following errors in the console:

2020-09-03 12:50:37,291: ERROR  flask.app:      404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
Traceback (most recent call last):
  File "C:\git\pgadmin4\pgadmin4\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\git\pgadmin4\pgadmin4\lib\site-packages\flask\app.py", line 1791, in dispatch_request
    self.raise_routing_exception(req)
  File "C:\git\pgadmin4\pgadmin4\lib\site-packages\flask\app.py", line 1774, in raise_routing_exception
    raise request.routing_exception
  File "C:\git\pgadmin4\pgadmin4\lib\site-packages\flask\ctx.py", line 336, in match_request
    self.url_adapter.match(return_rule=True)
  File "C:\git\pgadmin4\pgadmin4\lib\site-packages\werkzeug\routing.py", line 1945, in match
    raise NotFound()
werkzeug.exceptions.NotFound: 404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
2020-09-03 12:50:37,372: ERROR  flask.app:      404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
Traceback (most recent call last):
  File "C:\git\pgadmin4\pgadmin4\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\git\pgadmin4\pgadmin4\lib\site-packages\flask\app.py", line 1791, in dispatch_request
    self.raise_routing_exception(req)
  File "C:\git\pgadmin4\pgadmin4\lib\site-packages\flask\app.py", line 1774, in raise_routing_exception
    raise request.routing_exception
  File "C:\git\pgadmin4\pgadmin4\lib\site-packages\flask\ctx.py", line 336, in match_request
    self.url_adapter.match(return_rule=True)
  File "C:\git\pgadmin4\pgadmin4\lib\site-packages\werkzeug\routing.py", line 1945, in match
    raise NotFound()
werkzeug.exceptions.NotFound: 404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
Please let me know if you need anything else.
Best Regards,Warren Chan
   On Wednesday, 2 September 2020, 6:19:59 pm AEST, Aditya Toshniwal <[email-masked]> wrote:  
 
 Hi Warren,
Can you check the browser console if any errors ? Can you also share the patch so that I can help you further by debugging at my end ?
On Wed, Sep 2, 2020 at 9:51 AM Warren Chan <[email-masked]> wrote:

Hi, 

-- 
Thanks,Aditya Toshniwal
pgAdmin hacker | Sr. Software Engineer | edbpostgres.com"Don't Complain about Heat, Plant a TREE"

---

From: Aditya Toshniwal <[email-masked]>
Date: Thu, 3 Sep 2020 10:13:09 +0530

Hi Warren,

The patch works fine, just that replacing sequences with foos was missing
at 1-2 places. I guess you've not restarted the dev server after the
changes. :)
- Always restart the backend dev server if there is any change in Python or
any template files.
- You can run webpack in continuous watch mode with yarn run bundle:dev
--watch. Always empty cache reload if there is any change in JS files. You
can enable chrome dev tools and right click on the refresh button to get
the option.

Here's what I've changed in your patch:

*diff --git
a/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/__init__.py
b/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/__init__.py*

*index 3bc310d6f..52de71f0b 100644*

*---
a/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/__init__.py*

*+++
b/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/__init__.py*

@@ -141,7 +141,7 @@ class FooView(PGChildNodeView, SchemaDiffObjectCompare):

                     if self.manager.db_info is not None and \

                     kwargs['did'] in self.manager.db_info else 0

-                self.template_path = 'sequences/sql/#{0}#'.format(

+                self.template_path = 'foos/sql/#{0}#'.format(

                     self.manager.version

                 )

                 self.acl = ['r', 'w', 'U']

*diff --git
a/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/templates/foos/sql/default/stats.sql
b/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/templates/foos/sql/default/stats.sql*

*index cd9b0154a..91a2f9259 100644*

*---
a/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/templates/foos/sql/default/stats.sql*

*+++
b/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/templates/foos/sql/default/stats.sql*

@@ -4,4 +4,4 @@ SELECT

 FROM

     pg_statio_all_sequences

 WHERE

-    relid = {{ seid }}::OID

\ No newline at end of file

+    relid = {{ fooid }}::OID

On Thu, Sep 3, 2020 at 8:29 AM Warren Chan <[email-masked]> wrote:

> I've attached a patch as requested and yes, when i expand the new Foo node
> I've created, I get the following errors in the console:
>
> 2020-09-03 12:50:37,291: ERROR  flask.app:      404 Not Found: The
> requested URL was not found on the server. If you entered the URL manually
> please check your spelling and try again.
> werkzeug.exceptions.NotFound: 404 Not Found: The requested URL was not
> found on the server. If you entered the URL manually please check your
> spelling and try again.
> 2020-09-03 12:50:37,372: ERROR  flask.app:      404 Not Found: The
> requested URL was not found on the server. If you entered the URL manually
> please check your spelling and try again.
> werkzeug.exceptions.NotFound: 404 Not Found: The requested URL was not
> found on the server. If you entered the URL manually please check your
> spelling and try again.
>
> Best Regards,
> On Wednesday, 2 September 2020, 6:19:59 pm AEST, Aditya Toshniwal <
> [email-masked]> wrote:
>
>
> Hi Warren,
>

---

From: Warren Chan <[email-masked]>
Date: Thu, 3 Sep 2020 05:44:25 +0000 (UTC)

Hi Aditya,
thats it, I wasn't running yarn bundle after my modifications to the templates. Thanks for tip to run webpack in continuous mode, that's great.

Really appreciate the help in getting past this. 

Best Regards,Warren Chan

    On Thursday, 3 September 2020, 2:43:56 pm AEST, Aditya Toshniwal <[email-masked]> wrote:  
 
 Hi Warren,
The patch works fine, just that replacing sequences with foos was missing at 1-2 places. I guess you've not restarted the dev server after the changes. :)- Always restart the backend dev server if there is any change in Python or any template files.- You can run webpack in continuous watch mode with yarn run bundle:dev --watch. Always empty cache reload if there is any change in JS files. You can enable chrome dev tools and right click on the refresh button to get the option.
Here's what I've changed in your patch:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/__init__.py

index 3bc310d6f..52de71f0b 100644

--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/__init__.py

+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/__init__.py

                     self.manager.version

                 )

diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/templates/foos/sql/default/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/templates/foos/sql/default/stats.sql

index cd9b0154a..91a2f9259 100644

--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/templates/foos/sql/default/stats.sql

+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foos/templates/foos/sql/default/stats.sql

@@ -4,4 +4,4 @@ SELECT

 FROM

     pg_statio_all_sequences

 WHERE

 Hi Aditya,

 Hi Warren,

Hi,

---

From: Aditya Toshniwal <[email-masked]>
Date: Thu, 3 Sep 2020 11:32:08 +0530

Hi Warren,

On Thu, Sep 3, 2020 at 11:14 AM Warren Chan <[email-masked]> wrote:

> Hi Aditya,
>
> thats it, I wasn't running yarn bundle after my modifications to the
> templates. Thanks for tip to run webpack in continuous mode, that's great.
>
You need to restart the backend server if you change the templates. yarn
bundle is needed when JS files are changed.
Glad it worked :)

> On Thursday, 3 September 2020, 2:43:56 pm AEST, Aditya Toshniwal <
> - Always restart the backend dev server if there is any change in Python
> or any template files.