Browse Source

Cleaning up and extending

Piotr Czajkowski 7 years ago
parent
commit
cca16d9743
7 changed files with 101 additions and 37 deletions
  1. 2 2
      memoQFile.py
  2. 39 22
      memoQProject.py
  3. 52 7
      memoQProjectTest.py
  4. 2 2
      memoQResource.py
  5. 2 2
      memoQSecurity.py
  6. 2 2
      memoQTM.py
  7. 2 0
      testFiles/testConfig.json

+ 2 - 2
memoQFile.py

@@ -12,9 +12,9 @@ class MemoQFile(object):
             self.config = json.load(json_file)
             self.config = json.load(json_file)
 
 
         if self.config["api_base_url"] != "":
         if self.config["api_base_url"] != "":
-            apiURL = self.config["api_base_url"] + \
+            api_url = self.config["api_base_url"] + \
                 "/memoqservices/filemanager?wdsl"
                 "/memoqservices/filemanager?wdsl"
-            self.client = Client(apiURL)
+            self.client = Client(api_url)
 
 
     def download_file(self, path, guid):
     def download_file(self, path, guid):
         """Downloads file of given guid from memoQ Server to specified path. Returns full path of downloaded file."""
         """Downloads file of given guid from memoQ Server to specified path. Returns full path of downloaded file."""

+ 39 - 22
memoQProject.py

@@ -38,8 +38,8 @@ class Project(object):
         if projectInfo != None:
         if projectInfo != None:
             self.name = projectInfo['Name']
             self.name = projectInfo['Name']
             self.domain = projectInfo['Domain']
             self.domain = projectInfo['Domain']
-            self.languages.target.extend(
-                [x for x in projectInfo['TargetLanguageCodes'].string])
+            self.languages.target = [
+                x for x in projectInfo['TargetLanguageCodes'].string]
             self.languages.source = projectInfo['SourceLanguageCode']
             self.languages.source = projectInfo['SourceLanguageCode']
             self.deadline = projectInfo['Deadline']
             self.deadline = projectInfo['Deadline']
 
 
@@ -52,9 +52,9 @@ class MemoQProject(object):
             self.config = json.load(json_file)
             self.config = json.load(json_file)
 
 
         if self.config["api_base_url"] != "":
         if self.config["api_base_url"] != "":
-            apiURL = self.config["api_base_url"] + \
+            api_url = self.config["api_base_url"] + \
                 "/memoqservices/ServerProject?wsdl"
                 "/memoqservices/ServerProject?wsdl"
-            self.client = Client(apiURL)
+            self.client = Client(api_url)
 
 
         self.project = Project()
         self.project = Project()
 
 
@@ -87,24 +87,33 @@ class MemoQProject(object):
             self.project.set_project_guid(None)
             self.project.set_project_guid(None)
 
 
     def template_project_options(self, template_guid):
     def template_project_options(self, template_guid):
-        """Needs guid of memoQ project template.
+        """Needs guid of memoQ project template. project.languages.source must be set.
         Returns options needed for creating memoQ project from template."""
         Returns options needed for creating memoQ project from template."""
         if self.project.languages.source != None:
         if self.project.languages.source != None:
             options = self.client.factory.create(
             options = self.client.factory.create(
                 '{http://kilgray.com/memoqservices/2007}TemplateBasedProjectCreateInfo')
                 '{http://kilgray.com/memoqservices/2007}TemplateBasedProjectCreateInfo')
             options.TemplateGuid = template_guid
             options.TemplateGuid = template_guid
             options.Name = self.project.name
             options.Name = self.project.name
-            options.SourceLanguageCode = self.project.languages.source
+
+            if self.project.languages.source != "":
+                options.SourceLanguageCode = self.project.languages.source
+            else:
+                print("project.languages.source must be set!")
+                return None
+
             options.Domain = self.project.domain
             options.Domain = self.project.domain
             options.CreatorUser = self.config["creator_guid"]
             options.CreatorUser = self.config["creator_guid"]
             return options
             return options
         else:
         else:
             return None
             return None
 
 
-    def create_project_from_template(self, templateGuid):
-        """Creates memoQ project from given project template.
+    def create_project_from_template(self, template_guid=None, options=None):
+        """Creates memoQ project using predefined options when
+        provided with template_guid or using provided options.
         Sets new project as active project on success."""
         Sets new project as active project on success."""
