def _import_project_data(self, data, options): board = data labels = board['labels'] statuses = board['lists'] project_template = ProjectTemplate.objects.get(slug=options.get('template', "kanban")) project_template.us_statuses = [] counter = 0 for us_status in statuses: if counter == 0: project_template.default_options["us_status"] = us_status['name'] counter += 1 if us_status['name'] not in [s['name'] for s in project_template.us_statuses]: project_template.us_statuses.append({ "name": us_status['name'], "slug": slugify(us_status['name']), "is_closed": False, "is_archived": True if us_status['closed'] else False, "color": "#999999", "wip_limit": None, "order": us_status['pos'], }) project_template.task_statuses = [] project_template.task_statuses.append({ "name": "Incomplete", "slug": "incomplete", "is_closed": False, "color": "#ff8a84", "order": 1, }) project_template.task_statuses.append({ "name": "Complete", "slug": "complete", "is_closed": True, "color": "#669900", "order": 2, }) project_template.default_options["task_status"] = "Incomplete" project_template.roles.append({ "name": "Trello", "slug": "trello", "computable": False, "permissions": project_template.roles[0]['permissions'], "order": 70, }) tags_colors = [] for label in labels: name = label['name'] if not name: name = label['color'] name = name.lower() color = self._ensure_hex_color(label['color']) tags_colors.append([name, color]) project = Project( name=options.get('name', None) or board['name'], description=options.get('description', None) or board['desc'], owner=self._user, tags_colors=tags_colors, creation_template=project_template, is_private=options.get('is_private', False), ) (can_create, error_message) = projects_service.check_if_project_can_be_created_or_updated(project) if not can_create: raise exceptions.NotEnoughSlotsForProject(project.is_private, 1, error_message) project.save() if board.get('organization', None): trello_avatar_template = "https://trello-logos.s3.amazonaws.com/{}/170.png" project_logo_url = trello_avatar_template.format(board['organization']['logoHash']) data = requests.get(project_logo_url) project.logo.save("logo.png", ContentFile(data.content), save=True) UserStoryCustomAttribute.objects.create( name="Due", description="Due date", type="date", order=1, project=project ) import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "trello") return project
def _import_project_data(self, data, options): board = data labels = board['labels'] statuses = board['lists'] project_template = ProjectTemplate.objects.get( slug=options.get('template', "kanban")) project_template.us_statuses = [] counter = 0 for us_status in statuses: if counter == 0: project_template.default_options["us_status"] = us_status[ 'name'] counter += 1 if us_status['name'] not in [ s['name'] for s in project_template.us_statuses ]: project_template.us_statuses.append({ "name": us_status['name'], "slug": slugify(us_status['name']), "is_closed": False, "is_archived": True if us_status['closed'] else False, "color": "#999999", "wip_limit": None, "order": us_status['pos'], }) project_template.task_statuses = [] project_template.task_statuses.append({ "name": "Incomplete", "slug": "incomplete", "is_closed": False, "color": "#ff8a84", "order": 1, }) project_template.task_statuses.append({ "name": "Complete", "slug": "complete", "is_closed": True, "color": "#669900", "order": 2, }) project_template.default_options["task_status"] = "Incomplete" project_template.roles.append({ "name": "Trello", "slug": "trello", "computable": False, "permissions": project_template.roles[0]['permissions'], "order": 70, }) tags_colors = [] for label in labels: name = label['name'] if not name: name = label['color'] name = name.lower() color = self._ensure_hex_color(label['color']) tags_colors.append([name, color]) project = Project( name=options.get('name', None) or board['name'], description=options.get('description', None) or board['desc'], owner=self._user, tags_colors=tags_colors, creation_template=project_template, is_private=options.get('is_private', False), ) (can_create, error_message ) = projects_service.check_if_project_can_be_created_or_updated( project) if not can_create: raise exceptions.NotEnoughSlotsForProject(project.is_private, 1, error_message) project.save() if board.get('organization', None): trello_avatar_template = "https://trello-logos.s3.amazonaws.com/{}/170.png" project_logo_url = trello_avatar_template.format( board['organization']['logoHash']) data = requests.get(project_logo_url) project.logo.save("logo.png", ContentFile(data.content), save=True) UserStoryCustomAttribute.objects.create(name="Due", description="Due date", type="date", order=1, project=project) import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "trello") return project
def _import_project_data(self, project_id, options): project = self._client.get_agile("/board/{}".format(project_id)) project_config = self._client.get_agile( "/board/{}/configuration".format(project_id)) if project['type'] == "scrum": project_template = ProjectTemplate.objects.get(slug="scrum") options['type'] = "scrum" elif project['type'] == "kanban": project_template = ProjectTemplate.objects.get(slug="kanban") options['type'] = "kanban" project_template.is_epics_activated = True project_template.epic_statuses = OrderedDict() project_template.us_statuses = OrderedDict() project_template.task_statuses = OrderedDict() project_template.issue_statuses = OrderedDict() counter = 0 for column in project_config['columnConfig']['columns']: column_slug = slugify(column['name']) project_template.epic_statuses[column_slug] = { "name": column['name'], "slug": column_slug, "is_closed": False, "is_archived": False, "color": "#999999", "wip_limit": None, "order": counter, } project_template.us_statuses[column_slug] = { "name": column['name'], "slug": column_slug, "is_closed": False, "is_archived": False, "color": "#999999", "wip_limit": None, "order": counter, } project_template.task_statuses[column_slug] = { "name": column['name'], "slug": column_slug, "is_closed": False, "is_archived": False, "color": "#999999", "wip_limit": None, "order": counter, } project_template.issue_statuses[column_slug] = { "name": column['name'], "slug": column_slug, "is_closed": False, "is_archived": False, "color": "#999999", "wip_limit": None, "order": counter, } counter += 1 project_template.epic_statuses = list( project_template.epic_statuses.values()) project_template.us_statuses = list( project_template.us_statuses.values()) project_template.task_statuses = list( project_template.task_statuses.values()) project_template.issue_statuses = list( project_template.issue_statuses.values()) project_template.default_options[ "epic_status"] = project_template.epic_statuses[0]['name'] project_template.default_options[ "us_status"] = project_template.us_statuses.values()[0]['name'] project_template.default_options[ "task_status"] = project_template.task_statuses.values()[0]['name'] project_template.default_options[ "issue_status"] = project_template.issue_statuses.values( )[0]['name'] project_template.points = [{ "value": None, "name": "?", "order": 0, }] main_permissions = project_template.roles[0]['permissions'] project_template.roles = [{ "name": "Main", "slug": "main", "computable": True, "permissions": main_permissions, "order": 70, }] project = Project.objects.create( name=options.get('name', None) or project['name'], description=options.get('description', None) or project.get('description', ''), owner=self._user, creation_template=project_template, is_private=options.get('is_private', False), ) self._create_custom_fields(project) import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "main") if project_template.slug == "scrum": for sprint in self._client.get_agile( "/board/{}/sprint".format(project_id))['values']: start_datetime = sprint.get('startDate', None) end_datetime = sprint.get('startDate', None) start_date = datetime.date.today() if start_datetime: start_date = start_datetime[:10] end_date = datetime.date.today() if end_datetime: end_date = end_datetime[:10] milestone = Milestone.objects.create( name=sprint['name'], slug=slugify(sprint['name']), owner=self._user, project=project, estimated_start=start_date, estimated_finish=end_date, ) Milestone.objects.filter(id=milestone.id).update( created_date=start_datetime or datetime.datetime.now(), modified_date=start_datetime or datetime.datetime.now(), ) return project
def _import_project_data(self, repo, options): users_bindings = options.get('users_bindings', {}) project_template = ProjectTemplate.objects.get(slug=options['template']) if options['type'] == "user_stories": project_template.us_statuses = [] project_template.us_statuses.append({ "name": "Open", "slug": "open", "is_closed": False, "is_archived": False, "color": "#ff8a84", "wip_limit": None, "order": 1, }) project_template.us_statuses.append({ "name": "Closed", "slug": "closed", "is_closed": True, "is_archived": False, "color": "#669900", "wip_limit": None, "order": 2, }) project_template.default_options["us_status"] = "Open" elif options['type'] == "issues": project_template.issue_statuses = [] project_template.issue_statuses.append({ "name": "Open", "slug": "open", "is_closed": False, "color": "#ff8a84", "order": 1, }) project_template.issue_statuses.append({ "name": "Closed", "slug": "closed", "is_closed": True, "color": "#669900", "order": 2, }) project_template.default_options["issue_status"] = "Open" project_template.roles.append({ "name": "Github", "slug": "github", "computable": False, "permissions": project_template.roles[0]['permissions'], "order": 70, }) tags_colors = [] for label in self._client.get("/repos/{}/labels".format(repo['full_name'])): name = label['name'].lower() color = "#{}".format(label['color']) tags_colors.append([name, color]) project = Project.objects.create( name=options.get('name', None) or repo['full_name'], description=options.get('description', None) or repo['description'], owner=self._user, tags_colors=tags_colors, creation_template=project_template, is_private=options.get('is_private', False), ) if 'organization' in repo and repo['organization'].get('avatar_url', None): data = requests.get(repo['organization']['avatar_url']) project.logo.save("logo.png", ContentFile(data.content), save=True) import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "github") for milestone in self._client.get("/repos/{}/milestones".format(repo['full_name'])): taiga_milestone = Milestone.objects.create( name=milestone['title'], owner=users_bindings.get(milestone.get('creator', {}).get('id', None), self._user), project=project, estimated_start=milestone['created_at'][:10], estimated_finish=milestone['due_on'][:10], ) Milestone.objects.filter(id=taiga_milestone.id).update( created_date=milestone['created_at'], modified_date=milestone['updated_at'], ) return project
def _import_project_data(self, project_id, options): project = self._client.get("/project/{}".format(project_id)) project_template = ProjectTemplate.objects.get(slug=options['template']) epic_statuses = OrderedDict() for issue_type in options.get('types_bindings', {}).get("epic", []): for status in issue_type['statuses']: epic_statuses[status['name']] = status us_statuses = OrderedDict() for issue_type in options.get('types_bindings', {}).get("us", []): for status in issue_type['statuses']: us_statuses[status['name']] = status task_statuses = OrderedDict() for issue_type in options.get('types_bindings', {}).get("task", []): for status in issue_type['statuses']: task_statuses[status['name']] = status issue_statuses = OrderedDict() for issue_type in options.get('types_bindings', {}).get("issue", []): for status in issue_type['statuses']: issue_statuses[status['name']] = status counter = 0 if epic_statuses: project_template.epic_statuses = [] project_template.is_epics_activated = True for epic_status in epic_statuses.values(): project_template.epic_statuses.append({ "name": epic_status['name'], "slug": slugify(epic_status['name']), "is_closed": False, "color": "#999999", "order": counter, }) counter += 1 if epic_statuses: project_template.default_options["epic_status"] = list(epic_statuses.values())[0]['name'] project_template.points = [{ "value": None, "name": "?", "order": 0, }] main_permissions = project_template.roles[0]['permissions'] project_template.roles = [{ "name": "Main", "slug": "main", "computable": True, "permissions": main_permissions, "order": 70, }] counter = 0 if us_statuses: project_template.us_statuses = [] for us_status in us_statuses.values(): project_template.us_statuses.append({ "name": us_status['name'], "slug": slugify(us_status['name']), "is_closed": False, "is_archived": False, "color": "#999999", "wip_limit": None, "order": counter, }) counter += 1 if us_statuses: project_template.default_options["us_status"] = list(us_statuses.values())[0]['name'] counter = 0 if task_statuses: project_template.task_statuses = [] for task_status in task_statuses.values(): project_template.task_statuses.append({ "name": task_status['name'], "slug": slugify(task_status['name']), "is_closed": False, "color": "#999999", "order": counter, }) counter += 1 if task_statuses: project_template.default_options["task_status"] = list(task_statuses.values())[0]['name'] counter = 0 if issue_statuses: project_template.issue_statuses = [] for issue_status in issue_statuses.values(): project_template.issue_statuses.append({ "name": issue_status['name'], "slug": slugify(issue_status['name']), "is_closed": False, "color": "#999999", "order": counter, }) counter += 1 if issue_statuses: project_template.default_options["issue_status"] = list(issue_statuses.values())[0]['name'] main_permissions = project_template.roles[0]['permissions'] project_template.roles = [{ "name": "Main", "slug": "main", "computable": True, "permissions": main_permissions, "order": 70, }] project = Project.objects.create( name=options.get('name', None) or project['name'], description=options.get('description', None) or project.get('description', ''), owner=self._user, creation_template=project_template, is_private=options.get('is_private', False), ) self._create_custom_fields(project) import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "main") return project
def _import_project_data(self, project_id, options): project = self._client.get("/project/{}".format(project_id)) project_template = ProjectTemplate.objects.get( slug=options['template']) epic_statuses = OrderedDict() for issue_type in options.get('types_bindings', {}).get("epic", []): for status in issue_type['statuses']: epic_statuses[status['name']] = status us_statuses = OrderedDict() for issue_type in options.get('types_bindings', {}).get("us", []): for status in issue_type['statuses']: us_statuses[status['name']] = status task_statuses = OrderedDict() for issue_type in options.get('types_bindings', {}).get("task", []): for status in issue_type['statuses']: task_statuses[status['name']] = status issue_statuses = OrderedDict() for issue_type in options.get('types_bindings', {}).get("issue", []): for status in issue_type['statuses']: issue_statuses[status['name']] = status counter = 0 if epic_statuses: project_template.epic_statuses = [] project_template.is_epics_activated = True for epic_status in epic_statuses.values(): project_template.epic_statuses.append({ "name": epic_status['name'], "slug": slugify(epic_status['name']), "is_closed": False, "color": "#999999", "order": counter, }) counter += 1 if epic_statuses: project_template.default_options["epic_status"] = list( epic_statuses.values())[0]['name'] project_template.points = [{ "value": None, "name": "?", "order": 0, }] main_permissions = project_template.roles[0]['permissions'] project_template.roles = [{ "name": "Main", "slug": "main", "computable": True, "permissions": main_permissions, "order": 70, }] counter = 0 if us_statuses: project_template.us_statuses = [] for us_status in us_statuses.values(): project_template.us_statuses.append({ "name": us_status['name'], "slug": slugify(us_status['name']), "is_closed": False, "is_archived": False, "color": "#999999", "wip_limit": None, "order": counter, }) counter += 1 if us_statuses: project_template.default_options["us_status"] = list( us_statuses.values())[0]['name'] counter = 0 if task_statuses: project_template.task_statuses = [] for task_status in task_statuses.values(): project_template.task_statuses.append({ "name": task_status['name'], "slug": slugify(task_status['name']), "is_closed": False, "color": "#999999", "order": counter, }) counter += 1 if task_statuses: project_template.default_options["task_status"] = list( task_statuses.values())[0]['name'] counter = 0 if issue_statuses: project_template.issue_statuses = [] for issue_status in issue_statuses.values(): project_template.issue_statuses.append({ "name": issue_status['name'], "slug": slugify(issue_status['name']), "is_closed": False, "color": "#999999", "order": counter, }) counter += 1 if issue_statuses: project_template.default_options["issue_status"] = list( issue_statuses.values())[0]['name'] main_permissions = project_template.roles[0]['permissions'] project_template.roles = [{ "name": "Main", "slug": "main", "computable": True, "permissions": main_permissions, "order": 70, }] project = Project.objects.create( name=options.get('name', None) or project['name'], description=options.get('description', None) or project.get('description', ''), owner=self._user, creation_template=project_template, is_private=options.get('is_private', False), ) self._create_custom_fields(project) import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "main") return project
def _import_project_data(self, project, options): users_bindings = options.get('users_bindings', {}) project_template = ProjectTemplate.objects.get( slug=options.get('template', 'scrum')) project_template.us_statuses = [] project_template.us_statuses.append({ "name": "Open", "slug": "open", "is_closed": False, "is_archived": False, "color": "#ff8a84", "wip_limit": None, "order": 1, }) project_template.us_statuses.append({ "name": "Closed", "slug": "closed", "is_closed": True, "is_archived": False, "color": "#669900", "wip_limit": None, "order": 2, }) project_template.default_options["us_status"] = "Open" project_template.task_statuses = [] project_template.task_statuses.append({ "name": "Open", "slug": "open", "is_closed": False, "color": "#ff8a84", "order": 1, }) project_template.task_statuses.append({ "name": "Closed", "slug": "closed", "is_closed": True, "color": "#669900", "order": 2, }) project_template.default_options["task_status"] = "Open" project_template.roles.append({ "name": "Asana", "slug": "asana", "computable": False, "permissions": project_template.roles[0]['permissions'], "order": 70, }) tags_colors = [] for tag in self._client.tags.find_by_workspace( project['workspace']['id'], fields=["name", "color"]): name = tag['name'].lower() color = tag['color'] tags_colors.append([name, color]) taiga_project = Project.objects.create( name=options.get('name', None) or project['name'], description=options.get('description', None) or project['notes'], owner=self._user, tags_colors=tags_colors, creation_template=project_template, is_private=options.get('is_private', False)) import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "asana") UserStoryCustomAttribute.objects.create(name="Due date", description="Due date", type="date", order=1, project=taiga_project) TaskCustomAttribute.objects.create(name="Due date", description="Due date", type="date", order=1, project=taiga_project) return taiga_project
def _import_project_data(self, repo, options): users_bindings = options.get("users_bindings", {}) project_template = ProjectTemplate.objects.get( slug=options["template"]) if options["type"] == "user_stories": project_template.us_statuses = [] project_template.us_statuses.append({ "name": "Open", "slug": "open", "is_closed": False, "is_archived": False, "color": "#ff8a84", "wip_limit": None, "order": 1, }) project_template.us_statuses.append({ "name": "Closed", "slug": "closed", "is_closed": True, "is_archived": False, "color": "#669900", "wip_limit": None, "order": 2, }) project_template.default_options["us_status"] = "Open" elif options["type"] == "issues": project_template.issue_statuses = [] project_template.issue_statuses.append({ "name": "Open", "slug": "open", "is_closed": False, "color": "#ff8a84", "order": 1, }) project_template.issue_statuses.append({ "name": "Closed", "slug": "closed", "is_closed": True, "color": "#669900", "order": 2, }) project_template.default_options["issue_status"] = "Open" project_template.roles.append({ "name": "Github", "slug": "github", "computable": False, "permissions": project_template.roles[0]["permissions"], "order": 70, }) tags_colors = [] for label in self._client.get("/repos/{}/labels".format( repo["full_name"])): name = label["name"].lower() color = "#{}".format(label["color"]) tags_colors.append([name, color]) project = Project.objects.create( name=options.get("name", None) or repo["full_name"], description=options.get("description", None) or repo["description"], owner=self._user, tags_colors=tags_colors, creation_template=project_template, is_private=options.get("is_private", False), ) if "organization" in repo and repo["organization"].get( "avatar_url", None): data = requests.get(repo["organization"]["avatar_url"]) project.logo.save("logo.png", ContentFile(data.content), save=True) import_service.create_memberships(options.get("users_bindings", {}), project, self._user, "github") for milestone in self._client.get("/repos/{}/milestones".format( repo["full_name"])): taiga_milestone = Milestone.objects.create( name=milestone["title"], owner=users_bindings.get( milestone.get("creator", {}).get("id", None), self._user), project=project, estimated_start=milestone["created_at"][:10], estimated_finish=milestone["due_on"][:10] if milestone["due_on"] else datetime.date( datetime.MAXYEAR, 12, 31), ) Milestone.objects.filter(id=taiga_milestone.id).update( created_date=milestone["created_at"], modified_date=milestone["updated_at"], ) return project
def _import_project_data(self, project_id, options): project = self._client.get_agile("/board/{}".format(project_id)) project_config = self._client.get_agile("/board/{}/configuration".format(project_id)) if project['type'] == "scrum": project_template = ProjectTemplate.objects.get(slug="scrum") options['type'] = "scrum" elif project['type'] == "kanban": project_template = ProjectTemplate.objects.get(slug="kanban") options['type'] = "kanban" project_template.is_epics_activated = True project_template.epic_statuses = OrderedDict() project_template.us_statuses = OrderedDict() project_template.task_statuses = OrderedDict() project_template.issue_statuses = OrderedDict() counter = 0 for column in project_config['columnConfig']['columns']: column_slug = slugify(column['name']) project_template.epic_statuses[column_slug] = { "name": column['name'], "slug": column_slug, "is_closed": False, "is_archived": False, "color": "#999999", "wip_limit": None, "order": counter, } project_template.us_statuses[column_slug] = { "name": column['name'], "slug": column_slug, "is_closed": False, "is_archived": False, "color": "#999999", "wip_limit": None, "order": counter, } project_template.task_statuses[column_slug] = { "name": column['name'], "slug": column_slug, "is_closed": False, "is_archived": False, "color": "#999999", "wip_limit": None, "order": counter, } project_template.issue_statuses[column_slug] = { "name": column['name'], "slug": column_slug, "is_closed": False, "is_archived": False, "color": "#999999", "wip_limit": None, "order": counter, } counter += 1 project_template.epic_statuses = list(project_template.epic_statuses.values()) project_template.us_statuses = list(project_template.us_statuses.values()) project_template.task_statuses = list(project_template.task_statuses.values()) project_template.issue_statuses = list(project_template.issue_statuses.values()) project_template.default_options["epic_status"] = project_template.epic_statuses[0]['name'] project_template.default_options["us_status"] = project_template.us_statuses[0]['name'] project_template.default_options["task_status"] = project_template.task_statuses[0]['name'] project_template.default_options["issue_status"] = project_template.issue_statuses[0]['name'] project_template.points = [{ "value": None, "name": "?", "order": 0, }] main_permissions = project_template.roles[0]['permissions'] project_template.roles = [{ "name": "Main", "slug": "main", "computable": True, "permissions": main_permissions, "order": 70, }] project = Project.objects.create( name=options.get('name', None) or project['name'], description=options.get('description', None) or project.get('description', ''), owner=self._user, creation_template=project_template, is_private=options.get('is_private', False), ) self._create_custom_fields(project) import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "main") if project_template.slug == "scrum": for sprint in self._client.get_agile("/board/{}/sprint".format(project_id))['values']: start_datetime = sprint.get('startDate', None) end_datetime = sprint.get('startDate', None) start_date = datetime.date.today() if start_datetime: start_date = start_datetime[:10] end_date = datetime.date.today() if end_datetime: end_date = end_datetime[:10] milestone = Milestone.objects.create( name=sprint['name'], slug=slugify(sprint['name']), owner=self._user, project=project, estimated_start=start_date, estimated_finish=end_date, ) Milestone.objects.filter(id=milestone.id).update( created_date=start_datetime or datetime.datetime.now(), modified_date=start_datetime or datetime.datetime.now(), ) return project