Пример #1
0
    def _request(self, url, method='get', data=None, headers=None):
        if not self.token:
            #SublimeHelper.message('Please login and try again')
            #self.login(force=True)
            return
            # replay
            #return self._request(url, method=method, data=data)
        all_headers = self._get_headers()
        if headers:
            all_headers.update(headers)

        result = getattr(requests, method)(url, data=data, headers=all_headers)
        if result.status_code == 201:
            return result.json()
        elif result.json().has_key('error'):
            data= result.json()
            if data.get('error', {}).get('code') == 401:
                SublimeHelper.message('ERROR 401, please restart auth process : %s' % data.get('error', {}).get('message'))
            else:
                SublimeHelper.message('ERROR : %s' % data.get('error', {}).get('message'))
            # replay
            #return self._request(url, method=method, data=data)
        else:
            return result.json()
        raise Exception('error calling %s' % url)
 def finished(code):
     result = callback(code)
     if not result:
         SublimeHelper.message("invalid OAuth code, try again :/")
     else:
         SublimeHelper.message("Authentification success!  You can now browse and edit your Google Apps Scripts files.")
     return result
Пример #3
0
 def file_selected(self, index, items, project):
     if index == 0:
         # back to projects
         self.prompt_projects()
     elif index == 1:
         # new file
         # update file ref inside project
         # TODO: POST new file
         pass
     else:
         selected_file = items[index - 2]
         # write locally and open it
         path = SublimeHelper.write(
             selected_file.get('source'),
             name=self.get_full_filename(selected_file))
         new_view = SublimeHelper.get_window().open_file(path)
         if selected_file.get('type') == 'server_js':
             new_view.set_syntax_file(
                 'Packages/Javascript/Javascript.tmLanguage')
         elif selected_file.get('type') == 'html':
             new_view.set_syntax_file('Packages/HTML/HTML.tmLanguage')
         new_view.settings().set('GoogleAppsScripts-project',
                                 project.get('id'))
         new_view.settings().set('GoogleAppsScripts-file',
                                 selected_file.get('id'))
Пример #4
0
 def prompt_projects(self):
     projects_list = [
         project.get('title') for project in self.get_projects().values()
     ]
     projects_list.insert(0,
                          ['New project', 'creates a new scripts project'])
     SublimeHelper.show_list_panel(projects_list, self.project_selected)
Пример #5
0
 def finished(code):
     result = callback(code)
     if not result:
         SublimeHelper.message("invalid OAuth code, try again :/")
     else:
         SublimeHelper.message(
             "Authentification success!  You can now browse and edit your Google Apps Scripts files."
         )
     return result
 def run(self, edit):
     self.browser = get_GoogleAppsScriptsBrowser()
     if not self.browser.token:
         #SublimeHelper.message('Please login and try again')
         return
     self.update_projects()
     if not self.projects:
         SublimeHelper.message('Cannot fetch projects, or no project found')
         return
     self.prompt_projects()
    def prompt_files(self, project):
        files = self.browser.files(project.get('id'))
        files_list = [self.get_full_filename(file) for file in files]
        files_list.insert(0, ['Back to projects', 'Back to project list'])
        files_list.insert(1, ['New file', 'creates a new script in the project %s' % project.get('title')])

        def callback(index):
            self.file_selected(index, files, project)

        SublimeHelper.show_list_panel(files_list, callback)
Пример #8
0
 def run(self, edit):
     self.browser = get_GoogleAppsScriptsBrowser()
     if not self.browser.token:
         #SublimeHelper.message('Please login and try again')
         return
     self.update_projects()
     if not self.projects:
         SublimeHelper.message('Cannot fetch projects, or no project found')
         return
     self.prompt_projects()
 def on_post_save(self, view):
     ''' retrieve the full project data and update this file source only '''
     project_id = view.settings().get('GoogleAppsScripts-project')
     file_id = view.settings().get('GoogleAppsScripts-file')
     if file_id:
         region = sublime.Region(0, view.size())
         contents = view.substr(region)
         self.browser = get_GoogleAppsScriptsBrowser()
         if self.browser.update_file(project_id, file_id, contents):
             SublimeHelper.message('File saved to Google Drive')
         else:
             SublimeHelper.message('Error saving file; check the ST console')
