You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2020/09/17 21:28:32 UTC

[airavata-django-portal] branch develop updated (39bf6e0 -> 4f8118a)

This is an automated email from the ASF dual-hosted git repository.

machristie pushed a change to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git.


    from 39bf6e0  Adding test settings for more easily running tests
     new 3ef759b  Documenting how to format Python code
     new c9b8541  Documenting how to format JS/Vue.js code
     new 4f8118a  Merge branch 'code-formatting' into develop

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .travis.yml                                        |  4 +--
 README.md                                          |  5 +++
 django_airavata/apps/admin/.prettierignore         |  2 ++
 django_airavata/apps/admin/package.json            |  4 ++-
 django_airavata/apps/admin/yarn.lock               |  5 +++
 django_airavata/apps/api/.prettierignore           |  1 +
 django_airavata/apps/api/apps.py                   |  2 +-
 django_airavata/apps/api/package.json              |  4 ++-
 django_airavata/apps/api/serializers.py            |  3 +-
 django_airavata/apps/api/urls.py                   |  6 ++--
 django_airavata/apps/api/yarn.lock                 |  5 +++
 django_airavata/apps/dataparsers/.prettierignore   |  2 ++
 django_airavata/apps/dataparsers/package.json      |  4 ++-
 django_airavata/apps/dataparsers/urls.py           |  6 ++--
 django_airavata/apps/dataparsers/yarn.lock         |  5 +++
 django_airavata/apps/groups/.prettierignore        |  2 ++
 django_airavata/apps/groups/package.json           |  4 ++-
 django_airavata/apps/groups/yarn.lock              |  5 +++
 django_airavata/apps/workspace/.prettierignore     |  4 +++
 .../.prettierignore                                |  2 ++
 .../package.json                                   |  4 ++-
 .../django-airavata-workspace-plugin-api/yarn.lock |  5 +++
 django_airavata/apps/workspace/package.json        |  4 ++-
 django_airavata/apps/workspace/yarn.lock           |  5 +++
 django_airavata/settings.py                        |  3 +-
 django_airavata/settings_local.py.ide              |  2 +-
 django_airavata/static/common/.prettierignore      |  2 ++
 django_airavata/static/common/package.json         |  4 ++-
 django_airavata/static/common/yarn.lock            |  5 +++
 docs/dev/developing_backend.md                     | 16 +++++++--
 docs/dev/developing_frontend.md                    | 38 +++++++++++++---------
 docs/dev/new_django_app.md                         |  4 ++-
 requirements-dev.txt                               |  4 ++-
 setup.cfg                                          |  6 ++++
 34 files changed, 141 insertions(+), 36 deletions(-)
 create mode 100644 django_airavata/apps/admin/.prettierignore
 create mode 100644 django_airavata/apps/api/.prettierignore
 create mode 100644 django_airavata/apps/dataparsers/.prettierignore
 create mode 100644 django_airavata/apps/groups/.prettierignore
 create mode 100644 django_airavata/apps/workspace/.prettierignore
 create mode 100644 django_airavata/apps/workspace/django-airavata-workspace-plugin-api/.prettierignore
 create mode 100644 django_airavata/static/common/.prettierignore


