Add Github Connector (#11259)
- Add new module ERPNext Integrations
diff --git a/erpnext/erpnext_integrations/__init__.py b/erpnext/erpnext_integrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/erpnext_integrations/__init__.py
diff --git a/erpnext/erpnext_integrations/connectors/__init__.py b/erpnext/erpnext_integrations/connectors/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/erpnext_integrations/connectors/__init__.py
diff --git a/erpnext/erpnext_integrations/connectors/github_connection.py b/erpnext/erpnext_integrations/connectors/github_connection.py
new file mode 100644
index 0000000..ab7708d
--- /dev/null
+++ b/erpnext/erpnext_integrations/connectors/github_connection.py
@@ -0,0 +1,45 @@
+from __future__ import unicode_literals
+import frappe
+from frappe.data_migration.doctype.data_migration_connector.connectors.base import BaseConnection
+from github import Github
+
+class GithubConnection(BaseConnection):
+ def __init__(self, connector):
+ self.connector = connector
+
+ try:
+ password = self.get_password()
+ except frappe.AuthenticationError:
+ password = None
+
+ if self.connector.username and password:
+ self.connection = Github(self.connector.username, self.get_password())
+ else:
+ self.connection = Github()
+
+ self.name_field = 'id'
+
+ def insert(self, doctype, doc):
+ pass
+
+ def update(self, doctype, doc, migration_id):
+ pass
+
+ def delete(self, doctype, migration_id):
+ pass
+
+ def get(self, remote_objectname, fields=None, filters=None, start=0, page_length=10):
+ repo = filters.get('repo')
+
+ if remote_objectname == 'Milestone':
+ return self.get_milestones(repo, start, page_length)
+ if remote_objectname == 'Issue':
+ return self.get_issues(repo, start, page_length)
+
+ def get_milestones(self, repo, start=0, page_length=10):
+ _repo = self.connection.get_repo(repo)
+ return list(_repo.get_milestones()[start:start+page_length])
+
+ def get_issues(self, repo, start=0, page_length=10):
+ _repo = self.connection.get_repo(repo)
+ return list(_repo.get_issues()[start:start+page_length])
diff --git a/erpnext/erpnext_integrations/data_migration_mapping/__init__.py b/erpnext/erpnext_integrations/data_migration_mapping/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/erpnext_integrations/data_migration_mapping/__init__.py
diff --git a/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/__init__.py b/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/__init__.py
new file mode 100644
index 0000000..5f0f691
--- /dev/null
+++ b/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/__init__.py
@@ -0,0 +1,11 @@
+import frappe
+
+def pre_process(issue):
+
+ project = frappe.db.get_value('Project', filters={'project_name': issue.milestone})
+ return {
+ 'title': issue.title,
+ 'body': frappe.utils.to_html(issue.body or ''),
+ 'state': issue.state.title(),
+ 'project': project or ''
+ }
diff --git a/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/issue_to_task.json b/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/issue_to_task.json
new file mode 100644
index 0000000..e945ba2
--- /dev/null
+++ b/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/issue_to_task.json
@@ -0,0 +1,36 @@
+{
+ "condition": "{\"repo\":\"frappe/erpnext\"}",
+ "creation": "2017-10-16 16:03:32.772191",
+ "docstatus": 0,
+ "doctype": "Data Migration Mapping",
+ "fields": [
+ {
+ "is_child_table": 0,
+ "local_fieldname": "subject",
+ "remote_fieldname": "title"
+ },
+ {
+ "is_child_table": 0,
+ "local_fieldname": "description",
+ "remote_fieldname": "body"
+ },
+ {
+ "is_child_table": 0,
+ "local_fieldname": "status",
+ "remote_fieldname": "state"
+ }
+ ],
+ "idx": 0,
+ "local_doctype": "Task",
+ "local_primary_key": "name",
+ "mapping_name": "Issue to Task",
+ "mapping_type": "Pull",
+ "migration_id_field": "github_sync_id",
+ "modified": "2017-10-20 11:48:54.575993",
+ "modified_by": "Administrator",
+ "name": "Issue to Task",
+ "owner": "Administrator",
+ "page_length": 10,
+ "remote_objectname": "Issue",
+ "remote_primary_key": "id"
+}
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/__init__.py b/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/__init__.py
new file mode 100644
index 0000000..212f81b
--- /dev/null
+++ b/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/__init__.py
@@ -0,0 +1,6 @@
+def pre_process(milestone):
+ return {
+ 'title': milestone.title,
+ 'description': milestone.description,
+ 'state': milestone.state.title()
+ }
diff --git a/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/milestone_to_project.json b/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/milestone_to_project.json
new file mode 100644
index 0000000..5a3e07e
--- /dev/null
+++ b/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/milestone_to_project.json
@@ -0,0 +1,36 @@
+{
+ "condition": "{\"repo\": \"frappe/erpnext\"}",
+ "creation": "2017-10-13 11:16:49.664925",
+ "docstatus": 0,
+ "doctype": "Data Migration Mapping",
+ "fields": [
+ {
+ "is_child_table": 0,
+ "local_fieldname": "project_name",
+ "remote_fieldname": "title"
+ },
+ {
+ "is_child_table": 0,
+ "local_fieldname": "notes",
+ "remote_fieldname": "description"
+ },
+ {
+ "is_child_table": 0,
+ "local_fieldname": "status",
+ "remote_fieldname": "state"
+ }
+ ],
+ "idx": 0,
+ "local_doctype": "Project",
+ "local_primary_key": "project_name",
+ "mapping_name": "Milestone to Project",
+ "mapping_type": "Pull",
+ "migration_id_field": "github_sync_id",
+ "modified": "2017-10-20 11:48:54.552305",
+ "modified_by": "Administrator",
+ "name": "Milestone to Project",
+ "owner": "Administrator",
+ "page_length": 10,
+ "remote_objectname": "Milestone",
+ "remote_primary_key": "id"
+}
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/data_migration_plan/github_sync/github_sync.json b/erpnext/erpnext_integrations/data_migration_plan/github_sync/github_sync.json
new file mode 100644
index 0000000..20eb387
--- /dev/null
+++ b/erpnext/erpnext_integrations/data_migration_plan/github_sync/github_sync.json
@@ -0,0 +1,22 @@
+{
+ "creation": "2017-10-13 11:16:53.600026",
+ "docstatus": 0,
+ "doctype": "Data Migration Plan",
+ "idx": 0,
+ "mappings": [
+ {
+ "enabled": 1,
+ "mapping": "Milestone to Project"
+ },
+ {
+ "enabled": 1,
+ "mapping": "Issue to Task"
+ }
+ ],
+ "modified": "2017-10-20 11:48:54.496123",
+ "modified_by": "Administrator",
+ "module": "ERPNext Integrations",
+ "name": "GitHub Sync",
+ "owner": "Administrator",
+ "plan_name": "GitHub Sync"
+}
\ No newline at end of file
diff --git a/erpnext/modules.txt b/erpnext/modules.txt
index 5e9f6c7..79ded14 100644
--- a/erpnext/modules.txt
+++ b/erpnext/modules.txt
@@ -17,3 +17,4 @@
Regional
Healthcare
Restaurant
+ERPNext Integrations
\ No newline at end of file