-        options = self.template_project_options(templateGuid)
+        if template_guid != None:
+            options = self.template_project_options(template_guid)
+
         if options != None:
         if options != None:
             result = self.client.service.CreateProjectFromTemplate(options)
             result = self.client.service.CreateProjectFromTemplate(options)
             if result.ResultStatus == "Success":
             if result.ResultStatus == "Success":
@@ -113,13 +122,24 @@ class MemoQProject(object):
                 self.project.set_project_guid(None)
                 self.project.set_project_guid(None)
 
 
     def project_options(self):
     def project_options(self):
-        """Returns options needed for creating memoQ project."""
+        """Returns options needed for creating memoQ project. project.languages.source and project.languages.target must be set."""
         if len(self.project.languages.target) and self.project.languages.source != None:
         if len(self.project.languages.target) and self.project.languages.source != None:
             options = self.client.factory.create(
             options = self.client.factory.create(
                 '{http://kilgray.com/memoqservices/2007}ServerProjectDesktopDocsCreateInfo')
                 '{http://kilgray.com/memoqservices/2007}ServerProjectDesktopDocsCreateInfo')
             options.Name = self.project.name
             options.Name = self.project.name
-            options.SourceLanguageCode = self.project.languages.source
-            options.TargetLanguageCodes.string = self.project.languages.target
+
+            if self.project.languages.source != "":
+                options.SourceLanguageCode = self.project.languages.source
+            else:
+                print("project.languages.source must be set!")
+                return None
+
+            if len(self.project.languages.target):
+                options.TargetLanguageCodes.string = self.project.languages.target
+            else:
+                print("project.languages.target must be set!")
+                return None
+
             options.Deadline = self.project.deadline
             options.Deadline = self.project.deadline
             options.RecordVersionHistory = True
             options.RecordVersionHistory = True
             options.CreatorUser = self.config["creator_guid"]
             options.CreatorUser = self.config["creator_guid"]
@@ -131,9 +151,12 @@ class MemoQProject(object):
         else:
         else:
             return None
             return None
 
 
-    def create_project(self):
-        """Creates memoQ project. Sets new project as active project on success."""
-        options = self.project_options()
+    def create_project(self, options=None):
+        """Creates memoQ project using predefined or provided options.
+        Sets new project as active project on success."""
+        if options == None:
+            options = self.project_options()
+
         if options != None:
         if options != None:
             project_guid = self.client.service.CreateProject2(options)
             project_guid = self.client.service.CreateProject2(options)
             if project_guid != None:
             if project_guid != None:
@@ -192,9 +215,6 @@ class MemoQProject(object):
         if self.project.get_project_guid() == None:
         if self.project.get_project_guid() == None:
             return "No project!"
             return "No project!"
 
 
