add jira support
This commit is contained in:
		
							
								
								
									
										16
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | # Todoist integrator | ||||||
|  |  | ||||||
|  | ## Install | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | pip3 install -r requirements.txt | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Jira intergration | ||||||
|  |  | ||||||
|  | Set system env:  | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | export JIRA_API_TOKEN=<token> | ||||||
|  | ``` | ||||||
|  |  | ||||||
| @@ -3,6 +3,9 @@ gitea_url = https://git.cynarski.pl | |||||||
| gitea_token =  | gitea_token =  | ||||||
| todoist_login =   | todoist_login =   | ||||||
| todoist_pass =  | todoist_pass =  | ||||||
|  | jira_url =  | ||||||
|  | jira_username =  | ||||||
|  |  | ||||||
|  |  | ||||||
| [gitea_projects] | [gitea_projects] | ||||||
| sCRM/apiServer = sCRM | sCRM/apiServer = sCRM | ||||||
|   | |||||||
							
								
								
									
										35
									
								
								todoist.py
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								todoist.py
									
									
									
									
									
								
							| @@ -8,6 +8,7 @@ import json | |||||||
| import configparser | import configparser | ||||||
| import marshmallow.validate | import marshmallow.validate | ||||||
| import re | import re | ||||||
|  | import os | ||||||
|  |  | ||||||
| from dataclasses import field | from dataclasses import field | ||||||
| from marshmallow_dataclass import dataclass | from marshmallow_dataclass import dataclass | ||||||
| @@ -16,12 +17,14 @@ from pytodoist import todoist | |||||||
| from pprint import pprint | from pprint import pprint | ||||||
| from types import SimpleNamespace as Namespace | from types import SimpleNamespace as Namespace | ||||||
| from jira import JIRA | from jira import JIRA | ||||||
|  | from pprint import pprint | ||||||
|  |  | ||||||
| config = configparser.ConfigParser() | config = configparser.ConfigParser() | ||||||
| config.read('./config.ini') | config.read('./config.ini') | ||||||
| logging.basicConfig(stream=sys.stderr, level=logging.INFO, format='%(asctime)s %(levelname)s %(filename)s: %(message)s') | logging.basicConfig(stream=sys.stderr, level=logging.INFO, format='%(asctime)s %(levelname)s %(filename)s: %(message)s') | ||||||
| logger = logging.getLogger("todoist-im") | logger = logging.getLogger("todoist-im") | ||||||
|  |  | ||||||
|  |  | ||||||
| @dataclass | @dataclass | ||||||
| class GiteaUser: | class GiteaUser: | ||||||
| 	avatar_url: str | 	avatar_url: str | ||||||
| @@ -49,12 +52,36 @@ class GiteaIssue: | |||||||
|  |  | ||||||
| gitea = pytea.API(config['auth']['gitea_url'], token=config['auth']['gitea_token']) | gitea = pytea.API(config['auth']['gitea_url'], token=config['auth']['gitea_token']) | ||||||
| todo = todoist.login(config['auth']['todoist_login'], config['auth']['todoist_pass']) | todo = todoist.login(config['auth']['todoist_login'], config['auth']['todoist_pass']) | ||||||
|  | jiraOptions = {'server': config['auth']['jira_url']} | ||||||
|  | jira = JIRA(options=jiraOptions, basic_auth=(config['auth']['jira_username'], os.environ['JIRA_API_TOKEN'] )) | ||||||
|  |  | ||||||
| userJson = gitea.get("/user").json() | userJson = gitea.get("/user").json() | ||||||
| user, _ = GiteaUser.Schema().load(userJson) | user, _ = GiteaUser.Schema().load(userJson) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | for jiraProject in config['jira_projects']: | ||||||
|  | 	logger.info("Jira.... " + jiraProject) | ||||||
|  | 	totdoistProject = config['jira_projects'][jiraProject] | ||||||
|  | 	for issue in jira.search_issues('project='+jiraProject.upper()+' and (assignee = currentUser() or assignee = unassigned) and status = "In Progress" and status = "To Do" '): | ||||||
|  | 		addTask = True | ||||||
|  | 		#print('{}: {} === {} ==== {} === {}'.format(issue.key, issue.fields.summary, issue.fields.status, totdoistProject, issue.fields.description)) | ||||||
|  | 		todoProject = todo.get_project(totdoistProject) | ||||||
|  | 		tasks = todoProject.get_tasks() | ||||||
|  |  | ||||||
|  | 		for task in tasks: | ||||||
|  | 			if ("["+issue.key +"] "+ issue.fields.summary) == task.content: | ||||||
|  | 				logger.info("Task exists in todoist ... %r", issue.fields.summary) | ||||||
|  | 				addTask = False | ||||||
|  |  | ||||||
|  | 		if addTask: | ||||||
|  | 			logger.info("Adding ... %r", issue.fields.summary) | ||||||
|  | 			task = todoProject.add_task("["+issue.key +"] "+ issue.fields.summary) | ||||||
|  | 			task.add_note(config['auth']['jira_url']+'/browse/'+issue.key) | ||||||
|  | 			task.add_note("Description: "+str(issue.fields.description)) | ||||||
|  |          | ||||||
|  |  | ||||||
| for giteaProject in config['gitea_projects']: | for giteaProject in config['gitea_projects']: | ||||||
| 	logger.info("Scanning ... "+ config['auth']['gitea_url'] + giteaProject) | 	logger.info("Scanning ... "+ config['auth']['gitea_url'] + "/" + giteaProject) | ||||||
| 	totdoistProject = config['gitea_projects'][giteaProject] | 	totdoistProject = config['gitea_projects'][giteaProject] | ||||||
| 	issuesJson = json.loads(gitea.get("/repos/"+giteaProject.strip()+"/issues" , params={"state": "open", "page": 0}).text) | 	issuesJson = json.loads(gitea.get("/repos/"+giteaProject.strip()+"/issues" , params={"state": "open", "page": 0}).text) | ||||||
| 	todoProject = todo.get_project(totdoistProject) | 	todoProject = todo.get_project(totdoistProject) | ||||||
| @@ -71,11 +98,7 @@ for giteaProject in config['gitea_projects']: | |||||||
| 				 | 				 | ||||||
|  |  | ||||||
| 		if addTask: | 		if addTask: | ||||||
| 			pprint(addTask) |  | ||||||
| 			pprint(issue.title) |  | ||||||
| 			logger.info("Adding ... %r", issue.title) | 			logger.info("Adding ... %r", issue.title) | ||||||
| 			task = todoProject.add_task(issue.title) | 			task = todoProject.add_task(issue.title) | ||||||
| 			task.add_note(config['auth']['gitea_url']+giteaProject+"/issues/"+str(issue.number)) | 			task.add_note(config['auth']['gitea_url']+giteaProject+"/issues/"+str(issue.number)) | ||||||
| 			 | 				 | ||||||
| 		 |  | ||||||
| 	 |  | ||||||
		Reference in New Issue
	
	Block a user