コード例 #1
0
    def test_update_and_invoke(self):

        gdrive = GDrive()
        file_id = gdrive.find_by_name('GSlides API tests').get('id')
        pdf_bytes = gdrive.file_export(file_id)
        pdf_data = base64.b64encode(pdf_bytes).decode()
        payload = {"pdf_data": pdf_data, 'channel': 'DDKUZTK6X'}

        result = self.pdf_to_slack.update_with_src().invoke(payload)

        Dev.pprint(result)
コード例 #2
0
class Test_GDrive(TestCase):
    def setUp(self):
        self.gslides = GSlides()
        self.gdrive  = GDrive()

    # helper methods

    def get_target_slide_id(self):
        file_id  = self.gdrive.find_by_name('GSlides API tests').get('id')
        slides   = self.gslides.slides(file_id)
        slide_id = slides.pop().get('objectId')
        return file_id, slide_id

    # tests for GDrive methods

    def test_ctor(self):
        service = self.gslides.service
        assert service._baseUrl == 'https://slides.googleapis.com/'

    def test_all_presentations(self):
        result = self.gslides.all_presentations()
        assert len(result) > 0

    def test_presentation_get(self):
        presentation_id = self.gslides.presentation_create('created via Unit tests')
        result = self.gslides.presentation(presentation_id)

        assert set(result) == { 'layouts'       , 'locale'    , 'masters', 'notesMaster', 'pageSize',
                                'presentationId', 'revisionId', 'slides' , 'title'                  }

        assert result.get('title') == 'created via Unit tests'

        self.gdrive.file_delete(presentation_id)
        assert self.gslides.presentation(presentation_id) is None

    def test_presentation_create(self):
        presentation_id = self.gslides.presentation_create('created via Unit tests')
        Dev.pprint(presentation_id)

    def test_slide_copy(self):
        file_id = self.gdrive.find_by_name('GSlides API tests').get('id')
        slide_id = 'g4b149a1e32_0_0'
        new_slide_id = 'slide_3'
        result = self.gslides.slide_copy(file_id,slide_id,new_slide_id)
        Dev.pprint(result)

    def test_slide_create(self):
        file_id = self.gdrive.find_by_name('GSlides API tests').get('id')
        new_slide_id = 'new_slide_id'
        self.gslides.slide_delete(file_id, new_slide_id)
        result = self.gslides.slide_create(file_id, 2, 'TITLE_AND_BODY', new_slide_id)
        assert result == new_slide_id
        self.gslides.slide_delete(file_id, new_slide_id)
        result = self.gslides.slide_create(file_id)
        self.gslides.slide_delete(file_id, result)

    def test_slide_elements(self):
        test_id = self.gdrive.find_by_name('GSlides API tests').get('id')
        elements = self.gslides.slide_elements(test_id, 1)
        assert len(elements) > 0

    def test_slides(self):
        test_id = self.gdrive.find_by_name('GSlides API tests').get('id')
        slides = self.gslides.slides(test_id)
        assert len(slides) > 0

    def test_element_set_text(self):
        file_id    = self.gdrive.find_by_name('GSlides API tests').get('id')
        slides     = self.gslides.slides(file_id)
        element_id = slides.pop().get('pageElements').pop().get('objectId') # last element of the last slide
        text       = 'new text.....changed....'
        result     = self.gslides.set_element_text(file_id,element_id,text)

        assert result.get('presentationId') == file_id


    def test_delete_element__all_temp_created(self):
        file_id  = self.gdrive.find_by_name('GSlides API tests').get('id')
        elements = self.gslides.slide_elements_indexed_by_id(file_id,1)
        for key,element in elements.items():
            #Dev.pprint(key)
            if 'textbox_' in key.lower():
                Dev.pprint(self.gslides.element_delete(file_id,key))



    def test_add_element_text(self):
        (file_id, slide_id) = self.get_target_slide_id()
        text    = Misc.random_string_and_numbers(6,'New Text Field - ')
        x_pos   = 50
        y_pos   = 250
        width   = 300
        height  = 50
        new_id = self.gslides.element_create_text(file_id, slide_id, text, x_pos, y_pos, width, height)

        self.gslides.element_set_text(file_id,new_id,'changed text')
        sleep(2)
        self.gslides.element_delete(file_id,new_id)

    def test_element_create_image(self):
        (file_id, slide_id) = self.get_target_slide_id()
        image_url = 'https://pbx-group-security.com/img/pbx-gs/pbx-gs-logo.png'
        shape_id  = self.gslides.element_create_image(file_id, slide_id,image_url, 100,100,300,300)
        sleep(3)
        self.gslides.element_delete(file_id, shape_id)

    def test_element_create_shape(self):
        (file_id, slide_id) = self.get_target_slide_id()
        def test_shape_creation(shape_type):
            shape_id  = self.gslides.element_create_shape(file_id, slide_id, shape_type,225,50,300,300)
            #properties = {"shapeBackgroundFill": {"solidFill": {"alpha": 0.6, "color": {"themeColor": "ACCENT5"}}}}
            #self.gslides.element_set_shape_properties(file_id, shape_id, properties)
            if shape_id:
                self.gslides.element_delete(file_id, shape_id)

        # enabling all 140 shapes below will cause an "Quota exceeded for quota group 'WriteGroup' and limit 'USER-100s" error

        shapes = [  #'TEXT_BOX','RECTANGLE','ROUND_RECTANGLE','ELLIPSE','ARC','BENT_ARROW','BENT_UP_ARROW','BEVEL',
                    #'BLOCK_ARC','BRACE_PAIR','BRACKET_PAIR','CAN','CHEVRON','CHORD','CLOUD','CORNER','CUBE',
                    #'CURVED_DOWN_ARROW','CURVED_LEFT_ARROW','CURVED_RIGHT_ARROW','CURVED_UP_ARROW','DECAGON',
                    #'DIAGONAL_STRIPE','DIAMOND','DODECAGON','DONUT','DOUBLE_WAVE','DOWN_ARROW','DOWN_ARROW_CALLOUT',
                    #'FOLDED_CORNER','FRAME','HALF_FRAME','HEART','HEPTAGON','HEXAGON','HOME_PLATE','HORIZONTAL_SCROLL',
                    #'IRREGULAR_SEAL_1','IRREGULAR_SEAL_2','LEFT_ARROW','LEFT_ARROW_CALLOUT','LEFT_BRACE','LEFT_BRACKET',
                    #'LEFT_RIGHT_ARROW','LEFT_RIGHT_ARROW_CALLOUT','LEFT_RIGHT_UP_ARROW','LEFT_UP_ARROW','LIGHTNING_BOLT',
                    #'MATH_DIVIDE','MATH_EQUAL','MATH_MINUS','MATH_MULTIPLY','MATH_NOT_EQUAL','MATH_PLUS','MOON',
                    #'NO_SMOKING','NOTCHED_RIGHT_ARROW','OCTAGON','PARALLELOGRAM','PENTAGON','PIE','PLAQUE','PLUS',
                    #'QUAD_ARROW','QUAD_ARROW_CALLOUT','RIBBON','RIBBON_2','RIGHT_ARROW','RIGHT_ARROW_CALLOUT',
                    #'RIGHT_BRACE','RIGHT_BRACKET','ROUND_1_RECTANGLE','ROUND_2_DIAGONAL_RECTANGLE','ROUND_2_SAME_RECTANGLE',
                    #'RIGHT_TRIANGLE','SMILEY_FACE','SNIP_1_RECTANGLE','SNIP_2_DIAGONAL_RECTANGLE','SNIP_2_SAME_RECTANGLE',
                    #'SNIP_ROUND_RECTANGLE','STAR_10','STAR_12','STAR_16','STAR_24','STAR_32','STAR_4','STAR_5','STAR_6',
                    #'STAR_7','STAR_8','STRIPED_RIGHT_ARROW','SUN','TRAPEZOID','TRIANGLE','UP_ARROW','UP_ARROW_CALLOUT',
                    'UP_DOWN_ARROW','UTURN_ARROW','VERTICAL_SCROLL','WAVE','WEDGE_ELLIPSE_CALLOUT','WEDGE_RECTANGLE_CALLOUT',
                    'WEDGE_ROUND_RECTANGLE_CALLOUT','FLOW_CHART_ALTERNATE_PROCESS','FLOW_CHART_COLLATE','FLOW_CHART_CONNECTOR',
                    'FLOW_CHART_DECISION','FLOW_CHART_DELAY','FLOW_CHART_DISPLAY','FLOW_CHART_DOCUMENT','FLOW_CHART_EXTRACT',
                    'FLOW_CHART_INPUT_OUTPUT','FLOW_CHART_INTERNAL_STORAGE','FLOW_CHART_MAGNETIC_DISK','FLOW_CHART_MAGNETIC_DRUM',
                    'FLOW_CHART_MAGNETIC_TAPE','FLOW_CHART_MANUAL_INPUT','FLOW_CHART_MANUAL_OPERATION','FLOW_CHART_MERGE',
                    'FLOW_CHART_MULTIDOCUMENT','FLOW_CHART_OFFLINE_STORAGE','FLOW_CHART_OFFPAGE_CONNECTOR','FLOW_CHART_ONLINE_STORAGE',
                    'FLOW_CHART_OR','FLOW_CHART_PREDEFINED_PROCESS','FLOW_CHART_PREPARATION','FLOW_CHART_PROCESS','FLOW_CHART_PUNCHED_CARD',
                    'FLOW_CHART_PUNCHED_TAPE','FLOW_CHART_SORT','FLOW_CHART_SUMMING_JUNCTION','FLOW_CHART_TERMINATOR','ARROW_EAST',
                    'ARROW_NORTH_EAST','ARROW_NORTH','SPEECH','STARBURST','TEARDROPELLIPSE_RIBBON','ELLIPSE_RIBBON_2','CLOUD_CALLOUT']
        for shape in shapes:
            test_shape_creation(shape)

    def test_element_create_table(self):
        (file_id, slide_id) = self.get_target_slide_id()
        table_id  = self.gslides.element_create_table(file_id, slide_id)

        # the deleteText command (below) was throwing an error (I think it might be caused by the fact that there is no data in the cell)
        requests = [#{ "deleteText": {   "objectId"      : table_id,
                    #                    "cellLocation"  : {  "rowIndex": 4, "columnIndex": 2   },
                    #                    "textRange"     : {"type": "ALL"                     }}},
                    { "insertText": {   "objectId"      : table_id,
                                        "cellLocation"  : {  "rowIndex": 0, "columnIndex": 0   },
                                        "text"          : "text added",
                                        "insertionIndex": 0                                   }},]
        self.gslides.execute_requests(file_id, requests)
        requests = [ { "updateTableCellProperties"  : {   "objectId": table_id,
                                                          "tableRange": { "location"  : { "rowIndex"   : 0, "columnIndex": 0},
                                                                          "rowSpan"   : 1 ,
                                                                          "columnSpan": 1 },
                                                          "tableCellProperties": { "tableCellBackgroundFill":  { "solidFill": { "color": {"rgbColor": {"red": 0.0,"green": 0.0, "blue": 0.0 }}}}},
                                                          "fields"             : "tableCellBackgroundFill.solidFill.color"}},
                     { "updateTextStyle"            : {    "objectId": table_id,
                                                           "cellLocation": { "rowIndex": 0, "columnIndex": 0},
                                                           "style": { "foregroundColor": {
                                                                      "opaqueColor": { "rgbColor": {"red": 0.5,"green": 1.0,"blue": 0.5}} },
                                                                      "bold": True,
                                                                      "fontFamily": "Cambria",
                                                                      "fontSize": { "magnitude": 38,"unit": "PT" }},
                                                          "textRange": { "type": "ALL"},
                                                          "fields": "foregroundColor,bold,fontFamily,fontSize" }}]
        self.gslides.execute_requests(file_id, requests)
        sleep(3)
        self.gslides.element_delete(file_id, table_id)

    def test_element_set_text_style(self):
        (file_id, slide_id) = self.get_target_slide_id()
        shape_id = self.gslides.element_create_text(file_id, slide_id,width=400)

        style = {  'bold'            : True,
                   'italic'          : True,
                   'fontFamily'      : 'Times New Roman',
                   'fontSize'        : { 'magnitude'  : 74, 'unit': 'PT' },
                   'foregroundColor' : { 'opaqueColor': { 'rgbColor': { 'blue': 0.49803922, 'green': 1.0, 'red': 0.0 }}},
                    'link'           : { 'url': 'https://news.bbc.co.uk'         } }
        fields   = 'bold,italic,fontFamily,fontSize, foregroundColor,link'

        self.gslides.element_set_text_style(file_id,shape_id, style, fields)
        sleep(3)
        self.gslides.element_delete(file_id,shape_id)

    def test_element_set_shape_properties(self):
        (file_id, slide_id) = self.get_target_slide_id()
        shape_id = self.gslides.element_create_text(file_id, slide_id,width=400)

        properties = { "shapeBackgroundFill": { "solidFill"  : { "alpha": 0.6, "color": { "themeColor": "ACCENT5" } } },
                        "outline"           : { "dashStyle"  : "SOLID",
                                                "outlineFill": { "solidFill": { "alpha": 1, "color": { "themeColor": "ACCENT5" }} },
                                                "weight"     : {"magnitude": 3, "unit": "PT"                                    } },
                        "contentAlignment"  : 'MIDDLE'                                                                            }

        fields = "shapeBackgroundFill,outline, contentAlignment"

        self.gslides.element_set_shape_properties(file_id,shape_id,properties,fields)
        sleep(3)
        self.gslides.element_delete(file_id, shape_id)

    def test_element_set_via_requests(self):
        (file_id, slide_id) = self.get_target_slide_id()
        shape_id = self.gslides.element_create_text(file_id, slide_id, width=400)
        requests = []
        requests.append  ({ 'updateTextStyle'       : { 'objectId'       : shape_id  ,
                                                        'style'          : { 'fontSize': {'magnitude': 74, 'unit': 'PT'}},
                                                        'fields'         : 'fontSize'                                  }})
        requests.append  ({ 'updateParagraphStyle'  : { "objectId"       : shape_id,
                                                        "style"          : { "alignment": "CENTER" },
                                                        "fields"         : 'alignment'                                 }})
        requests.append  ({ "updateShapeProperties" : { "objectId"       : shape_id,
                                                        'shapeProperties': { "shapeBackgroundFill" : { "solidFill"  : { "alpha": 0.6, "color": { "themeColor": "ACCENT5" } } }},
                                                        'fields'         : 'shapeBackgroundFill'                       }})

        self.gslides.execute_requests(file_id, requests)
        sleep(2)
        self.gslides.element_delete(file_id, shape_id)