-        if self.project.documents == None:
-            self.get_project_documents()
-
         export_results = []
         export_results = []
         for guid in self.document_guids():
         for guid in self.document_guids():
             export_results.append(
             export_results.append(
@@ -214,9 +234,6 @@ class MemoQProject(object):
         if self.project.get_project_guid() == None:
         if self.project.get_project_guid() == None:
             return "No project!"
             return "No project!"
 
 
-        if self.documents == None:
-            self.get_project_documents()
-
         options = self.client.factory.create(
         options = self.client.factory.create(
             '{http://kilgray.com/memoqservices/2007}DocumentExportOptions')
             '{http://kilgray.com/memoqservices/2007}DocumentExportOptions')
         options.CopySourceToEmptyTarget = True
         options.CopySourceToEmptyTarget = True
@@ -280,7 +297,7 @@ class MemoQProject(object):
                 with open(output_file, 'wb') as target:
                 with open(output_file, 'wb') as target:
                     target.write(b64decode(stat.ResultData))
                     target.write(b64decode(stat.ResultData))
                     filename = '{}_{}.csv'.format(
                     filename = '{}_{}.csv'.format(
-                    stat.TargetLangCode, self.project.name)
+                        stat.TargetLangCode, self.project.name)
                 output_file = os.path.join(path, filename)
                 output_file = os.path.join(path, filename)
                 with open(output_file, 'wb') as target:
                 with open(output_file, 'wb') as target:
                     # Statistics are base64 and utf-16 encoded, so we need to
                     # Statistics are base64 and utf-16 encoded, so we need to

+ 52 - 7
memoQProjectTest.py

@@ -28,20 +28,23 @@ class MemoQProjectTest(unittest.TestCase):
         """ Test for get_project_by_guid method."""
         """ Test for get_project_by_guid method."""
         test = memoQProject.MemoQProject()
         test = memoQProject.MemoQProject()
 
 
-        valid_guid = "27e14066-0b73-44fc-a5ea-a828fed42e7f"
-        wrong_guid = "00000000-0000-0000-0000-000000000001"
-
-        test.get_project_by_guid(valid_guid)
+        test.get_project_by_guid(self.config["valid_project_guid"])
         self.assertEqual(test.project.get_project_guid(),
         self.assertEqual(test.project.get_project_guid(),
-                         valid_guid, "Guids don't match!")
+                         self.config["valid_project_guid"], "Guids don't match!")
 
 
-        test.get_project_by_guid(wrong_guid)
+        test.get_project_by_guid(self.config["wrong_project_guid"])
         self.assertEqual(test.project.get_project_guid(),
         self.assertEqual(test.project.get_project_guid(),
                          None, "Guid should be none!")
                          None, "Guid should be none!")
 
 
     def test_template_project_options(self):
     def test_template_project_options(self):
         """ Test for template_project_options method."""
         """ Test for template_project_options method."""
         test = memoQProject.MemoQProject()
         test = memoQProject.MemoQProject()
+
+        options = test.template_project_options(
+            self.config["project_template_guid"])
+        self.assertIsNone(
+            options, "Options should be None if source language not set!")
+
         test.project.languages.source = self.config["source_language"]
         test.project.languages.source = self.config["source_language"]
 
 
         options = test.template_project_options(
         options = test.template_project_options(
@@ -69,17 +72,41 @@ class MemoQProjectTest(unittest.TestCase):
         test = memoQProject.MemoQProject()
         test = memoQProject.MemoQProject()
         test.project.languages.source = self.config["source_language"]
         test.project.languages.source = self.config["source_language"]
 
 
-        test.create_project_from_template(self.config["project_template_guid"])
+        test.create_project_from_template(
+            template_guid=self.config["project_template_guid"])
+
+        self.assertNotEqual(test.project.get_project_guid(),
+                            None, "Guid shouldn't be none!")
+
+        test.delete()
+
+        # Testing override
+        options = test.template_project_options(
+            self.config["project_template_guid"])
+        options.Name += "_override"
+        options.Domain = "override"
 
 
+        test.create_project_from_template(options=options)
         self.assertNotEqual(test.project.get_project_guid(),
         self.assertNotEqual(test.project.get_project_guid(),
                             None, "Guid shouldn't be none!")
                             None, "Guid shouldn't be none!")
+        self.assertEqual(options.Domain, test.project.domain)
 
 
         test.delete()
         test.delete()
 
 
     def test_project_options(self):
     def test_project_options(self):
         """ Test for project_options method."""
         """ Test for project_options method."""
         test = memoQProject.MemoQProject()
         test = memoQProject.MemoQProject()
+
+        options = test.project_options()
+        self.assertIsNone(
+            options, "Options should be None if source language not set!")
+
         test.project.languages.source = self.config["source_language"]
         test.project.languages.source = self.config["source_language"]
+
+        options = test.project_options()
+        self.assertIsNone(
+            options, "Options should be None if target languages not set!")
+
         test.project.languages.target = self.config["target_languages"]
         test.project.languages.target = self.config["target_languages"]
 
 
         options = test.project_options()
         options = test.project_options()
@@ -117,6 +144,18 @@ class MemoQProjectTest(unittest.TestCase):
 
 
         test.delete()
         test.delete()
 
 
+        # Testing override
+        options = test.project_options()
+        options.Name += "_override"
+        options.Domain = "override"
+
+        test.create_project(options=options)
+        self.assertNotEqual(test.project.get_project_guid(),
+                            None, "Guid shouldn't be none!")
+        self.assertEqual(options.Domain, test.project.domain)
+
+        test.delete()
+
     def test_import_document(self):
     def test_import_document(self):
         """ Test for import_document method."""
         """ Test for import_document method."""
         test = memoQProject.MemoQProject()
         test = memoQProject.MemoQProject()
@@ -171,7 +210,10 @@ class MemoQProjectTest(unittest.TestCase):
                          filename, "Name of document doesn't match test filename!")
                          filename, "Name of document doesn't match test filename!")
 
 
         export_result = test.export_documents(".")
         export_result = test.export_documents(".")
+        filepath = os.path.join(".", filename)
         self.assertTrue(export_result, "Export result should be true!")
         self.assertTrue(export_result, "Export result should be true!")
+        self.assertTrue(os.path.isfile(filepath), "File should exist!")
+        os.remove(filepath)
 
 
         test.delete()
         test.delete()
 
 
@@ -194,7 +236,10 @@ class MemoQProjectTest(unittest.TestCase):
                          filename, "Name of document doesn't match test filename!")
                          filename, "Name of document doesn't match test filename!")
 
 
         export_result = test.export_documents2(".")
         export_result = test.export_documents2(".")