[airavata-django-portal] 03/03: Merge branch 'code-formatting' into develop

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit 4f8118ac17db0fc8c9f605e009e1f2e5b33ef573
Merge: 39bf6e0 c9b8541
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Thu Sep 17 17:27:32 2020 -0400

    Merge branch 'code-formatting' into develop

 .travis.yml                                        |  4 +--
 README.md                                          |  5 +++
 django_airavata/apps/admin/.prettierignore         |  2 ++
 django_airavata/apps/admin/package.json            |  4 ++-
 django_airavata/apps/admin/yarn.lock               |  5 +++
 django_airavata/apps/api/.prettierignore           |  1 +
 django_airavata/apps/api/apps.py                   |  2 +-
 django_airavata/apps/api/package.json              |  4 ++-
 django_airavata/apps/api/serializers.py            |  3 +-
 django_airavata/apps/api/urls.py                   |  6 ++--
 django_airavata/apps/api/yarn.lock                 |  5 +++
 django_airavata/apps/dataparsers/.prettierignore   |  2 ++
 django_airavata/apps/dataparsers/package.json      |  4 ++-
 django_airavata/apps/dataparsers/urls.py           |  6 ++--
 django_airavata/apps/dataparsers/yarn.lock         |  5 +++
 django_airavata/apps/groups/.prettierignore        |  2 ++
 django_airavata/apps/groups/package.json           |  4 ++-
 django_airavata/apps/groups/yarn.lock              |  5 +++
 django_airavata/apps/workspace/.prettierignore     |  4 +++
 .../.prettierignore                                |  2 ++
 .../package.json                                   |  4 ++-
 .../django-airavata-workspace-plugin-api/yarn.lock |  5 +++
 django_airavata/apps/workspace/package.json        |  4 ++-
 django_airavata/apps/workspace/yarn.lock           |  5 +++
 django_airavata/settings.py                        |  3 +-
 django_airavata/settings_local.py.ide              |  2 +-
 django_airavata/static/common/.prettierignore      |  2 ++
 django_airavata/static/common/package.json         |  4 ++-
 django_airavata/static/common/yarn.lock            |  5 +++
 docs/dev/developing_backend.md                     | 16 +++++++--
 docs/dev/developing_frontend.md                    | 38 +++++++++++++---------
 docs/dev/new_django_app.md                         |  4 ++-
 requirements-dev.txt                               |  4 ++-
 setup.cfg                                          |  6 ++++
 34 files changed, 141 insertions(+), 36 deletions(-)

diff --cc .travis.yml
index dabb811,9991f3a..6c87051
--- a/.travis.yml
+++ b/.travis.yml
@@@ -7,8 -7,8 +7,8 @@@ script
    - cp django_airavata/settings_local.py.sample django_airavata/settings_local.py
    - python manage.py migrate
    - python manage.py check
-   # For now ignore long line endings
-   - flake8 --ignore=E501 .
 -  - python manage.py test
+   - flake8 .
++  - python manage.py test
    - ./lint_js.sh
    - ./build_js.sh
    - ./test_js.sh
diff --cc README.md
index 4779abc,14cec56..94062cd
--- a/README.md
+++ b/README.md
@@@ -149,11 -148,12 +149,16 @@@ libraries
  
  Use a code editor that integrates with editorconfig and flake8. I also recommend
  autopep8 for automatically formatting code to follow the PEP8 guidelines.
+ Prettier is used for formatting JavaScript and Vue.js code.
+ 
+ See the docs for more information on
+ [developing the backend](./docs/dev/developing_backend.md) and
+ [frontend code](./docs/dev/developing_frontend.md).
  
 +### Running Django Tests
 +
 +Run `./runtests.py` to run the Django unit tests.
 +
  ## License
  
  The Apache Airavata Django Portal is licensed under the Apache 2.0 license. For


[airavata-django-portal] 01/03: Documenting how to format Python code

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit 3ef759ba3c41f7d7db058d171edb94805d89347c
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Tue Aug 4 19:17:01 2020 -0400

    Documenting how to format Python code
---
 .travis.yml                              |  3 +--
 README.md                                |  4 ++++
 django_airavata/apps/api/apps.py         |  2 +-
 django_airavata/apps/api/serializers.py  |  3 ++-
 django_airavata/apps/api/urls.py         |  6 ++++--
 django_airavata/apps/dataparsers/urls.py |  6 ++++--
 django_airavata/settings.py              |  3 ++-
 django_airavata/settings_local.py.ide    |  2 +-
 docs/dev/developing_backend.md           | 16 ++++++++++++++--
 requirements-dev.txt                     |  2 ++
 setup.cfg                                |  6 ++++++
 11 files changed, 41 insertions(+), 12 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 0029b02..9991f3a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -8,8 +8,7 @@ script:
   - python manage.py migrate
   - python manage.py check
   - python manage.py test
-  # For now ignore long line endings
-  - flake8 --ignore=E501 .
+  - flake8 .
   - ./lint_js.sh
   - ./build_js.sh
   - ./test_js.sh
diff --git a/README.md b/README.md
index f1a4dbf..e6f9725 100644
--- a/README.md
+++ b/README.md
@@ -149,6 +149,10 @@ libraries.
 Use a code editor that integrates with editorconfig and flake8. I also recommend
 autopep8 for automatically formatting code to follow the PEP8 guidelines.
 
+See the docs for more information on
+[developing the backend](./docs/dev/developing_backend.md) and
+[frontend code](./docs/dev/developing_frontend.md).
+
 ## License
 
 The Apache Airavata Django Portal is licensed under the Apache 2.0 license. For