コード例 #3
0
class Test_GDrive(TestCase):
    def setUp(self):
        self.gdrive = GDrive()

    def test_ctor(self):
        files = self.gdrive.files
        assert files._baseUrl == 'https://www.googleapis.com/drive/v3/'

    def test_file_find_by_name(self):
        name = 'GSlides API tests'
        assert self.gdrive.find_by_name(name).get('name') == name
        assert self.gdrive.find_by_name('aaaa') is None

    def test_file_export(self):
        #id = '1rWCUAh2y4AY-RrqyK5JywDskGjJe4GydrPSrX1td6Lk'   # test document
        #id = '1CA-uqZj9HVr2_RHiI-esVyHBoHZ1M1sxGzq54EQ2Ek4'   # test slides
        file_id = self.gdrive.find_by_name('GSlides API tests').get('id')
        pdf_data = self.gdrive.file_export(file_id)

        with open('./test.pdf', "wb") as fh:
            fh.write(pdf_data)
            #fh.write(base64.decodebytes(pdf_data.encode()))
        #Dev.pprint(result)

    def test_file_metadata(self):
        file_id = '1rWCUAh2y4AY-RrqyK5JywDskGjJe4GydrPSrX1td6Lk'  # test document
        result = self.gdrive.file_metadata(file_id)
        Dev.pprint(result)

    def test_file_metadata_update(self):
        file_id = '1CA-uqZj9HVr2_RHiI-esVyHBoHZ1M1sxGzq54EQ2Ek4'  # test spreadsheet
        metadata = self.gdrive.file_metadata(file_id)
        Dev.pprint(metadata)
        changes = self.gdrive.set_file_title(file_id, 'GSlides API tests')
        Dev.pprint(changes)

    def test_file_update(self):
        file = '/tmp/puml_graph_W64.png'
        #file   = '/tmp/puml_graph_09Q.png'
        file = '/tmp/puml_graph.png'
        id = '1H72nAFgqu1OSW_xm-gwDWml6tOzy5UZ_'
        result = self.gdrive.file_update(file, 'image/png', id)
        Dev.pprint(result)

    def test_file_upload(self):
        #file   = '/tmp/puml_graph_W64.png'
        file = '/tmp/puml_graph_09Q.png'
        folder = '1ZXXoYc443-HG6Twr7chTvym8JNgssoNJ'
        result = self.gdrive.file_upload(file, 'image/png', folder)
        Dev.pprint(result)

    def test_files(self):
        files = self.gdrive.files_all(4)
        for item in files:
            print('{0:22} - {1}'.format(item['name'], item['id']))

    def test_files_in_folder(self):
        folder_id = '16yOkKyi0TfOy3w4IMW40vo-pr--Wa1Y9'
        try:
            files = self.gdrive.files_in_folder(folder_id, size=2)
            for item in files:
                print('{0:22} - {1}'.format(item['name'], item['id']))
        except Exception as error:
            Dev.pprint(error)

    def testfiles_with_mime_type(self):
        mime_type_presentations = 'application/vnd.google-apps.presentation'
        files = self.gdrive.find_by_mime_type(mime_type_presentations)

        assert len(files) > 0