コード例 #1
0
ファイル: tweet.py プロジェクト: joeykblack/Appspot
 def get(self):
     story=Story().all().latest()
     msg=toHash(story.mykey) + " " + story.link
     if not story.tweeted:
         story.tweeted=True
         story.save()
         twitterCron.tweet(msg)
     else:
         logging.info('Already tweeted: ' + msg)
コード例 #2
0
 def post(self):
     try:
         current_app.logger.info("Received StoriesResource POST Request")
         StatManager.create(request.environ["PATH_INFO"] + " " +
                            request.environ["REQUEST_METHOD"])
         story_data = json.loads(request.data)
         story_created = Story.create(
             story_data["user_id"], story_data["location"],
             story_data["visibility"], story_data["title"],
             story_data["description"], story_data["is_quick_story"],
             story_data["timestamp"])
         current_app.logger.debug("Python Server Response: 200 - %s",
                                  story_created)
         if config.firebase_config.FIREBASE_NOTIFICATIONS_ENABLED is True:
             try:
                 user = User.get_user_by_id(story_data["user_id"])
                 if user is not None:
                     user = user["user"]
                     for friend_username in user["friends_usernames"]:
                         try:
                             FirebaseManager.send_firebase_message(
                                 user["name"], friend_username,
                                 NOTIFICATION_TYPE_STORY_MESSAGE,
                                 NOTIFICATION_TYPE_STORY)
                         except UserNotFoundException:
                             pass
             except UserNotFoundException:
                 pass
         return make_response(jsonify(story_created), 200)
     except ValueError:
         error = "Unable to handle StoriesResource POST Request"
         current_app.logger.error("Python Server Response: 500 - %s", error)
         return ErrorHandler.create_error_response(500, error)
コード例 #3
0
    def post(self):
        try:
            id = self.request.GET['chapter_id']
        except:
            id = None

        if not id:
            self.redirect("/error?msg=Key missing for deletion (post).")
            return

        user = users.get_current_user()

        if user:
            try:
                chapter = ndb.Key(urlsafe=id).get()
                story = Story.get_by_id(chapter.story)
            except:
                self.redirect("/error?msg=Key was not found for deletion.")
                return

            self.redirect("/info?msg=Chapter deleted: " +
                          (story.title + ": " +
                           chapter.title).encode("ascii", "replace") +
                          "&url=/manage_chapters?story_id=" +
                          story.key.urlsafe())

            # Remove chapter
            model.remove_data.remove_chapter(chapter.key)
        else:
            self.redirect("/")
コード例 #4
0
ファイル: purge.py プロジェクト: joeykblack/Appspot
 def get(self):
     stories=Story.all().order('-timestamp').fetch(1000, offset=0)
     for story in stories:
         story.delete()
     videos=Video.all().order('-timestamp').fetch(1000, offset=0)
     for video in videos:
         video.delete()
コード例 #5
0
    def get(self):
        try:
            chapter_id = self.request.GET['chapter_id']
        except:
            self.redirect("/error?msg=missing key for modifying")
            return

        user = users.get_current_user()

        if user:
            user_name = user.nickname()
            access_link = users.create_logout_url("/")

            try:
                chapter = ndb.Key(urlsafe=chapter_id).get()
                story = Story.get_by_id(chapter.story)
            except:
                self.redirect("/error?msg=key does not exist")
                return

            template_values = {
                "info": AppInfo,
                "user_name": user_name,
                "access_link": access_link,
                "story": story,
                "chapter": chapter,
            }

            jinja = jinja2.get_jinja2(app=self.app)
            self.response.write(
                jinja.render_template("modify_chapter.html",
                                      **template_values))
        else:
            self.redirect("/")
