def get(self, d):
        # Run after admin user logs in
        u = User.query().get()
        if u:
            today = datetime.today()
            g = Goal.CreateMonthly(u, date=today)
            g.Update(text=["Get it done"])
            g2 = Goal.Create(u, str(today.year))
            g2.Update(text=["Make progress"])
            ndb.put_multi([g, g2])
            h = Habit.Create(u)
            h.Update(name="Run")
            h.put()
            p = Project.Create(u)
            p.Update(title="Blog post", subhead="How Flow works")
            p.put()

            Task.Create(u, "Get this done").put()

            t = Task.Create(u, "Think hard", due=datetime.today())
            t2 = Task.Create(u, "Think even harder", due=datetime.today())
            message = "OK"
        else:
            message = "No user"
        self.json_out({'message': message})
示例#2
0
 def _add_task(self, task_name):
     if task_name:
         task = Task.Create(self.user, task_name)
         task.put()
         return self._comply_banter() + ". Task added."
     else:
         return "Sorry, I couldn't add your task. Try saying: 'Add task finish report'"
示例#3
0
    def submit(self, d):
        '''
        Submit today's journal (yesterday if 00:00 - 04:00)
        '''
        date = None
        _date = self.request.get('date')
        if _date:
            date = tools.fromISODate(_date)
        task_json = tools.getJson(self.request.get('tasks'))  # JSON
        params = tools.gets(self,
                            strings=['lat', 'lon', 'tags_from_text'],
                            json=['data'],
                            lists=['tags'])
        logging.debug(params)
        if params.get('data'):
            if not params.get('tags'):
                params['tags'] = []
            jrnl = MiniJournal.Create(self.user, date)
            jrnl.Update(**params)
            jrnl.parse_tags()
            jrnl.put()

            if task_json:
                # Save new tasks for tomorrow
                tasks = []
                for t in task_json:
                    if t:
                        task = Task.Create(self.user, t)
                        tasks.append(task)
                ndb.put_multi(tasks)
            self.success = True
            self.message = "Journal submitted!"

        self.set_response({'journal': jrnl.json() if jrnl else None})
    def test_task_report(self):
        due_date = datetime(2017, 10, 2, 12, 0)
        task = Task.Create(self.u, "New task", due=due_date)
        task.put()

        self._test_report({'type': REPORT.TASK_REPORT}, [
            'Date Created,Date Due,Date Done,Title,Done,Archived', ",".join([
                tools.sdatetime(task.dt_created, fmt=DATE_FMT),
                "2017-10-02 12:00:00 UTC", "N/A", "New task", "0", "0"
            ])
        ])
示例#5
0
    def test_task_report(self):
        due_date = datetime(2017, 10, 2, 12, 0)
        task = Task.Create(self.u, "New task", due=due_date)
        task.put()

        self._test_report(
            {'type': REPORT.TASK_REPORT},
            [[
                'Date Created', 'Date Due', 'Date Done', 'Title', 'Done',
                'Archived', 'Seconds Logged', 'Complete Sessions Logged'
            ],
             [
                 tools.sdatetime(task.dt_created,
                                 fmt=DATE_FMT), "2017-10-02 12:00:00 UTC",
                 "N/A", "New task", "0", "0", "0", "0"
             ]])
示例#6
0
 def update(self, d):
     '''
     Create or update
     '''
     id = self.request.get_range('id')
     params = tools.gets(self,
                         strings=['title'],
                         booleans=['archived', 'wip'],
                         integers=['status'])
     task = None
     if id:
         task = self.user.get(Task, id=id)
     elif 'title' in params:
         task = Task.Create(self.user, None)
     if task:
         self.message = task.Update(**params)
         self.success = True
         task.put()
     self.set_response({'task': task.json() if task else None})
