From 8ccbd9e9b29ffb4fd1d1f1645786fa546661b4ee Mon Sep 17 00:00:00 2001
From: Christopher Bohn <bohn@unl.edu>
Date: Mon, 27 Apr 2020 12:20:00 -0500
Subject: [PATCH] added Milestones to gitlab api

---
 api/gitlab_classes.py | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/api/gitlab_classes.py b/api/gitlab_classes.py
index 8d213be..38368a5 100644
--- a/api/gitlab_classes.py
+++ b/api/gitlab_classes.py
@@ -2,7 +2,7 @@ from datetime import datetime
 from typing import ClassVar, Dict, Iterable, List, Optional, Set, Union
 
 from gitlab import Gitlab, MAINTAINER_ACCESS
-from gitlab.v4.objects import Issue, Project, ProjectCommit, User
+from gitlab.v4.objects import Issue, Project, ProjectCommit, ProjectMilestone, User
 
 from config import Config
 
@@ -250,6 +250,24 @@ class GitlabCommit:
     # project_id
 
 
+class GitlabMilestone:
+    gitlab_milestone: ProjectMilestone
+
+    def __init__(self, milestone: ProjectMilestone):
+        super().__init__()
+        self.gitlab_milestone = milestone
+
+    def get_issues(self) -> List[GitlabIssue]:
+        """
+        :return: List of Issue objects representing project's issues
+        """
+        gitlab_issues: Iterable[Issue] = self.gitlab_milestone.issues()
+        issues: List[GitlabIssue] = []
+        for issue in gitlab_issues:
+            issues.append(GitlabIssue(issue))
+        return issues
+
+
 class GitlabProject:
     git_project: Project
 
@@ -390,6 +408,16 @@ class GitlabProject:
     def add_user_as_maintainer(self, user: GitlabUser) -> None:
         self.git_project.members.create({'user_id': user.get_user_id(), 'access_level': MAINTAINER_ACCESS})
 
+    def get_milestones(self) -> List[GitlabMilestone]:
+        """
+        :return: List of Milestone objects representing the project's milestones
+        """
+        gitlab_milestones: Iterable[ProjectMilestone] = self.git_project.milestones.list()
+        milestones: List[GitlabMilestone] = []
+        for milestone in gitlab_milestones:
+            milestones.append(GitlabMilestone(milestone))
+        return milestones
+
     def get_issues(self) -> List[GitlabIssue]:
         """
         :return: List of Issue objects representing project's issues, sorted by creation date
-- 
GitLab