コード例 #6
0
ファイル: delete.py プロジェクト: Baltasarq/el-boli
    def post(self):
        try:
            section_id = self.request.GET['section_id']
        except:
            self.redirect("/error?msg=Key missing for deletion.")
            return

        user = users.get_current_user()

        if user:
            try:
                section = ndb.Key(urlsafe=section_id).get()
                chapter = Chapter.get_by_id(section.chapter)
                story = Story.get_by_id(chapter.story)
            except:
                self.redirect("/error?msg=Key was not found.")
                return

            self.redirect("/info?msg=Section deleted: " +
                          story.title.encode("ascii", "replace") + ": " +
                          chapter.title.encode("ascii", "replace") + " - " +
                          str(section.num) +
                          "&url=/manage_sections?chapter_id=" +
                          chapter.key.urlsafe())

            # Remove story
            model.remove_data.remove_section(section.key)
        else:
            self.redirect("/")
コード例 #7
0
    def setUp(self):
        super(TestStories, self).setUp()
        self.resource_name = 'story'
        self.resources_uri = self.root_uri + 'projects/1/sprints/1/stories'
        self.single_resource_uri = self.resources_uri + '/1'
        self.example_resource = Story(title="Test story title",
                                      description="some description",
                                      points=12,
                                      notes='some notes',
                                      sprint_id=1,
                                      id_=2)

        self.update_resource = Story(title="Updated test story title",
                                     description="some updated description",
                                     points=1,
                                     notes='some updated notes',
                                     sprint_id=1,
                                     id_=2)
コード例 #8
0
ファイル: article.py プロジェクト: joeykblack/Appspot
 def get(self):
     stories=[]
     for s in Story.all().order('-timestamp').fetch(100):
         stories.append(s)
     
     template_values = {
                        "stories":stories
                        }
     path = os.path.join(os.path.dirname(__file__), '../html/article.html')
     shared.render(self, path, template_values)
コード例 #9
0
    def patch(self, story_id):
        try:
            current_app.logger.info(
                "Received SingleStoryResource PATCH Request for story: " +
                str(request.data))
            StatManager.create(request.environ["PATH_INFO"] + " " +
                               request.environ["REQUEST_METHOD"])
            patch_document = json.loads(request.data)

            # See http://jsonpatch.com/ for more info
            story_updated = None
            if patch_document["path"] == "/reactions" and patch_document[
                    "op"] == "add":
                current_app.logger.debug("Add reaction: " +
                                         str(patch_document["value"]))
                story_updated = Story.add_reaction(story_id,
                                                   patch_document["value"])

            if patch_document["path"] == "/reactions" and patch_document[
                    "op"] == "remove":
                current_app.logger.debug("Remove reaction: " +
                                         str(patch_document["value"]))
                story_updated = Story.remove_reaction(story_id,
                                                      patch_document["value"])

            if patch_document["path"] == "/comments" and patch_document[
                    "op"] == "add":
                current_app.logger.debug("Adding comment to story: " +
                                         str(patch_document["value"]))
                story_updated = Story.add_comment(story_id,
                                                  patch_document["value"])

            current_app.logger.debug("Python Server Response: 200 - %s",
                                     story_updated)
            return make_response(jsonify(story_updated), 200)
        except ValueError:
            error = "Unable to handle StoriesResource POST Request"
            current_app.logger.error("Python Server Response: 500 - %s", error)
            return ErrorHandler.create_error_response(500, error)
コード例 #10
0
ファイル: index.py プロジェクト: joeykblack/Appspot
 def get(self):
     stories=[]
     for s in Story.all().order('-timestamp').fetch(100):
         stories.append(s)
     videos=[]
     for v in Video.all().order('-timestamp').fetch(100):
         videos.append(v)
     
     template_values = {
                        "stories":stories,
                        "videos":videos
                        }
     path = os.path.join(os.path.dirname(__file__), '../html/index.html')
     shared.render(self, path, template_values)
コード例 #11
0
    def post(self):
        try:
            id = self.request.GET['story_id']
        except:
            id = None

        if not id:
            self.redirect("/error?msg=missing id for modification")
            return

        user = users.get_current_user()
        story = None

        if user:
            # Get story by key
            try:
                story = ndb.Key(urlsafe=id).get()
            except:
                self.redirect("/error?msg=key does not exist")
                return

            story.title = self.request.get("title", "").strip()
            story.subtitle = self.request.get("subtitle", "").strip()
            story.summary = self.request.get("summary", "").strip()

            # Chk
            if len(story.title) < 1:
                self.redirect("/error?msg=Aborted modification: missing title")
                return

            # Chk title
            existing_stories = Story.query(Story.title == story.title)
            if (existing_stories and existing_stories.count() > 0
                    and existing_stories.get() != story):
                self.redirect("/error?msg=Story with title \"" +
                              story.title.encode("ascii", "replace") +
                              "\" already exists.")
                return

            # Save
            story.put()
            self.redirect("/info?msg=Story modified: \"" +
                          story.title.encode("ascii", "replace") +
                          "\"&url=/manage_stories")
        else:
            self.redirect("/")
