Example #1
0
 def f():
     self.io_loop.add_callback((yield gen.Callback("k1")))
     yield gen.Wait("k1")
     1 / 0
Example #2
0
    def install_project(self, project_name):
        logger.debug('Install project %s', project_name)

        self.installed_projects.discard(project_name)

        if project_name in self.projects and not self.installing:
            self.installing = project_name
            self.install_output = []

            project = self.projects[project_name]
            project_path = os.path.join(self.projects_dir, project_name)

            self.on_project_installing(self, project)

            if project_name in self.failed_projects:
                if os.path.exists(project_path):
                    shutil.rmtree(project_path)
                self.failed_projects.discard(project_name)

            if os.path.exists(project_path):
                subprocess.Popen(args=[
                    "git", "config", "remote.origin.url", project["repository"]
                ],
                                 cwd=project_path).communicate()

                logger.debug('git pull from %s', project["repository"])
                p = AsyncPopen2(args=["git", "pull"],
                                cwd=project_path,
                                env=self.gitenv)
            else:
                logger.debug('git clone')
                p = AsyncPopen2(
                    args=["git", "clone", project["repository"], project_path],
                    env=self.gitenv)
            p.on_output += self.collect_install_output
            p.on_end += yield gen.Callback("gitend")
            p.run()
            result = yield gen.Wait("gitend")

            if result != 0:
                self.install_output.append("\ngit returned %d\n" % result)
                logger.error("Project failed to install: %s",
                             "".join(self.install_output))
                self.on_project_installation_failed(
                    self, project, "".join(self.install_output))
                self.installing = None
                self.failed_projects.add(project_name)

                raise gen.Return(False)
            else:
                logger.debug("git operation: %s", "".join(self.install_output))

            project_install_file = os.path.join(project_path,
                                                "warrior-install.sh")

            if os.path.exists(project_install_file):
                p = AsyncPopen2(args=[project_install_file], cwd=project_path)
                p.on_output += self.collect_install_output
                p.on_end += yield gen.Callback("installend")
                p.run()
                result = yield gen.Wait("installend")

                if result != 0:
                    self.install_output.append(
                        "\nCustom installer returned %d\n" % result)
                    logger.error("Custom installer failed to install: %s",
                                 "".join(self.install_output))
                    self.on_project_installation_failed(
                        self, project, "".join(self.install_output))
                    self.installing = None
                    self.failed_projects.add(project_name)

                    raise gen.Return(False)

            data_dir = os.path.join(self.data_dir, "data")
            if os.path.exists(data_dir):
                shutil.rmtree(data_dir)
            os.makedirs(data_dir)

            project_data_dir = os.path.join(project_path, "data")
            if os.path.islink(project_data_dir):
                os.remove(project_data_dir)
            elif os.path.isdir(project_data_dir):
                shutil.rmtree(project_data_dir)
            os.symlink(data_dir, project_data_dir)

            self.installed_projects.add(project_name)
            logger.debug('Install complete %s', "".join(self.install_output))
            self.on_project_installed(self, project,
                                      "".join(self.install_output))

            self.installing = None

            raise gen.Return(True)
Example #3
0
    def put(self, key):
        '''
        Resend deletion of micropost with *key* as key to the contact given in
        the posted JSON. Corresponding activity ID is given inside the posted
        json.
        Here is the format : {"contactId":"data","activityId":"data"}
        '''

        data = self.get_body_as_dict(
            expectedFields=["contactId", "activityId", "extra"])

        if data:

            contactId = data["contactId"]
            activityId = data["activityId"]
            date = data["extra"]

            contact = ContactManager.getTrustedContact(contactId)
            activity = ActivityManager.get_activity(activityId)

            if not contact:
                self.return_failure("Contact not found", 404)
            elif not activity:
                self.return_failure("Activity not found", 404)
            else:

                user = UserManager.getUser()
                micropost = MicroPost(
                    authorKey=user.key,
                    date=date_util.get_date_from_db_date(date))

                logger.info(
                    "Attempt to resend a post deletion to contact: {}.".format(
                        contact.name))
                httpClient = ContactClient()
                body = micropost.toJson(localized=False)

                try:
                    httpClient.put(contact,
                                   CONTACT_PATH,
                                   body,
                                   callback=(yield gen.Callback("retry")))
                    response = yield gen.Wait("retry")

                    if response.error:
                        self.return_failure(
                            "Deleting micropost to contact failed.")

                    else:
                        for error in activity.errors:
                            if error["contactKey"] == contact.key:
                                activity.errors.remove(error)
                                activity.save()
                                self.return_success(
                                    "Micropost correctly redeleted.")

                except:
                    self.return_failure(
                        "Deleting micropost to contact failed.")

        else:
            self.return_failure("Micropost not found", 404)
