├── .gitignore
├── .idea
├── Jira2Notion.iml
├── encodings.xml
├── inspectionProfiles
│ └── Project_Default.xml
├── misc.xml
├── modules.xml
├── vcs.xml
└── workspace.xml
├── .pylintrc
├── .vscode
└── launch.json
├── Chrome - Jira to Notion.applescript
├── LICENSE
├── Safari - Jira to Notion.applescript
├── config.py
├── gui.py
├── jira_manager.py
├── main.py
├── notion_dao
├── __init__.py
├── api_v1.py
├── api_v2.py
├── dao.py
└── factory.py
├── readme.md
├── requirements.txt
├── sample_config.txt
└── screenshot.png
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
--------------------------------------------------------------------------------
/.idea/Jira2Notion.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | 1576644203242
81 |
82 |
83 | 1576644203242
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
--------------------------------------------------------------------------------
/.pylintrc:
--------------------------------------------------------------------------------
1 | [MESSAGES CONTROL]
2 | disable=W0703, R0902, R0903, R1716, R0801, C0200, R0916, R0914, W0603
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 |
8 | {
9 | "name": "Python: Module",
10 | "type": "python",
11 | "request": "launch",
12 | "module": "main",
13 | "justMyCode": false
14 | }
15 | ]
16 | }
--------------------------------------------------------------------------------
/Chrome - Jira to Notion.applescript:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/keremkoseoglu/Jira2Notion/414c758113129dc4cc9595507f3c55b21ae42dc7/Chrome - Jira to Notion.applescript
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Dr. Kerem Koseoglu
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Safari - Jira to Notion.applescript:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/keremkoseoglu/Jira2Notion/414c758113129dc4cc9595507f3c55b21ae42dc7/Safari - Jira to Notion.applescript
--------------------------------------------------------------------------------
/config.py:
--------------------------------------------------------------------------------
1 | """ Configuration module """
2 | import json
3 | import os
4 |
5 |
6 | class Config:
7 | """ Configuration class """
8 | _CONFIG_FILE = "/Users/kerem/Documents/etc/config/jira2notion.txt" # Check sample_config.txt
9 |
10 | def __init__(self):
11 | # Read text file
12 | script_dir = os.path.dirname(__file__)
13 | config_path = os.path.join(script_dir, self._CONFIG_FILE)
14 | txt_file = open(config_path, "r")
15 | txt_content = txt_file.read()
16 | txt_file.close()
17 | json_data = json.loads(txt_content)
18 |
19 | # Parse contents
20 | self.notion_token_v2 = json_data["config"]["notion"]["token_v2"]
21 | self.notion_page = json_data["config"]["notion"]["page"]
22 | self.notion_comment_count = int(json_data["config"]["note"]["comment_count"])
23 |
24 | self.jira_base_url = json_data["config"]["jira"]["base_url"]
25 | self.jira_username = json_data["config"]["jira"]["username"]
26 | self.jira_password = json_data["config"]["jira"]["password"]
27 |
28 | if "notion_official" in json_data["config"]:
29 | self.notion_official_configured = True
30 | self.notion_official_version = json_data["config"]["notion_official"]["version"]
31 | self.notion_official_token = json_data["config"]["notion_official"]["token"]
32 | self.notion_official_database = json_data["config"]["notion_official"]["database"]
33 | else:
34 | self.notion_official_configured = False
35 | self.notion_official_version = ""
36 | self.notion_official_token = ""
37 | self.notion_official_database = ""
38 |
--------------------------------------------------------------------------------
/gui.py:
--------------------------------------------------------------------------------
1 | """ GUI module """
2 | import tkinter as tk
3 | from tkinter import DISABLED
4 | import sys
5 |
6 | class _Popup(tk.Tk):
7 | """ Popup """
8 | def __init__(self, callback):
9 | tk.Tk.__init__(self)
10 | self.popup = tk.Toplevel(self)
11 | self.popup.wm_title("Issue")
12 | self.popup.protocol("WM_DELETE_WINDOW", _Popup.on_close)
13 | self.popup.tkraise(self)
14 | tk.Label(self.popup, text="Issue number").pack(side="left", fill="x", pady=10, padx=10)
15 | self.issue_code = tk.StringVar(self.popup)
16 | tk.Entry(self.popup, textvariable=self.issue_code).pack(side="left", fill="x")
17 | self.button = tk.Button(self.popup, text="Transfer", command=self.on_button)
18 | self.button.pack(fill="x")
19 | self.callback = callback
20 | self.withdraw()
21 |
22 | def on_button(self):
23 | """ Called when OK is clicked """
24 | self.button["state"] = DISABLED
25 | self.popup.update()
26 | self.callback(self.issue_code.get())
27 |
28 | @staticmethod
29 | def on_close():
30 | """ Called when window is closed """
31 | sys.exit(0)
32 |
33 |
34 | def get_value_by_popup(callback):
35 | """ Main Popup function """
36 | app = _Popup(callback)
37 | app.mainloop()
38 |
--------------------------------------------------------------------------------
/jira_manager.py:
--------------------------------------------------------------------------------
1 | """ Jira manager module """
2 | from jira import JIRA
3 |
4 |
5 | class JiraManager:
6 | """ Jira manager class """
7 | _ISSUE_URL_DECORATOR = "/browse/"
8 |
9 | def __init__(self, Config):
10 | self._config = Config
11 |
12 | options = {
13 | "server": self._config.jira_base_url
14 | }
15 | self._jira = JIRA(
16 | options,
17 | basic_auth=(self._config.jira_username, self._config.jira_password))
18 |
19 | def get_issue(self, issue_key: str):
20 | """ Returns the issue having the key issue_key """
21 | issue = self._jira.issue(issue_key)
22 | return issue
23 |
24 | def get_url(self, issue_key: str) -> str:
25 | """ Returns the issue URL of the given issue key """
26 | return self._config.jira_base_url + self._ISSUE_URL_DECORATOR + issue_key
27 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | """ Program entry point """
2 | import sys
3 | from config import Config
4 | from notion_dao.factory import get_instance as get_notion_instance
5 | from jira_manager import JiraManager
6 | from gui import get_value_by_popup
7 |
8 | def sync_issue(issue_code: str):
9 | """ Reads the given issue from Jira and transfers to Notion """
10 | my_config = Config()
11 | my_jira_manager = JiraManager(my_config)
12 | my_notion_manager = get_notion_instance(my_config)
13 |
14 | issue = my_jira_manager.get_issue(issue_code)
15 | my_notion_manager.create_page(issue, my_jira_manager)
16 | sys.exit(0)
17 |
18 | if __name__ == "__main__":
19 | if len(sys.argv) >= 2:
20 | desired_issue = sys.argv[1]
21 | sync_issue(desired_issue)
22 | else:
23 | get_value_by_popup(sync_issue)
24 |
--------------------------------------------------------------------------------
/notion_dao/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/keremkoseoglu/Jira2Notion/414c758113129dc4cc9595507f3c55b21ae42dc7/notion_dao/__init__.py
--------------------------------------------------------------------------------
/notion_dao/api_v1.py:
--------------------------------------------------------------------------------
1 | """ Notion unofficial API module """
2 | from jira.resources import Issue
3 | from notion.client import NotionClient
4 | from notion.block import PageBlock
5 | from notion.block import TextBlock
6 | from notion.block import HeaderBlock
7 | from notion.block import TodoBlock
8 | from notion.block import BookmarkBlock
9 | from notion.block import SubheaderBlock
10 | from notion.block import DividerBlock
11 | from notion.block import QuoteBlock
12 | from config import Config
13 | from jira_manager import JiraManager
14 | from notion_dao.dao import NotionDAO
15 |
16 | class APIv1(NotionDAO):
17 | """ Unofficial Notion API implementation """
18 | def __init__(self, c: Config):
19 | super().__init__(c)
20 | self._client = NotionClient(token_v2=self._config.notion_token_v2)
21 | self._page = self._client.get_block(self._config.notion_page)
22 |
23 | def create_page(self, issue: Issue, jira_man: JiraManager, with_comments: bool = False):
24 | """ Creation of a new Notion page """
25 | try:
26 | title_key = issue.fields.parent.key
27 | except Exception:
28 | title_key = issue.key
29 |
30 | title = f"{title_key} - {issue.fields.summary}"
31 |
32 | subpage = self._page.children.add_new(PageBlock, title=title)
33 |
34 | subpage.children.add_new(
35 | BookmarkBlock,
36 | link=jira_man.get_url(issue.key), title=issue.key, description=issue.fields.summary)
37 | subpage.children.add_new(TextBlock, title=issue.fields.description)
38 | subpage.children.add_new(DividerBlock)
39 | subpage.children.add_new(HeaderBlock, title="İşler")
40 | subpage.children.add_new(TodoBlock, title="...")
41 | subpage.children.add_new(DividerBlock)
42 | subpage.children.add_new(HeaderBlock, title="Bittiğinde Jira'ya yazılacak")
43 | subpage.children.add_new(SubheaderBlock, title="Request notu")
44 | subpage.children.add_new(TextBlock, title="...")
45 | subpage.children.add_new(SubheaderBlock, title="Soft Config")
46 | subpage.children.add_new(TextBlock, title="...")
47 | subpage.children.add_new(SubheaderBlock, title="Yorum")
48 | subpage.children.add_new(TextBlock, title="...")
49 |
50 | if with_comments:
51 | subpage.children.add_new(DividerBlock)
52 | subpage.children.add_new(HeaderBlock, title="Mevcut yorumlar")
53 |
54 | for i in range(self._config.notion_comment_count):
55 | comment_idx = issue.fields.comment.total - 1 - i
56 | if comment_idx < 0:
57 | break
58 | current_comment = issue.fields.comment.comments[comment_idx]
59 | subpage.children.add_new(QuoteBlock, title=current_comment.body)
60 | subpage.children.add_new(DividerBlock)
61 |
--------------------------------------------------------------------------------
/notion_dao/api_v2.py:
--------------------------------------------------------------------------------
1 | """ Notion official API module """
2 | import json
3 | import requests
4 | from requests.structures import CaseInsensitiveDict
5 | from jira.resources import Issue
6 | from config import Config
7 | from jira_manager import JiraManager
8 | from notion_dao.dao import NotionDAO
9 |
10 | _PAGE_URL = "https://api.notion.com/v1/pages"
11 |
12 | class APIv2(NotionDAO):
13 | """ Official Notion API implementation """
14 | def __init__(self, c: Config):
15 | super().__init__(c)
16 |
17 | def create_page(self, issue: Issue, jira_man: JiraManager, with_comments: bool = False):
18 | """ Creation of a new Notion page """
19 | global _PAGE_URL
20 |
21 | # Get details from JIRA
22 | try:
23 | title_key = issue.fields.parent.key
24 | except Exception:
25 | title_key = issue.key
26 |
27 | title = f"{title_key} - {issue.fields.summary}"
28 | link = jira_man.get_url(issue.key)
29 |
30 | description = issue.fields.description
31 | if description is None:
32 | description = "(No description)"
33 |
34 | # Post to Notion
35 | headers = {"Content-Type": "application/json",
36 | "Notion-Version": self._config.notion_official_version,
37 | "Authorization": "Bearer " + self._config.notion_official_token}
38 |
39 | body = {
40 | "parent": { "database_id": self._config.notion_official_database },
41 | "properties": {
42 | "title": { "title": [{ "text": { "content": title } }] },
43 | "URL": { "type": "url", "url": link }
44 | },
45 | "children": [
46 | {
47 | "object": "block",
48 | "type": "heading_1",
49 | "heading_1": { "text": [{ "type": "text", "text": { "content": "Comments" } } ] }
50 | },
51 | {
52 | "object": "block",
53 | "type": "paragraph",
54 | "paragraph": { "text": [{ "type": "text", "text": { "content": "..." } } ] }
55 | }
56 | ]
57 | }
58 |
59 | response = requests.post(_PAGE_URL, data=json.dumps(body), headers=headers)
60 |
61 | if response.status_code != 200:
62 | raise Exception(f"Notion API error: {response.reason}")
63 |
--------------------------------------------------------------------------------
/notion_dao/dao.py:
--------------------------------------------------------------------------------
1 | """ Notion Data Access Object module """
2 | from abc import ABC, abstractmethod
3 | from jira.resources import Issue
4 | from jira_manager import JiraManager
5 | from config import Config
6 |
7 | class NotionDAO(ABC):
8 | """ Notion Data Access Object class
9 | This abstract class follows the logic of the well known
10 | Data Access Object design pattern. Google it for details.
11 | """
12 | def __init__(self, c: Config):
13 | self._config = c
14 |
15 | @abstractmethod
16 | def create_page(self, issue: Issue, jira_man: JiraManager, with_comments: bool = False):
17 | """ Creation of a new Notion page """
18 | pass
19 |
--------------------------------------------------------------------------------
/notion_dao/factory.py:
--------------------------------------------------------------------------------
1 | """ Notion object factory module """
2 | from config import Config
3 | from notion_dao.dao import NotionDAO
4 | from notion_dao.api_v1 import APIv1
5 | from notion_dao.api_v2 import APIv2
6 |
7 | def get_instance(c: Config) -> NotionDAO:
8 | """ Returns a new notion object """
9 | if c.notion_official_configured:
10 | result = APIv2(c)
11 | else:
12 | result = APIv1(c)
13 | return result
14 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # Jira to Notion
2 |
3 | This little program will capture a Jira issue and create a corresponding Notion subpage. Mac users can fetch the current issue from the foremost Chrome or Safari window. Others will get a popup asking for the issue number.
4 |
5 | 
6 |
7 | ## Installation
8 |
9 | ### OS independent
10 |
11 | * Install Python First. The program won't work unless you install Python. [Click here](https://www.python.org/downloads/mac-osx/) to install Python. [The official Python docs](https://docs.python.org/3/using/mac.html) are good enough to help you through the installation.
12 |
13 | * Create a folder (presumably called j2n), and download all of the files in this repository there
14 |
15 | * Open a terminal window, go to the j2n folder and type the following commands:
16 |
17 | ```
18 | python3 -m venv venv
19 | ```
20 |
21 | ### Windows
22 |
23 | If you are using Windows, continue with the following commands:
24 |
25 | ```
26 | venv\Scripts\activate.bat
27 | pip install notion
28 | pip install jira
29 | ```
30 |
31 | ### Mac / Linux
32 |
33 | If you are using Mac or Linux, continue with the following commands:
34 |
35 | ```
36 | . venv/bin/activate
37 | pip install notion
38 | pip install jira
39 | ```
40 |
41 | ## Setup
42 |
43 | ### OS independent
44 |
45 | * Ensure that you have [Notion](www.notion.so) and Jira accounts (doh)
46 | * Create a new config file which looks like sample_config.txt. You are going to fill this file with your credentials. Jira credentials are intuitive. Notion credentials are explained below.
47 | * Ensure that config.py points to your own configuration file, which you have prepared above
48 |
49 | Jira2Notion can run via to distinct API's: The (deferred, slow) unofficial API, and the (recommended, fast) official API.
50 |
51 | If you want to use the unofficial Notion API:
52 |
53 | * Remove the "notion_official" section from your config file
54 | * Fill the "notion" section in your config file with the following values:
55 | * token_v2: The value you should enter here is stored in a cookie called token_v2, which will be found in the browser you are logged in to Notion.
56 | * page: This is the URL of the page you are going to transfer your Jira issues to. Simply copy & paste the page URL from your browser.
57 | * (Optional) modify **notion_dao/api_v1.py** to change the content of your cards
58 |
59 | If you want to use the official API:
60 |
61 | * Follow the steps in [Notion API documentation](https://developers.notion.com) - check "Getting Started" to enable API's in your Notion account. You will end up with a database ID and secret token.
62 | * Put those values into the "notion_official" section of your config file.
63 | * (Optional) modify **notion_dao/api_v2.py** to change the content of your cards
64 |
65 | ### Mac OS (optional)
66 |
67 | If you wish to fetch the Jira issue in your current browser window automatically; open "Chrome - Jira to Notion.applescript" or "Safari - Jira to Notion.applescript" using Apple Script Editor and export as j2n.app (or whatever name you like)
68 |
69 | ## Usage
70 |
71 | ### Windows
72 |
73 | Simply run main.py. This will open a popup and ask for your Jira issue number. The issue you enter here will be read from Jira and transferred to Notion. You can run main.py from the command line by typing:
74 |
75 | ```
76 | cd j2n
77 | venv\Scripts\activate.bat
78 | python3 main.py
79 | ```
80 |
81 | Obviously, you should change the folder name j2n with your own installation path. Feel free to create a .bat file including this command for easy startup.
82 |
83 | ### Linux
84 |
85 | Simply run main.py. This will open a popup and ask for your Jira issue number. The issue you enter here will be read from Jira and transferred to Notion. You can run main.py from the command line by typing:
86 |
87 | ```
88 | cd j2n
89 | . venv/bin/activate
90 | python3 main.py
91 | ```
92 |
93 | Obviously, you should change the folder name j2n with your own installation path. Feel free to create a .sh file including this command for easy startup.
94 |
95 | ### Mac OS
96 |
97 | Follow the Linux steps for the popup.
98 |
99 | If you have completed the optional Mac setup steps; you can also transfer the Jira issue in your current browser to Notion.
100 | * Open a new issue in Chrome or Safari
101 | * Run j2n.app
102 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | jira
2 | notion
--------------------------------------------------------------------------------
/sample_config.txt:
--------------------------------------------------------------------------------
1 | {"config": {
2 | "jira": {
3 | "base_url": "http://www.myjira.com",
4 | "username": "my_jira_user",
5 | "password": "my_jira_pass"
6 | },
7 | "mac": {
8 | "tmp_file": "/Users/kerem/Downloads/j2n.txt"
9 | },
10 | "note": {
11 | "comment_count": 3
12 | },
13 | "notion": {
14 | "token_v2": "111222333444aa",
15 | "page": "https://www.notion.so/my_notion_account/my_notion_page"
16 | },
17 | "notion_official": {
18 | "version": "2021-05-13",
19 | "token": "secret_a9.......",
20 | "database": "9530bb......."
21 | }
22 | }}
--------------------------------------------------------------------------------
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/keremkoseoglu/Jira2Notion/414c758113129dc4cc9595507f3c55b21ae42dc7/screenshot.png
--------------------------------------------------------------------------------