Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pyopenproject/business/project_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ def find_all(self, filters=None, sort_by=None): raise NotImplementedError
@abstractmethod
def create(self, project): raise NotImplementedError

@abstractmethod
def create_copy(self, project, project_id): raise NotImplementedError

@abstractmethod
def find_schema(self): raise NotImplementedError

Expand Down
23 changes: 23 additions & 0 deletions pyopenproject/business/services/command/project/create_copy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from pyopenproject.api_connection.exceptions.request_exception import RequestError
from pyopenproject.api_connection.requests.post_request import PostRequest
from pyopenproject.business.exception.business_error import BusinessError
from pyopenproject.business.services.command.project.project_command import ProjectCommand
from pyopenproject.model import project as p


class CreateCopy(ProjectCommand):

def __init__(self, connection, project, project_id):
super().__init__(connection)
self.project = project
self.project_id = project_id

def execute(self):
try:
json_obj = PostRequest(connection=self.connection,
headers={"Content-Type": "application/json"},
context=f"{self.CONTEXT}/{self.project_id}/copy",
json=self.project.__dict__).execute()
return p.Project(json_obj)
except RequestError as re:
raise BusinessError(f"Error creating project: {self.project.name}") from re
4 changes: 4 additions & 0 deletions pyopenproject/business/services/project_service_impl.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from pyopenproject.business.project_service import ProjectService
from pyopenproject.business.services.command.project.create import Create
from pyopenproject.business.services.command.project.create_copy import CreateCopy
from pyopenproject.business.services.command.project.create_form import CreateForm
from pyopenproject.business.services.command.project.create_work_package import CreateWorkPackage
from pyopenproject.business.services.command.project.create_work_package_form import CreateWorkPackageForm
Expand Down Expand Up @@ -43,6 +44,9 @@ def find_all(self, filters=None, sort_by=None):
def create(self, project):
return Create(self.connection, project).execute()

def create_copy(self, project, project_id):
return CreateCopy(self.connection, project, project_id).execute()

def find_schema(self):
return FindSchema(self.connection).execute()

Expand Down
7 changes: 7 additions & 0 deletions tests/test_cases/project_service_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,13 @@ def test_operations(self):
self.assertEqual("New project name changed", project.name)
self.proSer.delete(project)

def test_create_copy(self):
# Create
project = self.proSer.create(self.new_project)
# Copy
project_copy = self.proSer.create_copy(project, project.id)
self.assertEqual(project.name, project_copy.name)

def test_find_schema(self):
schema = self.proSer.find_schema()
self.assertIsNotNone(schema)
Expand Down