+        filepath = os.path.join(".", filename)
         self.assertTrue(export_result, "Export result should be true!")
         self.assertTrue(export_result, "Export result should be true!")
+        self.assertTrue(os.path.isfile(filepath), "File should exist!")
+        os.remove(filepath)
 
 
         test.delete()
         test.delete()
 
 

+ 2 - 2
memoQResource.py

@@ -11,9 +11,9 @@ class MemoQResource(object):
             self.config = json.load(json_file)
             self.config = json.load(json_file)
 
 
         if self.config["api_base_url"] != "":
         if self.config["api_base_url"] != "":
-            apiURL = self.config["api_base_url"] + \
+            api_url = self.config["api_base_url"] + \
                 "/memoqservices/resource?wsdl"
                 "/memoqservices/resource?wsdl"
-            self.client = Client(apiURL)
+            self.client = Client(api_url)
 
 
         self.types = self.client.factory.create(
         self.types = self.client.factory.create(
             '{http://kilgray.com/memoqservices/2007}ResourceType')
             '{http://kilgray.com/memoqservices/2007}ResourceType')

+ 2 - 2
memoQSecurity.py

@@ -47,9 +47,9 @@ class MemoQSecurity(object):
             self.config = json.load(json_file)
             self.config = json.load(json_file)
 
 
         if self.config["api_base_url"] != "":
         if self.config["api_base_url"] != "":
-            apiURL = self.config["api_base_url"] + \
+            api_url = self.config["api_base_url"] + \
                 "/memoqservices/security?wsdl"
                 "/memoqservices/security?wsdl"
-            self.client = Client(apiURL)
+            self.client = Client(api_url)
 
 
         self.user = User()
         self.user = User()
         self.users = []
         self.users = []

+ 2 - 2
memoQTM.py

@@ -31,8 +31,8 @@ class MemoQTM(object):
             self.config = json.load(json_file)
             self.config = json.load(json_file)
 
 
         if self.config["api_base_url"] != "":
         if self.config["api_base_url"] != "":
-            apiURL = self.config["api_base_url"] + "/memoqservices/tm?wsdl"
-            self.client = Client(apiURL)
+            api_url = self.config["api_base_url"] + "/memoqservices/tm?wsdl"
+            self.client = Client(api_url)
 
 
         self.tm = TM()
         self.tm = TM()
 
 

+ 2 - 0
testFiles/testConfig.json

@@ -3,6 +3,8 @@
     "target_languages" : ["ger-DE"],
     "target_languages" : ["ger-DE"],
     "valid_domain" : "Python",
     "valid_domain" : "Python",
     "wrong_domain" : "dsfdsfdsfew",
     "wrong_domain" : "dsfdsfdsfew",
+    "valid_project_guid" : "27e14066-0b73-44fc-a5ea-a828fed42e7f",
+    "wrong_project_guid" : "00000000-0000-0000-0000-000000000001",
     "project_template_guid" : "6ec5df0f-4dc4-4f91-b6b4-c7927cc4dfd3",
     "project_template_guid" : "6ec5df0f-4dc4-4f91-b6b4-c7927cc4dfd3",
     "creator_guid" : "00000000-0000-0000-0001-000000000001",
     "creator_guid" : "00000000-0000-0000-0001-000000000001",
     "test_file_path" : "testFiles/test.txt",
     "test_file_path" : "testFiles/test.txt",