コード例 #12
0
ファイル: add.py プロジェクト: Baltasarq/el-boli
    def get(self):
        user = users.get_current_user()
        num_stories = len(Story.query().fetch(keys_only=True)) + 1

        if user:
            story = Story()
            story.user = user.user_id()
            story.title = "Untitled " + str(num_stories)
            story.subtitle = "A new story."
            story.summary = "An awesome story."
            key = model.story.update(story)
            self.redirect("/stories/modify?story_id=" + key.urlsafe())
        else:
            self.redirect("/")

        return
コード例 #13
0
ファイル: modify.py プロジェクト: Baltasarq/el-boli
    def post(self):
        try:
            character_id = self.request.GET['character_id']
        except:
            self.redirect("/error?msg=missing id for modification")
            return

        user = users.get_current_user()

        if user:
            # Get story by key
            try:
                character = ndb.Key(urlsafe=character_id).get()
                story = Story.get_by_id(character.story)
            except:
                self.redirect("/error?msg=key does not exist")
                return

            character.name = self.request.get("name", "").strip()
            character.summary = self.request.get("summary", "").strip()

            # Chk
            if len(character.name) < 1:
                self.redirect("/error?msg=Aborted modification: missing name")
                return

            # Chk title
            existing_characters = Character.query(
                Character.name == character.name)
            if (existing_characters and existing_characters.count() > 0
                    and existing_characters.get() != character):
                self.redirect("/error?msg=Character with name \"" +
                              character.title.encode("ascii", "replace") +
                              "\" already exists.")
                return

            # Save
            character.put()
            self.redirect("/info?msg=Character modified: \"" +
                          character.name.encode("ascii", "replace") + "@" +
                          story.title.encode("ascii", "replace") +
                          "\"&url=/manage_characters?story_id=" +
                          story.key.urlsafe())
        else:
            self.redirect("/")
コード例 #14
0
ファイル: GTrendCron.py プロジェクト: joeykblack/Appspot
def buildStoryFromString(data, stories):
    story=findStory(data, stories)
    if not story:
        url="http://www.google.com/search?q="+data.replace(' ', '+')
        logging.info(url)
        try:
            raw_data = http.getHttp(url)
            soup = BeautifulSoup(raw_data)
            story=None
            a=soup.find(lambda tag: tag.name=='a' and tag.attrs[0][0]=='href' and not tag.attrs[0][1].startswith('/') and not 'google' in tag.attrs[0][1])
            if a and a.text:
                story=Story()
                story.deleteFlag=False
                story.mykey=data
                story.title=''
                for c in a.contents:
                    if type(c) == Tag:
                        story.title+=c.text
                    else:
                        story.title+=c
                story.link=a.attrs[0][1]
                story.text=''
                for c in a.parent.contents[4].contents:
                    if type(c) == Tag:
                        story.text+=c.text
                    else:
                        story.text+=c
                story.put()
        except DownloadError: #@UndefinedVariable
            logging.error(url + ' failed to load')
    
    '''
    scraper=SearchScraper()
    scraper.feed(raw_data)
    return scraper.story
    '''
    
    
    
    
    