Example #4
0
 def f():
     (yield gen.Callback("k1"))("v1")
     (yield gen.Callback("k2"))("v2")
     results = yield dict(foo=gen.Wait("k1"), bar=gen.Wait("k2"))
     self.assertEqual(results, dict(foo="v1", bar="v2"))
     self.stop()
Example #5
0
 def f():
     (yield gen.Callback("k1"))()
     res = yield gen.Wait("k1")
     self.assertTrue(res is None)
     self.stop()
Example #6
0
 def f():
     self.io_loop.add_callback((yield gen.Callback(0)))
     yield gen.Wait(0)
     self.stop()
Example #7
0
 def f():
     (yield gen.Callback("k1"))("v1")
     (yield gen.Callback("k2"))("v2")
     results = yield [gen.Wait("k1"), gen.Wait("k2")]
     self.assertEqual(results, ["v1", "v2"])
     self.stop()
Example #8
0
 def f():
     yield gen.Callback("k1")
     yield gen.Wait("k2")
     self.stop()
Example #9
0
 def f():
     yield gen.Callback((1, 2))
     yield gen.Wait((2, 3))
     self.stop()
Example #10
0
 def f():
     (yield gen.Callback("k1"))(42)
     res = yield gen.Wait("k1")
     self.assertEqual(42, res)
     self.stop()
Example #11
0
 def f():
     (yield gen.Callback((1, 2)))((3, 4))
     res = yield gen.Wait((1, 2))
     self.assertEqual((3, 4), res)
     self.stop()
Example #12
0
 def test_yield_outside_with_exception_stack_context(self):
     cb = yield gen.Callback('k1')
     with ExceptionStackContext(lambda t, v, tb: False):
         self.io_loop.add_callback(cb)
     yield gen.Wait('k1')
Example #13
0
 def test_yield_outside_with(self):
     # This pattern avoids the problem in the previous test.
     cb = yield gen.Callback('k1')
     with StackContext(functools.partial(self.context, 'c1')):
         self.io_loop.add_callback(cb)
     yield gen.Wait('k1')
Example #14
0
 def f():
     (yield gen.Callback("k1"))()
     res = yield gen.Wait("k1")
     assert res is None
     self.stop()
Example #15
0
    def get_authenticated_user(self,
                               redirect_uri,
                               callback,
                               scope=None,
                               **args):
        """
        class RenrenHandler(tornado.web.RequestHandler, RenrenGraphMixin):
            @tornado.web.asynchronous
            @gen.engine
            def get(self):
                self.get_authenticated_user(
                    callback=(yield gen.Callback('key')),
                    redirect_uri=url)
                user = yield gen.Wait('key')
                if not user:
                    raise web.HTTPError(500, "Renren auth failed")
                # do something else
                self.finish()
        """

        code = self.get_argument('code', None)
        if not code:
            self.authorize_redirect(redirect_uri, scope=scope, **args)
            return
        self.get_access_token(
            code,
            callback=(
                yield
                gen.Callback('_RenrenGraphMixin.get_authenticated_user')),
            redirect_uri=redirect_uri)

        response = yield gen.Wait('_RenrenGraphMixin.get_authenticated_user')
        if not response:
            callback(None)
            return
        try:
            user = json_decode(response.body)
        except:
            logging.warning("Error response %s fetching %s", response.body,
                            response.request.url)
            callback(None)
            return
        if 'error' in user:
            logging.warning("Error response %s fetching %s",
                            user['error_description'], response.request.url)
            callback(None)
            return

        #{{{ get session key
        self.renren_request(
            'renren_api/session_key',
            user['access_token'],
            callback=(yield gen.Callback('_RenrenGraphMixin._session_key')))
        response = yield gen.Wait('_RenrenGraphMixin._session_key')
        if response.error and not response.body:
            logging.warning("Error response %s fetching %s", response.error,
                            response.request.url)
        elif response.error:
            logging.warning("Error response %s fetching %s: %s",
                            response.error, response.request.url,
                            response.body)
        else:
            try:
                user['session'] = json_decode(response.body)
            except:
                pass
        #}}} #TODO delete when renren graph api released
        callback(user)
        return
