Esempio n. 1
0
    def parse_entry(self, e, session=None):
        if session is None:
            session = db.session.object_session(e)
        if session is None:
            session = db.session()
        session.add(e)
        seen = set()
        words = list(w for w in pattern.findall(e.contents)
                     if w.lower() not in all_stopwords)
        out = []
        for w in words:
            try:
                if w[0] == w[0].upper():
                    if w not in seen:
                        c = count_occurrences(
                            webapp.models.User.query.filter(
                                webapp.models.User.id == e.owner_id).first(),
                            w)
                        label = f'{w}'
                        url = flask.url_for(
                            f'site.plugins-{self.safe_name}-index',
                            page=1,
                            search=w)
                        out.append(
                            dict(
                                html=f'<a href="{url}" >{label}</a>',
                                url=url,
                                label=label,
                            ))
                    seen.add(w)
            except IndexError:
                pass

        yield from out
Esempio n. 2
0
    def get_objects(self, **kwargs):
        start_date = self.args_to_date(**kwargs)
        session = kwargs.get('session', db.session())

        found = list(flask_login.current_user.query_all_entries().filter(
            models.JournalEntry.create_date >= start_date).order_by(
                models.JournalEntry.create_date))
        return found
Esempio n. 3
0
 def parse_entry(self, e, session=None):
     if session is None:
         session = db.session.object_session(e)
     if session is None:
         session = db.session()
     session.add(e)
     out = []
     for h in extract_headings(e):
         item = dict(html=h, label=h)
         yield item
Esempio n. 4
0
 def get_preference_model(self, user_obj):
     obj = db.session.query(models.UserPluginToggle).filter(
         models.UserPluginToggle.user_id == user_obj.id).filter(
             models.UserPluginToggle.plugin_name == self.name).first()
     if obj is None:
         session = db.session()
         obj = models.UserPluginToggle(plugin_name=self.name,
                                       user_id=user_obj.id)
         session.add(obj)
         session.commit()
     return models.user_plugin_toggle_schema.dump(obj=obj)
Esempio n. 5
0
 def post(self, **kwargs):
     session = db.session()
     cu = flask_login.current_user
     obj = models.JournalEntry.query.filter_by(id=kwargs['id']).first()
     if not obj:
         flask.abort(404)
     if cu == obj.owner:
         old_date = obj.date_string
         session.delete(obj)
     session.commit()
     return flask.redirect(
         flask.url_for('home', success=f'Deleted entry for {old_date}'))
Esempio n. 6
0
 def post(self):
     cu = flask_login.current_user
     form = forms.UserEditForm(obj=cu)
     if form.validate_on_submit():
         session = db.session()
         cu.first_name = form.first_name.data
         cu.last_name = form.last_name.data
         cu.email = form.email.data
         session.add(cu)
         session.commit()
         # cu.update_settings(form)
     else:
         return flask.render_template(context=dict(settings_form=form))
     return flask.redirect(flask.url_for('settings'))
Esempio n. 7
0
    def post(self, **kwargs):

        upload_form = forms.UploadForm()
        self.logger.debug('Try upload')
        good_parse = False
        if upload_form.validate_on_submit():
            logger.debug('Invalid form')
            file = flask.request.files[upload_form.file.name]
            session = db.session()
            try:
                parsed = parsing.identify_entries(
                    file.read().decode().split('\n'))
            except ValueError as e:
                # upload_form.file.errors
                self.logger.debug('parse failed')
                return self.get(upload_form=upload_form, error=e)

            flask_login.current_user.query_all_entries().delete()
            for e in parsed:
                body_text = e.body.replace('\r', '')
                found = flask_login.current_user.query_all_entries().filter_by(
                    create_date=e.date).first()
                if found:
                    found.contents = body_text
                else:
                    found = models.JournalEntry(owner=flask_login.current_user,
                                                create_date=e.date,
                                                contents=body_text)
                plugin_manager.parse_entry(found)
                session.add(found)

            session.flush()
            session.commit()
            self.logger.debug('parse succeeded')
            good_parse = True
        if good_parse:
            # pre-calculate any plugins that happen to cache things.
            db.session.add(flask_login.current_user)

            q = list(flask_login.current_user.query_all_entries())

            for e in q:
                db.session.add(e)
                list(plugin_manager.parse_entry(e))
            return self.get(upload_form=upload_form,
                            success='Your journal was successfully parsed!')
        else:
            return self.get(upload_form=upload_form,
                            error='Invalid submission!')
Esempio n. 8
0
    def _parse_entry_cached(self,
                            e: 'webapp.models.JournalEntry') -> 'List[str]':
        if not self.__class__.__cache_enabled__:
            results = list(self.parse_entry(e))
            return results
        session = db.session
        session.add(e)
        found = session.query(models.PluginOutputCache).filter(
            models.PluginOutputCache.parent_id == e.id).filter(
                models.PluginOutputCache.plugin_name ==
                self.safe_name).first()

        if found:
            if (found.updated_at < e.updated_at or found.schema_version is None
                    or found.schema_version <
                    self.__class__.cache_schema_version):

                results = list(self.parse_entry(e))
                found.json = json.dumps(results)
                session.add(found)
                session.commit()

            else:
                results = json.loads(found.json)
            try:
                if len(results) == 0:
                    results = list(self.parse_entry(e))
                return PluginReturnValue(results).dict
            except ValueError:
                session.delete(found)
                session.commit()

        results = list(self.parse_entry(e))
        found = models.PluginOutputCache(
            parent=e,
            json=json.dumps(results),
            plugin_name=self.safe_name,
            schema_version=self.__class__.cache_schema_version)
        session = db.session.object_session(e)
        if session is None:
            session = db.session()
        session.add(found)
        session.commit()
        return results
Esempio n. 9
0
    def post(self, **kwargs):
        form = forms.JournalEntryEditForm(**flask.request.form)
        cu = flask_login.current_user
        context = dict(errors=list())
        if form.validate_on_submit():
            if form.owner_id.data == cu.id:
                obj = models.JournalEntry.query.filter_by(id=form.id.data,
                                                          owner=cu).first()
                form.populate_obj(obj)
                session = db.session()
                session.add(obj)
                session.commit()

                return flask.redirect(api.link_for_entry(obj))
            else:
                flask.abort(403)
        else:
            context['errors'].append('form invalid')
            return self.get(**context)
Esempio n. 10
0
    def post(self, **kwargs):
        form = forms.JournalEntryCreateForm(**flask.request.form)
        context = dict(form=form, errors=[])
        context.update(**kwargs)
        if form.validate_on_submit():
            obj = models.JournalEntry(owner=flask_login.current_user)
            form.populate_obj(obj)
            print('obj', obj.owner)
            session = db.session()
            try:
                session.add(obj)
                session.commit()
            except sqlalchemy.exc.IntegrityError:
                session.rollback()
                context['errors'].append('That date already has an entry!')
                return self.get(**context)

            return flask.redirect(
                api.link_for_entry(
                    flask_login.current_user.get_latest_entry()))

        else:
            return self.get(**context)