def oauth_ask_token_flow(auth_url, callback):
    ''' present the url to user and an input to paste the oauth token '''
    SublimeHelper.message('A URL has been copied to your clipboard!  Open a browser window logged in under the Google Apps account that you wish to associate with this plugin, then paste the URL from your clipboard into that browser.  Approve the request and copy the generated token back into the input box below.')
    sublime.set_clipboard(auth_url)
    def finished(code):
        result = callback(code)
        if not result:
            SublimeHelper.message("invalid OAuth code, try again :/")
        else:
            SublimeHelper.message("Authentification success!  You can now browse and edit your Google Apps Scripts files.")
        return result
    SublimeHelper.show_input("Oauth code : ", "", finished)
Пример #11
0
 def on_post_save(self, view):
     ''' retrieve the full project data and update this file source only '''
     project_id = view.settings().get('GoogleAppsScripts-project')
     file_id = view.settings().get('GoogleAppsScripts-file')
     if file_id:
         region = sublime.Region(0, view.size())
         contents = view.substr(region)
         self.browser = get_GoogleAppsScriptsBrowser()
         if self.browser.update_file(project_id, file_id, contents):
             SublimeHelper.message('File saved to Google Drive')
         else:
             SublimeHelper.message(
                 'Error saving file; check the ST console')
Пример #12
0
    def prompt_files(self, project):
        files = self.browser.files(project.get('id'))
        files_list = [self.get_full_filename(file) for file in files]
        files_list.insert(0, ['Back to projects', 'Back to project list'])
        files_list.insert(1, [
            'New file',
            'creates a new script in the project %s' % project.get('title')
        ])

        def callback(index):
            self.file_selected(index, files, project)

        SublimeHelper.show_list_panel(files_list, callback)
Пример #13
0
def oauth_ask_token_flow(auth_url, callback):
    ''' present the url to user and an input to paste the oauth token '''
    SublimeHelper.message(
        'A URL has been copied to your clipboard!  Open a browser window logged in under the Google Apps account that you wish to associate with this plugin, then paste the URL from your clipboard into that browser.  Approve the request and copy the generated token back into the input box below.'
    )
    sublime.set_clipboard(auth_url)

    def finished(code):
        result = callback(code)
        if not result:
            SublimeHelper.message("invalid OAuth code, try again :/")
        else:
            SublimeHelper.message(
                "Authentification success!  You can now browse and edit your Google Apps Scripts files."
            )
        return result

    SublimeHelper.show_input("Oauth code : ", "", finished)
 def file_selected(self, index, items, project):
     if index == 0:
         # back to projects
         self.prompt_projects()
     elif index == 1:
         # new file
         # update file ref inside project
         # TODO: POST new file
         pass
     else:
         selected_file = items[index - 2]
         # write locally and open it
         path = SublimeHelper.write(selected_file.get('source'), name=self.get_full_filename(selected_file))
         new_view = SublimeHelper.get_window().open_file(path)
         if selected_file.get('type')=='server_js':
             new_view.set_syntax_file('Packages/Javascript/Javascript.tmLanguage')
         elif selected_file.get('type')=='html':
             new_view.set_syntax_file('Packages/HTML/HTML.tmLanguage')
         new_view.settings().set('GoogleAppsScripts-project', project.get('id'))
         new_view.settings().set('GoogleAppsScripts-file', selected_file.get('id'))
 def prompt_projects(self):
     projects_list = [project.get('title') for project in self.get_projects().values()]
     projects_list.insert(0, ['New project', 'creates a new scripts project'])
     SublimeHelper.show_list_panel(projects_list, self.project_selected)