コード例 #15
0
ファイル: manage_sections.py プロジェクト: Baltasarq/el-boli
    def get(self):
        user = users.get_current_user()

        if user:
            user_name = user.nickname()

            try:
                chapter_id = self.request.GET['chapter_id']
            except:
                self.redirect("/error?msg=Key missing for management.")
                return

            try:
                chapter = ndb.Key(urlsafe=chapter_id).get()
                story = Story.get_by_id(chapter.story)
            except:
                self.redirect("/error?msg=Key was not found.")
                return

            sections = Section.query(
                Section.chapter == chapter.key.id()).order(Section.num)
            total_stats = count_chapter(chapter.key.id())
            access_link = users.create_logout_url("/")

            template_values = {
                "info": AppInfo,
                "user_name": user_name,
                "access_link": access_link,
                "story": story,
                "chapter": chapter,
                "sections": sections,
                "total_crs": total_stats["crs"],
                "total_ws": total_stats["ws"],
                "total_pgs": total_stats["pgs"]
            }

            jinja = jinja2.get_jinja2(app=self.app)
            self.response.write(
                jinja.render_template("sections.html", **template_values))
        else:
            self.redirect("/")
            return
コード例 #16
0
ファイル: modify.py プロジェクト: Baltasarq/el-boli
    def post(self):
        try:
            section_id = self.request.GET['section_id']
        except:
            self.redirect("/error?msg=missing key for modification")
            return

        user = users.get_current_user()

        if user:
            try:
                section = ndb.Key(urlsafe=section_id).get()
                chapter = Chapter.get_by_id(section.chapter)
                story = Story.get_by_id(chapter.story)
            except:
                self.redirect("/error?msg=key does not exist")
                return

            section.text = self.request.get("text", "").strip()

            # Chk
            if len(section.text) < 1:
                self.redirect(
                    "/error?msg=Aborted modification: missing section's text")
                return

            if section.num < 1:
                self.redirect(
                    "/error?msg=Aborted modification: missing section's number"
                )
                return

            # Save
            model.section.update(section)
            self.redirect("/info?msg=Section modified: \"" +
                          (story.title + ": " +
                           chapter.title).encode("ascii", "replace") + ": " +
                          str(section.num) +
                          "\"&url=/manage_sections?chapter_id=" +
                          chapter.key.urlsafe())
        else:
            self.redirect("/")
コード例 #17
0
 def get(self):
     try:
         user_id = request.args.get('user_id')
         current_app.logger.info(
             "Received StoriesResource GET Request for User ID: " + user_id)
         StatManager.create(request.environ["PATH_INFO"] + " " +
                            request.environ["REQUEST_METHOD"])
         response = Story.get_by_user(user_id)
         current_app.logger.debug("Python Server Response: 200 - %s",
                                  response)
         return make_response(jsonify(response), 200)
     except ValueError:
         error = "Unable to handle StoriesResource GET Request"
         current_app.logger.error("Python Server Response: 500 - %s", error)
         return ErrorHandler.create_error_response(500, error)
     except UserNotFoundException as e:
         status_code = 403
         message = e.args[0]
         current_app.logger.error("Python Server Response: %s - %s",
                                  status_code, message)
         return ErrorHandler.create_error_response(status_code, message)
コード例 #18
0
 def delete(self, story_id):
     try:
         current_app.logger.info(
             "Received SingleStoryResource DELETE Request for story: " +
             story_id)
         StatManager.create(request.environ["PATH_INFO"] + " " +
                            request.environ["REQUEST_METHOD"])
         deleted_story = Story.delete(story_id)
         if deleted_story is None:
             current_app.logger.debug("Python Server Response: 409 - %s",
                                      "No story found with that ID!.")
             return make_response("No story found with that ID!", 409)
         else:
             current_app.logger.debug("Python Server Response: 201 - %s",
                                      deleted_story)
             return make_response(jsonify(deleted_story), 201)
     except ValueError:
         error = "Unable to handle SingleFriendshipRequestResource - DELETE Request"
         current_app.logger.error("Python Server Response: %s - %s", 500,
                                  error)
         return ErrorHandler.create_error_response(500, error)
コード例 #19
0
    def get(self):
        user = users.get_current_user()

        if user:
            user_name = user.nickname()
            stories = Story.query(
                Story.user == user.user_id()).order(-Story.added)
            access_link = users.create_logout_url("/")

            template_values = {
                "info": AppInfo,
                "user_name": user_name,
                "access_link": access_link,
                "stories": stories
            }

            jinja = jinja2.get_jinja2(app=self.app)
            self.response.write(
                jinja.render_template("stories.html", **template_values))
        else:
            self.redirect("/")
            return