示例#7
0
    def setUp(self):
        self.set_application(tst_app)
        self.setup_testbed()
        self.init_datastore_stub()
        self.init_memcache_stub()
        self.init_taskqueue_stub()
        self.init_mail_stub()
        self.register_search_api_stub()
        self.init_app_basics()

        self.u = u = self.users[0]
        self.u.Update(name="George")
        self.u.put()
        h = Habit.Create(u)
        h.Update(name="Run")
        h.put()
        t = Task.Create(u, "Dont forget the milk")
        t.put()
        g = Goal.CreateMonthly(u, date=datetime.today().date())
        g.Update(text=["Get it done", "Also get exercise"])
        g.put()
示例#8
0
 def _journal(self, message=""):
     DONE_MESSAGES = ["done", "that's all", "exit", "finished", "no"]
     MODES = ['questions', 'tasks', 'end']
     settings = tools.getJson(self.user.settings, {})
     questions = settings.get('journals', {}).get('questions', [])
     end_convo = False
     if questions:
         jrnl = MiniJournal.Get(self.user)
         if jrnl:
             return (JOURNAL.ALREADY_SUBMITTED_REPLY, True)
         else:
             if not self.cs:
                 self.cs = self._create_conversation_state()
                 self.cs.set_state('mode', 'questions')
             mode = self.cs.state.get('mode')
             mode_finished = False
             save_response = True
             last_question = None
             # Receive user message
             if mode == 'tasks':
                 is_done = message.lower().strip() in DONE_MESSAGES
                 mode_finished = is_done
                 save_response = not is_done
             elif mode == 'questions':
                 last_q_index = self.cs.state.get('last_q_index', -1)
                 last_question = last_q_index == len(questions) - 1
                 mode_finished = last_question
                 save_response = True
             if save_response:
                 successful_add = self.cs.add_message_from_user(message)
                 if not successful_add:
                     reply = self.cs.invalid_reply(
                     ) if mode == 'questions' else JOURNAL.INVALID_TASK
                     return (reply, False)
             mode_index = MODES.index(mode)
             if mode_finished:
                 mode = MODES[mode_index + 1]
                 self.cs.set_state('mode', mode)
             reply = None
             # Generate next reply
             if mode == 'questions':
                 next_q_index = last_q_index + 1
                 q = questions[next_q_index]
                 reply = q.get('text')
                 name = q.get('name')
                 response_type = q.get('response_type')
                 pattern = JOURNAL.PATTERNS.get(response_type)
                 store_number = response_type in JOURNAL.NUMERIC_RESPONSES
                 self.cs.expect_reply(
                     pattern, name,
                     store_number=store_number)  # Store as name
                 self.cs.set_state('last_q_index', next_q_index)
             elif mode == 'tasks':
                 # Ask to add tasks
                 tasks = self.cs.response_data.get('tasks', [])
                 additional = len(tasks) > 0
                 reply = JOURNAL.TOP_TASK_PROMPT_ADDTL if additional else JOURNAL.TOP_TASK_PROMPT
                 self.cs.expect_reply(JOURNAL.PTN_TEXT_RESPONSE,
                                      'tasks',
                                      store_array=True)  # Store as name
             elif mode == 'end':
                 # Finish and submit
                 task_names = []
                 if 'tasks' in self.cs.response_data:
                     task_names = self.cs.response_data.pop('tasks')
                 jrnl = MiniJournal.Create(self.user)
                 jrnl.Update(data=self.cs.response_data)
                 jrnl.parse_tags()
                 jrnl.put()
                 tasks = []
                 if task_names:
                     for tn in task_names:
                         task = Task.Create(self.user, tn)
                         tasks.append(task)
                 ndb.put_multi(tasks)
                 reply = "Report submitted!"
                 end_convo = True
             if reply:
                 self.cs.set_message_to_user(reply)
             if end_convo:
                 self._expire_conversation()
             else:
                 self._set_conversation_state()
             return (reply, end_convo)
     else:
         return ("Please visit flowdash.co to set up journal questions",
                 True)
示例#9
0
 def _add_task(self, task_name):
     task = Task.Create(self.user, task_name)
     task.put()
     return self._comply_banter() + ". Task added."