diff --git a/django_airavata/apps/api/apps.py b/django_airavata/apps/api/apps.py
index 0937bc2..a9c0abb 100644
--- a/django_airavata/apps/api/apps.py
+++ b/django_airavata/apps/api/apps.py
@@ -6,4 +6,4 @@ class ApiConfig(AppConfig):
     label = 'django_airavata_api'
 
     def ready(self):
-        from . import signals # noqa
+        from . import signals  # noqa
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index 2cf160f..16745e3 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -744,7 +744,8 @@ class SharedEntitySerializer(serializers.Serializer):
         read_permissions = set((ResourcePermissionType.READ,))
         write_permissions = set((ResourcePermissionType.READ,
                                  ResourcePermissionType.WRITE))
-        manage_share_permissions = set((ResourcePermissionType.READ, ResourcePermissionType.WRITE, ResourcePermissionType.MANAGE_SHARING))
+        manage_share_permissions = set(
+            (ResourcePermissionType.READ, ResourcePermissionType.WRITE, ResourcePermissionType.MANAGE_SHARING))
         current_permissions_set = set()
         new_permissions_set = set()
         if current_permission == ResourcePermissionType.READ:
diff --git a/django_airavata/apps/api/urls.py b/django_airavata/apps/api/urls.py
index 70db566..02ec834 100644
--- a/django_airavata/apps/api/urls.py
+++ b/django_airavata/apps/api/urls.py
@@ -88,8 +88,10 @@ urlpatterns = [
     url(r'^experiment-statistics',
         views.ExperimentStatisticsView.as_view(),
         name="experiment-statistics"),
-    url(r'ack-notifications/<slug:id>/', views.AckNotificationViewSet.as_view(), name="ack-notifications"),
-    url(r'ack-notifications/', views.AckNotificationViewSet.as_view(), name="ack-notifications"),
+    url(r'ack-notifications/<slug:id>/',
+        views.AckNotificationViewSet.as_view(), name="ack-notifications"),
+    url(r'ack-notifications/', views.AckNotificationViewSet.as_view(),
+        name="ack-notifications"),
     url(r'^log', views.LogRecordConsumer.as_view(), name='log'),
     url(r'^settings', views.SettingsAPIView.as_view(), name='settings'),
     url(r'^api-status-check/',
diff --git a/django_airavata/apps/dataparsers/urls.py b/django_airavata/apps/dataparsers/urls.py
index b38e28f..7efc23d 100644
--- a/django_airavata/apps/dataparsers/urls.py
+++ b/django_airavata/apps/dataparsers/urls.py
@@ -6,7 +6,9 @@ from . import views
 app_name = 'django_airavata_dataparsers'
 urlpatterns = [
     url(r'^$', views.home, name='home'),
-    url(r'^parsers/(?P<parser_id>[^/]+)/$', views.parser_details, name="parser_details"),
-    url(r'^edit/(?P<parser_id>[^/]+)/$', views.edit_parser, name='edit_parser'),
+    url(r'^parsers/(?P<parser_id>[^/]+)/$',
+        views.parser_details, name="parser_details"),
+    url(r'^edit/(?P<parser_id>[^/]+)/$',
+        views.edit_parser, name='edit_parser'),
 
 ]
diff --git a/django_airavata/settings.py b/django_airavata/settings.py
index 3c440e2..d56ad62 100644
--- a/django_airavata/settings.py
+++ b/django_airavata/settings.py
@@ -97,7 +97,8 @@ CUSTOM_DJANGO_APPS = []
 #
 for entry_point in iter_entry_points(group='airavata.djangoapp'):
     custom_app_class = entry_point.load()
-    custom_app_instance = custom_app_class(entry_point.name, import_module(entry_point.module_name))
+    custom_app_instance = custom_app_class(
+        entry_point.name, import_module(entry_point.module_name))
     CUSTOM_DJANGO_APPS.append(custom_app_instance)
     # Create path to AppConfig class (otherwise the ready() method doesn't get
     # called)
diff --git a/django_airavata/settings_local.py.ide b/django_airavata/settings_local.py.ide
index 548e82d..50c1b90 100644
--- a/django_airavata/settings_local.py.ide
+++ b/django_airavata/settings_local.py.ide
@@ -41,7 +41,7 @@ KEYCLOAK_TOKEN_URL = 'https://airavata.host:8443/auth/realms/default/protocol/op
 KEYCLOAK_USERINFO_URL = 'https://airavata.host:8443/auth/realms/default/protocol/openid-connect/userinfo'
 KEYCLOAK_LOGOUT_URL = 'https://airavata.host:8443/auth/realms/default/protocol/openid-connect/logout'
 # Optional: specify if using self-signed certificate or certificate from unrecognized CA
-#KEYCLOAK_CA_CERTFILE = os.path.join(BASE_DIR, "django_airavata", "resources", "incommon_rsa_server_ca.pem")
+# KEYCLOAK_CA_CERTFILE = os.path.join(BASE_DIR, "django_airavata", "resources", "incommon_rsa_server_ca.pem")
 KEYCLOAK_VERIFY_SSL = False
 
 AUTHENTICATION_OPTIONS = {
diff --git a/docs/dev/developing_backend.md b/docs/dev/developing_backend.md
index 738490b..b243b65 100644
--- a/docs/dev/developing_backend.md
+++ b/docs/dev/developing_backend.md
@@ -4,10 +4,22 @@ For the Python code we follow the
 [PEP8 standard](https://www.python.org/dev/peps/pep-0008/). A linter called
 `flake8` is used to verify adherence to the standard.
 
-## Running flake8
+## Setting up dev environment
 
 ```bash
 source venv/bin/activate
 pip install -r requirements-dev.txt
-flake8 --ignore=E501 .
+```
+
+## Running flake8
+
+```
+flake8 .
+```
+
+## Automatically formatting Python code
+
+```
+autopep8 -i -aaa -r .
+isort .
 ```
diff --git a/requirements-dev.txt b/requirements-dev.txt
index d399484..b5a0618 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,6 +1,8 @@
 -r requirements.txt
+autopep8==1.3.5
 flake8==3.5.0
 flake8-isort==2.5
+isort==5.2.2
 mkdocs==1.0.4
 Markdown==3.2.1
 
diff --git a/setup.cfg b/setup.cfg
index 82f32c9..80452c4 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -5,6 +5,7 @@ exclude =
     node_modules,
     settings_local.py,
     */migrations
+ignore = E501
 
 [isort]
 # Set multi_line_output to option 3 - Vertical Hanging Indent
@@ -16,3 +17,8 @@ exclude =
 #     lib4,
 # )
 multi_line_output = 3
+# due to bug, must skip .git folder explicitly
+# https://github.com/timothycrosley/isort/issues/1366
+skip = airavata, migrations, .git
+skip_gitignore = true
+


[airavata-django-portal] 02/03: Documenting how to format JS/Vue.js code

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit c9b85416e0264b53c5a4b021510496fe9c2f827a
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Thu Sep 17 17:25:42 2020 -0400

    Documenting how to format JS/Vue.js code
---
 README.md                                          |  1 +
 django_airavata/apps/admin/.prettierignore         |  2 ++
 django_airavata/apps/admin/package.json            |  4 ++-
 django_airavata/apps/admin/yarn.lock               |  5 +++
 django_airavata/apps/api/.prettierignore           |  1 +
 django_airavata/apps/api/package.json              |  4 ++-
 django_airavata/apps/api/yarn.lock                 |  5 +++
 django_airavata/apps/dataparsers/.prettierignore   |  2 ++
 django_airavata/apps/dataparsers/package.json      |  4 ++-
 django_airavata/apps/dataparsers/yarn.lock         |  5 +++
 django_airavata/apps/groups/.prettierignore        |  2 ++
 django_airavata/apps/groups/package.json           |  4 ++-
 django_airavata/apps/groups/yarn.lock              |  5 +++
 django_airavata/apps/workspace/.prettierignore     |  4 +++
 .../.prettierignore                                |  2 ++
 .../package.json                                   |  4 ++-
 .../django-airavata-workspace-plugin-api/yarn.lock |  5 +++
 django_airavata/apps/workspace/package.json        |  4 ++-
 django_airavata/apps/workspace/yarn.lock           |  5 +++
 django_airavata/static/common/.prettierignore      |  2 ++
 django_airavata/static/common/package.json         |  4 ++-
 django_airavata/static/common/yarn.lock            |  5 +++
 docs/dev/developing_frontend.md                    | 38 +++++++++++++---------
 docs/dev/new_django_app.md                         |  4 ++-
 requirements-dev.txt                               |  2 +-
 25 files changed, 99 insertions(+), 24 deletions(-)

diff --git a/README.md b/README.md
index e6f9725..14cec56 100644
--- a/README.md
+++ b/README.md
@@ -148,6 +148,7 @@ libraries.
 
 Use a code editor that integrates with editorconfig and flake8. I also recommend
 autopep8 for automatically formatting code to follow the PEP8 guidelines.
+Prettier is used for formatting JavaScript and Vue.js code.
 
 See the docs for more information on
 [developing the backend](./docs/dev/developing_backend.md) and
diff --git a/django_airavata/apps/admin/.prettierignore b/django_airavata/apps/admin/.prettierignore
new file mode 100644
index 0000000..0d842b9
--- /dev/null
+++ b/django_airavata/apps/admin/.prettierignore
@@ -0,0 +1,2 @@
+dist
+templates
diff --git a/django_airavata/apps/admin/package.json b/django_airavata/apps/admin/package.json
index 1e97060..41b8299 100644
--- a/django_airavata/apps/admin/package.json
+++ b/django_airavata/apps/admin/package.json
@@ -8,7 +8,8 @@
     "serve": "vue-cli-service serve ./static/django_airavata_admin/src/main.js",
     "build": "vue-cli-service build ./static/django_airavata_admin/src/main.js",
     "lint": "vue-cli-service lint ./static/django_airavata_admin/src/",
-    "lint:visualstudio": "vue-cli-service lint --format visualstudio ./static/django_airavata_admin/src/"
+    "lint:visualstudio": "vue-cli-service lint --format visualstudio ./static/django_airavata_admin/src/",
+    "format": "prettier --write ."
   },
   "dependencies": {
     "bootstrap": "^4.3.1",
@@ -33,6 +34,7 @@
     "@vue/cli-service": "^3.0.1",
     "@vue/component-compiler-utils": "^2.3.0",
     "autoprefixer": "^9.3.1",
+    "prettier": "^2.1.2",
     "vue-loader": "^15.5.1",
     "vue-template-compiler": "^2.5.22",
     "webpack": "^4.28.4",
diff --git a/django_airavata/apps/admin/yarn.lock b/django_airavata/apps/admin/yarn.lock
index 6cbf48a..d496046 100644
--- a/django_airavata/apps/admin/yarn.lock
+++ b/django_airavata/apps/admin/yarn.lock
@@ -6688,6 +6688,11 @@ prettier@^1.18.2:
   resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
   integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
 
+prettier@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
+  integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
+
 pretty-error@^2.0.2:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
diff --git a/django_airavata/apps/api/.prettierignore b/django_airavata/apps/api/.prettierignore
new file mode 100644
index 0000000..1521c8b
--- /dev/null
+++ b/django_airavata/apps/api/.prettierignore
@@ -0,0 +1 @@
+dist
diff --git a/django_airavata/apps/api/package.json b/django_airavata/apps/api/package.json
index c9e22b1..5cc5385 100644
--- a/django_airavata/apps/api/package.json
+++ b/django_airavata/apps/api/package.json
@@ -13,7 +13,8 @@
     "watch": "webpack --watch",
     "test": "jest",
     "test:watch": "jest --watch",
-    "lint": "eslint ./static/django_airavata_api/js/"
+    "lint": "eslint ./static/django_airavata_api/js/",
+    "format": "prettier --write ."
   },
   "dependencies": {
     "@babel/polyfill": "^7.0.0",
@@ -33,6 +34,7 @@
     "eslint": "^5.12.0",
     "eslint-plugin-import": "^2.14.0",
     "jest": "^23.6.0",
+    "prettier": "^2.1.2",
     "regenerator-runtime": "^0.13.1",
     "webpack": "^4.34.0",
     "webpack-cli": "^3.3.4"
diff --git a/django_airavata/apps/api/yarn.lock b/django_airavata/apps/api/yarn.lock
index 709ad97..541c72c 100644
--- a/django_airavata/apps/api/yarn.lock
+++ b/django_airavata/apps/api/yarn.lock
@@ -4838,6 +4838,11 @@ preserve@^0.2.0:
   resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
   integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
 
+prettier@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
+  integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
+
 pretty-format@^23.6.0:
   version "23.6.0"
   resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
diff --git a/django_airavata/apps/dataparsers/.prettierignore b/django_airavata/apps/dataparsers/.prettierignore
new file mode 100644
index 0000000..0d842b9
--- /dev/null
+++ b/django_airavata/apps/dataparsers/.prettierignore
@@ -0,0 +1,2 @@
+dist
+templates
diff --git a/django_airavata/apps/dataparsers/package.json b/django_airavata/apps/dataparsers/package.json
index b2f47fe..cf0b9db 100644
--- a/django_airavata/apps/dataparsers/package.json
+++ b/django_airavata/apps/dataparsers/package.json
@@ -8,7 +8,8 @@
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint ./static/django_airavata_dataparsers/js",
-    "lint:visualstudio": "vue-cli-service lint --format=visualstudio ./static/django_airavata_dataparsers/js"
+    "lint:visualstudio": "vue-cli-service lint --format=visualstudio ./static/django_airavata_dataparsers/js",
+    "format": "prettier --write ."
   },
   "dependencies": {
     "bootstrap": "^4.1.3",
@@ -25,6 +26,7 @@
     "babel-eslint": "^10.0.1",
     "eslint": "^5.8.0",
     "eslint-plugin-vue": "^5.0.0-0",
+    "prettier": "^2.1.2",
     "vue-loader": "^15.5.1",
     "vue-template-compiler": "^2.5.22",
     "webpack": "^4.28.4",
diff --git a/django_airavata/apps/dataparsers/yarn.lock b/django_airavata/apps/dataparsers/yarn.lock
index e88eef2..23bfdd6 100644
--- a/django_airavata/apps/dataparsers/yarn.lock
+++ b/django_airavata/apps/dataparsers/yarn.lock
@@ -6652,6 +6652,11 @@ prettier@^1.18.2:
   resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
   integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
 
+prettier@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
+  integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
+
 pretty-error@^2.0.2:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
diff --git a/django_airavata/apps/groups/.prettierignore b/django_airavata/apps/groups/.prettierignore
new file mode 100644
index 0000000..0d842b9
--- /dev/null
+++ b/django_airavata/apps/groups/.prettierignore
@@ -0,0 +1,2 @@
+dist
+templates
diff --git a/django_airavata/apps/groups/package.json b/django_airavata/apps/groups/package.json
index a4414df..382c677 100755
--- a/django_airavata/apps/groups/package.json
+++ b/django_airavata/apps/groups/package.json
@@ -8,7 +8,8 @@
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint ./static/django_airavata_groups/js",
-    "lint:visualstudio": "vue-cli-service lint --format visualstudio ./static/django_airavata_groups/js"
+    "lint:visualstudio": "vue-cli-service lint --format visualstudio ./static/django_airavata_groups/js",
+    "format": "prettier --write ."
   },
   "dependencies": {
     "bootstrap": "^4.0.0-beta.2",
@@ -26,6 +27,7 @@
     "babel-eslint": "^10.0.1",
     "eslint": "^5.8.0",
     "eslint-plugin-vue": "^5.0.0-0",
+    "prettier": "^2.1.2",
     "vue-loader": "^15.5.1",
     "vue-template-compiler": "^2.5.22",
     "webpack": "^4.28.4",
diff --git a/django_airavata/apps/groups/yarn.lock b/django_airavata/apps/groups/yarn.lock
index f606c56..c66ba8e 100644
--- a/django_airavata/apps/groups/yarn.lock
+++ b/django_airavata/apps/groups/yarn.lock
@@ -6652,6 +6652,11 @@ prettier@^1.18.2:
   resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
   integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
 
+prettier@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
+  integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
+
 pretty-error@^2.0.2:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
diff --git a/django_airavata/apps/workspace/.prettierignore b/django_airavata/apps/workspace/.prettierignore
new file mode 100644
index 0000000..602c283
--- /dev/null
+++ b/django_airavata/apps/workspace/.prettierignore
@@ -0,0 +1,4 @@
+dist
+templates
+# This folder has it's own prettier config
+django-airavata-workspace-plugin-api
diff --git a/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/.prettierignore b/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/.prettierignore
new file mode 100644
index 0000000..0d842b9
--- /dev/null
+++ b/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/.prettierignore
@@ -0,0 +1,2 @@
+dist
+templates
diff --git a/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/package.json b/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/package.json
index 22465bb..63efd2b 100644
--- a/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/package.json
+++ b/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/package.json
@@ -12,7 +12,8 @@
     "watch": "vue-cli-service build --watch --target lib --name index js/index.js",
     "build": "vue-cli-service build --target lib --name index js/index.js",
     "lint": "vue-cli-service lint ./js/",
-    "lint:visualstudio": "vue-cli-service lint --format visualstudio ./js/"
+    "lint:visualstudio": "vue-cli-service lint --format visualstudio ./js/",
+    "format": "prettier --write ."
   },
   "peerDependencies": {
     "django-airavata-api": "^1.0.0-beta"
@@ -24,6 +25,7 @@
     "babel-eslint": "^10.0.1",
     "eslint": "^5.8.0",
     "eslint-plugin-vue": "^5.0.0-0",
+    "prettier": "^2.1.2",
     "terser": "^4.1.2",
     "vue-loader": "^15.5.1",
     "vue-template-compiler": "^2.5.17",
diff --git a/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/yarn.lock b/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/yarn.lock
index 4b80a69..3de1961 100644
--- a/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/yarn.lock
+++ b/django_airavata/apps/workspace/django-airavata-workspace-plugin-api/yarn.lock
@@ -6387,6 +6387,11 @@ prettier@^1.18.2:
   resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
   integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
 
+prettier@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
+  integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
+
 pretty-error@^2.0.2:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
diff --git a/django_airavata/apps/workspace/package.json b/django_airavata/apps/workspace/package.json
index 424c5ed..6471b77 100644
--- a/django_airavata/apps/workspace/package.json
+++ b/django_airavata/apps/workspace/package.json
@@ -11,7 +11,8 @@
     "lint:visualstudio": "vue-cli-service lint --format visualstudio ./static/django_airavata_workspace/js",
     "test": "npm run test:unit",
     "test:unit": "vue-cli-service test:unit",
-    "test:unit:watch": "vue-cli-service test:unit --watch"
+    "test:unit:watch": "vue-cli-service test:unit --watch",
+    "format": "prettier --write ."
   },
   "dependencies": {
     "bootstrap": "^4.3.1",
@@ -37,6 +38,7 @@
     "babel-loader": "^8.0.5",
     "eslint": "^5.8.0",
     "eslint-plugin-vue": "^5.0.0-0",
+    "prettier": "^2.1.2",
     "vue-loader": "^15.5.1",
     "vue-template-compiler": "^2.5.22",
     "webpack": "^4.28.4",
diff --git a/django_airavata/apps/workspace/yarn.lock b/django_airavata/apps/workspace/yarn.lock
index f22f111..cb0abc3 100644
--- a/django_airavata/apps/workspace/yarn.lock
+++ b/django_airavata/apps/workspace/yarn.lock
@@ -7907,6 +7907,11 @@ prettier@^1.18.2:
   resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
   integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
 
+prettier@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
+  integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
+
 pretty-error@^2.0.2:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
diff --git a/django_airavata/static/common/.prettierignore b/django_airavata/static/common/.prettierignore
new file mode 100644
index 0000000..de4d1f0
--- /dev/null
+++ b/django_airavata/static/common/.prettierignore
@@ -0,0 +1,2 @@
+dist
+node_modules
diff --git a/django_airavata/static/common/package.json b/django_airavata/static/common/package.json
index 3107c74..aab9a3b 100644
--- a/django_airavata/static/common/package.json
+++ b/django_airavata/static/common/package.json
@@ -10,7 +10,8 @@
     "watch": "vue-cli-service build --watch --mode production",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint ./js/",
-    "lint:visualstudio": "vue-cli-service lint --format visualstudio ./js/"
+    "lint:visualstudio": "vue-cli-service lint --format visualstudio ./js/",
+    "format": "prettier --write ."
   },
   "dependencies": {
     "@fortawesome/fontawesome-free": "^5.6.3",
@@ -38,6 +39,7 @@
     "eslint-plugin-vue": "^5.0.0-0",
     "file-loader": "^3.0.1",
     "node-sass": "^4.11.0",
+    "prettier": "^2.0.5",
     "sass-loader": "^7.1.0",
     "vue-loader": "^15.5.1",
     "vue-template-compiler": "^2.5.22",
diff --git a/django_airavata/static/common/yarn.lock b/django_airavata/static/common/yarn.lock
index 58fe97a..ff0befc 100644
--- a/django_airavata/static/common/yarn.lock
+++ b/django_airavata/static/common/yarn.lock
@@ -6899,6 +6899,11 @@ prettier@^1.18.2:
   resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
   integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
 
+prettier@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
+  integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==
+
 pretty-error@^2.0.2:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
diff --git a/docs/dev/developing_frontend.md b/docs/dev/developing_frontend.md
index eb885b5..1fe293b 100644
--- a/docs/dev/developing_frontend.md
+++ b/docs/dev/developing_frontend.md
@@ -1,14 +1,14 @@
 # Getting started with Vue.js development
 
-Make sure you have [the latest version of Node.js LTS
-installed](https://nodejs.org/en/download/). You also need to install [the
-Yarn package manager](https://yarnpkg.com).
+Make sure you have
+[the latest version of Node.js LTS installed](https://nodejs.org/en/download/).
+You also need to install [the Yarn package manager](https://yarnpkg.com).
 
 Start the Django portal (`python manage.py runserver`). Navigate to the Django
-app directory and run `yarn` and then `yarn` to start up the dev
-server. Now you can load the Django app in your browser and as you make code
-changes they should automatically be hot-reloaded in the browser. For example,
-if you wanted to work on the _workspace_ app's frontend code, you could do
+app directory and run `yarn` and then `yarn` to start up the dev server. Now you
+can load the Django app in your browser and as you make code changes they should
+automatically be hot-reloaded in the browser. For example, if you wanted to work
+on the _workspace_ app's frontend code, you could do
 
 ```
 cd django_airavata/apps/workspace
@@ -53,9 +53,9 @@ entry point will generally have the following structure:
 import { components, entry } from "django-airavata-common-ui";
 import SomethingListContainer from "./containers/SomethingListContainer.vue";
 
-entry(Vue => {
+entry((Vue) => {
     new Vue({
-        render: h => h(components.MainLayout, [h(SomethingListContainer)])
+        render: (h) => h(components.MainLayout, [h(SomethingListContainer)]),
     }).$mount("#something-list");
 });
 ```
@@ -133,25 +133,33 @@ the Vue.js app container via a property:
 import { components, entry } from "django-airavata-common-ui";
 import ViewSomethingContainer from "./containers/ViewSomethingContainer.vue";
 
-entry(Vue => {
+entry((Vue) => {
     new Vue({
         render(h) {
             return h(components.MainLayout, [
                 h(ViewSomethingContainer, {
                     props: {
-                        somethingId: this.somethingId
-                    }
-                })
+                        somethingId: this.somethingId,
+                    },
+                }),
             ]);
         },
         data() {
             return {
-                somethingId: null
+                somethingId: null,
             };
         },
         beforeMount() {
             this.somethingId = this.$el.dataset.somethingId;
-        }
+        },
     }).$mount("#view-something");
 });
 ```
+
+## Automatically formatting source code
+
+Run `prettier --write .` with the following:
+
+```
+yarn format
+```
diff --git a/docs/dev/new_django_app.md b/docs/dev/new_django_app.md
index 1cb6b78..bea9d41 100644
--- a/docs/dev/new_django_app.md
+++ b/docs/dev/new_django_app.md
@@ -232,7 +232,8 @@ django_airavata/apps/myapp):
   "scripts": {
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build",
-    "lint": "vue-cli-service lint"
+    "lint": "vue-cli-service lint",
+    "format": "prettier --write ."
   },
   "dependencies": {
     "bootstrap": "^4.0.0-beta.2",
@@ -248,6 +249,7 @@ django_airavata/apps/myapp):
     "babel-eslint": "^10.0.1",
     "eslint": "^5.8.0",
     "eslint-plugin-vue": "^5.0.0-0",
+    "prettier": "^2.1.2",
     "vue-template-compiler": "^2.5.21",
     "webpack-bundle-tracker": "^0.4.2-beta"
   },
diff --git a/requirements-dev.txt b/requirements-dev.txt
index b5a0618..229feeb 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,7 +1,7 @@
 -r requirements.txt
 autopep8==1.3.5
 flake8==3.5.0
-flake8-isort==2.5
+flake8-isort==4.0.0
 isort==5.2.2
 mkdocs==1.0.4
 Markdown==3.2.1