コード例 #20
0
    def post(self, story_id):
        try:
            current_app.logger.info("Received FileResource POST Request")
            StatManager.create(request.environ["PATH_INFO"] + " " + request.environ["REQUEST_METHOD"])
            upload_headers = {'Authorization': 'Bearer {}'.format(APP_SERVER_TOKEN)}
            uploaded_file = request.files['file'].read()
            filename = request.form.get('filename')
            shared_server_upload = requests.post(SHARED_SERVER_FILE_UPLOAD_PATH,
                                                 files={'file': (filename, uploaded_file)}, headers=upload_headers)
            current_app.logger.debug("Shared Server Response: %s - %s", shared_server_upload.status_code,
                                     shared_server_upload.text)
            file_data = json.loads(shared_server_upload.text)
            if shared_server_upload.ok:
                story_updated = Story.update_file(story_id, file_data['file']['resource'])
                current_app.logger.debug("Python Server Response: %s - %s", shared_server_upload.status_code,
                                         story_updated)
                return make_response(jsonify(story_updated), 200)

            return make_response(shared_server_upload.text, shared_server_upload.status_code)
        except ValueError as ex:
            error = "Unable to handle FileResource POST Request" + ex
            current_app.logger.error("Python Server Response: 500 - %s", error)
            return ErrorHandler.create_error_response(500, error)
コード例 #21
0
ファイル: delete.py プロジェクト: Baltasarq/el-boli
    def get(self):
        try:
            id = self.request.GET['section_id']
        except:
            self.redirect("/error?msg=Key missing for deletion.")
            return

        user = users.get_current_user()

        if user:
            user_name = user.nickname()
            access_link = users.create_logout_url("/")

            try:
                section = ndb.Key(urlsafe=id).get()
                chapter = Chapter.get_by_id(section.chapter)
                story = Story.get_by_id(chapter.story)
            except:
                self.redirect("/error?msg=Key was not found.")
                return

            template_values = {
                "info": AppInfo,
                "user_name": user_name,
                "access_link": access_link,
                "story": story,
                "chapter": chapter,
                "section": section
            }

            jinja = jinja2.get_jinja2(app=self.app)
            self.response.write(
                jinja.render_template("delete_section.html",
                                      **template_values))
        else:
            self.redirect("/")
コード例 #22
0
ファイル: stories.py プロジェクト: joeykblack/Appspot
 def get(self):
     stories=Story.all().fetch(1000)
     GTrendCron.doCron(stories)     
     videos=Video.all().fetch(1000)
     YTrendCron.doCron(videos)
