def download_all_files(username,password,redmine_url,issues,savepath):
    """username->(String) redmine username
       password->(String) redmine password
       redmine_url->(String) server address for redmine
       issues->(list (redmine.issue)) list of redmine issues to download files from
       savepath->(String) path to save the files to
       
       downloads all of the files in each issue provided to the given path"""

    redmine = Redmine(redmine_url,username=username,password=password) # connect to redmine

    for issue in issues:
        for f in issue.attachments:
            redmine.download(f['content_url'],savepath=savepath)
예제 #2
0
    def save_from_redmine_to_redmine(self, issue, project):
        redmine_main_tasks_manager = Redmine(self.main_task_manager.url,
                                             key=self.main_task_manager.api_key)
        user = redmine_main_tasks_manager.user.get(issue.author.id)
        logger.info("Issue {} is processed".format(issue.id))
        new_issue = Redmine(self.sync_task_manager.url, key=self.sync_task_manager.api_key,
                            impersonate=self.mapping("username", user.login)).issue.new()
        new_issue.project_id = project
        new_issue.subject = issue.subject
        new_issue.tracker_id = self.mapping("tracker_id", issue.tracker.id)
        new_issue.description = issue.description
        new_issue.status_id = self.mapping("status_id", issue.status.id)
        new_issue.priority_id = self.mapping("priority_id", issue.priority.id)
        if hasattr(issue, "assigned_to"):
            new_issue.assigned_to_id = self.mapping("user_id", issue.assigned_to.id)
        if hasattr(issue, "watchers"):
            # It's not working!
            watcher_user_ids = []
            for watcher in issue.watchers:
                watcher_user_ids.append(self.mapping("user_id", watcher.id))
            new_issue.watcher_user_ids = watcher_user_ids
        if hasattr(issue, "start_date"):
            new_issue.start_date = issue.start_date
        if hasattr(issue, "due_date"):
            new_issue.due_date = issue.due_date
        if hasattr(issue, "estimated_hours"):
            new_issue.estimated_hours = issue.estimated_hours
        new_issue.done_ratio = issue.done_ratio
        if issue.attachments:
            upload_list = []
            for attachment in issue.attachments:
                redmine_main_tasks_manager.download(attachment.content_url, savepath='/tmp/',
                                                    filename=attachment.filename)
                upload_list.append({'path': '/tmp/' + attachment.filename, 'filename': attachment.filename,
                                    'description': attachment.description})

            new_issue.uploads = upload_list
        new_issue.save()
        self.mapping_dict_issue_id[str(issue.id)] = new_issue.id
        self.save()
        time_entries = redmine_main_tasks_manager.time_entry.filter(issue_id=issue.id)
        if time_entries:
            for time_entry in time_entries:
                user = redmine_main_tasks_manager.user.get(time_entry.user.id)
                new_time_entry = Redmine(self.sync_task_manager.url, key=self.sync_task_manager.api_key,
                                         impersonate=self.mapping("username", user.login)).time_entry.new()
                new_time_entry.user_id = self.mapping("user_id", time_entry.user.id)

                if issue.id == time_entry.issue.id:
                    # if we have related tasks then time entries are doubled and we need to check it
                    new_time_entry.issue_id = new_issue.id
                    new_time_entry.spent_on = time_entry.spent_on
                    new_time_entry.hours = time_entry.hours
                    new_time_entry.activity_id = time_entry.activity.id
                    new_time_entry.comments = time_entry.comments
                    new_time_entry.save()
        # adding notes to the task

        if issue.journals:
            for arg in issue.journals:
                if arg.notes:
                    user = redmine_main_tasks_manager.user.get(arg.user.id)
                    update_issue = Redmine(self.sync_task_manager.url, key=self.sync_task_manager.api_key,
                                           impersonate=self.mapping("username", user.login)).issue.get(new_issue.id)
                    update_issue.notes = arg.notes
                    update_issue.save()