Example #16
0
    def install_project(self, project_name):
        logger.debug('Install project %s', project_name)

        self.installed_projects.discard(project_name)

        if project_name in self.projects and not self.installing:
            self.installing = project_name
            self.install_output = []

            project = self.projects[project_name]
            project_path = os.path.join(self.projects_dir, project_name)

            self.on_project_installing(self, project)

            if project_name in self.failed_projects:
                if os.path.exists(project_path):
                    shutil.rmtree(project_path)
                self.failed_projects.discard(project_name)

            if os.path.exists(project_path):
                subprocess.Popen(
                    args=["git", "config", "remote.origin.url",
                          project["repository"]],
                    cwd=project_path
                ).communicate()

                logger.debug('git pull from %s', project["repository"])
                p = AsyncPopen2(
                    args=["git", "pull"],
                    cwd=project_path,
                    env=self.gitenv
                )
            else:
                logger.debug('git clone')
                p = AsyncPopen2(
                    args=["git", "clone", project["repository"], project_path],
                    env=self.gitenv
                )
            p.on_output += self.collect_install_output
            p.on_end += yield gen.Callback("gitend")

            try:
                p.run()
            except OSError as error:
                logger.exception("Install command error")
                result = 9999
                self.install_output.append(str(error))
            else:
                result = yield gen.Wait("gitend")

            if result != 0:
                self.install_output.append("\ngit returned %d\n" % result)
                logger.error(
                    "Project failed to install: %s",
                    "".join(self.install_output)
                )
                self.on_project_installation_failed(
                    self, project, "".join(self.install_output))
                self.installing = None
                self.failed_projects.add(project_name)

                raise gen.Return(False)
            else:
                logger.debug(
                    "git operation: %s", "".join(self.install_output)
                )

            project_install_file = os.path.join(project_path,
                                                "warrior-install.sh")

            if os.path.exists(project_install_file):
                if not is_executable(project_install_file):
                    logger.warning('File %s is not executable. '
                        'Automatically changing it to be executable!',
                        project_install_file)
                    set_file_executable(project_install_file)

                p = AsyncPopen2(
                    args=[project_install_file],
                    cwd=project_path
                )
                p.on_output += self.collect_install_output
                p.on_end += yield gen.Callback("installend")
                try:
                    p.run()
                except OSError as error:
                    logger.exception("Custom project install file error")
                    result = 9999
                    self.install_output.append(str(error))
                else:
                    result = yield gen.Wait("installend")

                if result != 0:
                    self.install_output.append(
                        "\nCustom installer returned %d\n" % result)
                    logger.error(
                        "Custom installer failed to install: %s",
                        "".join(self.install_output)
                    )
                    self.on_project_installation_failed(
                        self, project, "".join(self.install_output))
                    self.installing = None
                    self.failed_projects.add(project_name)

                    raise gen.Return(False)
                else:
                    logger.debug('Project install file result: %s', result)

            data_dir = os.path.join(self.data_dir, "data")
            if os.path.exists(data_dir):
                shutil.rmtree(data_dir)
            os.makedirs(data_dir)

            project_data_dir = os.path.join(project_path, "data")
            if os.path.islink(project_data_dir):
                os.remove(project_data_dir)
            elif os.path.isdir(project_data_dir):
                shutil.rmtree(project_data_dir)
            os.symlink(data_dir, project_data_dir)

            self.installed_projects.add(project_name)
            logger.debug('Install complete %s', "".join(self.install_output))
            self.on_project_installed(self, project,
                                      "".join(self.install_output))

            self.installing = None

            raise gen.Return(True)

        else:
            logger.warning('Not installing project %s because it is not a '
                'known project or an install is already in progress',
                project_name)