コード例 #23
0
    def __init__(self):
        super(TestDataGenerator, self).__init__()

        self.users = [
            User(email='asdf@asdf',
                 password=HASHED_EXAMPLE_PASSWORD,
                 firstname='Bertrand',
                 lastname='Meier',
                 projects=[],
                 assigned_tasks=[],
                 id_=1),
            User(email='aaron@richiger',
                 password=HASHED_EXAMPLE_PASSWORD,
                 firstname='Aaron',
                 lastname='Richiger',
                 projects=[],
                 assigned_tasks=[],
                 id_=2),
            User(email='vimal@chellakudam',
                 password=HASHED_EXAMPLE_PASSWORD,
                 firstname='Vimal',
                 lastname='Chellakudam',
                 projects=[],
                 assigned_tasks=[],
                 id_=3)
        ]

        self.projects = [
            Project(name='Project 1',
                    description='Some description',
                    start_date=date(2014, 1, 1),
                    end_date=date(2015, 1, 31),
                    status=OPEN,
                    owner=1,
                    invited_devs=[],
                    sprints=[],
                    id_=1),
            Project(name='Project 2',
                    description='Some description',
                    start_date=date(2014, 1, 1),
                    end_date=date(2015, 1, 31),
                    status=OPEN,
                    owner=1,
                    invited_devs=[],
                    sprints=[],
                    id_=2),
            Project(name='Project 3',
                    description='Some description',
                    start_date=date(2014, 1, 1),
                    end_date=date(2015, 1, 31),
                    status=OPEN,
                    owner=2,
                    invited_devs=[],
                    sprints=[],
                    id_=3)
        ]

        self.messages = [
            Message(text='Message 1',
                    timestamp='2012-04-23T18:25:43.511Z',
                    project_id=1,
                    user_id=1,
                    id_=1),
            Message(text='Message 2',
                    timestamp='2012-04-23T18:26:43.511Z',
                    project_id=1,
                    user_id=2,
                    id_=2),
            Message(text='Message 3',
                    timestamp='2012-04-23T18:27:43.511Z',
                    project_id=1,
                    user_id=1,
                    id_=3),
            Message(text='Message 4',
                    timestamp='2012-04-23T18:28:43.511Z',
                    project_id=1,
                    user_id=2,
                    id_=4),
        ]

        self.sprints = [
            Sprint(name='Sprint 1',
                   start_date=date(2014, 1, 1),
                   end_date=date(2014, 1, 31),
                   status=CLOSED,
                   project_id=1,
                   stories=[],
                   id_=1),
            Sprint(name='Sprint 2',
                   start_date=date(2014, 12, 1),
                   end_date=date(2014, 12, 31),
                   status=IN_PROGRESS,
                   project_id=1,
                   stories=[],
                   id_=2),
            Sprint(name='Sprint 3',
                   start_date=date(2015, 1, 1),
                   end_date=date(2015, 1, 31),
                   status=PLANNED,
                   project_id=1,
                   stories=[],
                   id_=3),
            Sprint(name='Sprint 4',
                   start_date=date(2014, 12, 1),
                   end_date=date(2014, 12, 31),
                   status=IN_PROGRESS,
                   project_id=2,
                   stories=[],
                   id_=4)
        ]

        self.stories = [
            Story(title='Story 1',
                  description='Story description',
                  points=40,
                  notes='Some note',
                  sprint_id=1,
                  id_=1),
            Story(title='Story 2',
                  description='Story description',
                  points=50,
                  notes='Some note',
                  sprint_id=1,
                  id_=2),
            Story(title='Story 3',
                  description='Story description',
                  points=60,
                  notes='Some note',
                  sprint_id=1,
                  id_=3),
            Story(title='Story 4',
                  description='Story description',
                  points=70,
                  notes='Some note',
                  sprint_id=2,
                  id_=4)
        ]

        self.tasks = [
            Task(nr=10,
                 description='Task 1',
                 comment='Some comment',
                 status=T_COMPLETED,
                 progress=100,
                 completion_date=date(2014, 1, 10),
                 owner=1,
                 story_id=1,
                 assigned_devs=[],
                 id_=1),
            Task(nr=10,
                 description='Task 2',
                 comment='Some comment',
                 status=T_COMPLETED,
                 progress=100,
                 completion_date=date(2014, 1, 14),
                 owner=1,
                 story_id=1,
                 assigned_devs=[],
                 id_=2),
            Task(nr=10,
                 description='Task 3',
                 comment='Some comment',
                 status=T_IN_PROGRESS,
                 progress=50,
                 completion_date=None,
                 owner=2,
                 story_id=1,
                 assigned_devs=[],
                 id_=3),
            Task(nr=10,
                 description='Task 4',
                 comment='Some comment',
                 status=T_NOT_STARTED,
                 progress=0,
                 completion_date=None,
                 owner=2,
                 story_id=2,
                 assigned_devs=[],
                 id_=4)
        ]

        self.project_shares = [
            ProjectShare(user_id=1, project_id=1),
            ProjectShare(user_id=1, project_id=2),
            ProjectShare(user_id=1, project_id=3),
            ProjectShare(user_id=2, project_id=1),
            ProjectShare(user_id=2, project_id=3)
        ]

        self.task_assignments = [
            TaskAssignment(user_id=1, task_id=1),
            TaskAssignment(user_id=1, task_id=2),
            TaskAssignment(user_id=2, task_id=3),
            TaskAssignment(user_id=2, task_id=1),
            TaskAssignment(user_id=2, task_id=3),
            TaskAssignment(user_id=2, task_id=4),
        ]