Esempio n. 1
0
    def get_config_info_by_tag(self, datamodel, dbsession, tag):
        """Return a list of dictionaries containing configuration information
        from notes with *tag* which are formatted like this::

            * url: https://bladiblah
            * color: #4433cc
        """

        tags = dbsession.query(Tag).filter_by(name=tag)

        entries = []

        if tags.count():
            google_calendar_tag = tags.one()

            from sqlalchemy.sql import select
            qry = select([datamodel.itemversions],
                    from_obj=get_current_itemversions_join(datamodel)) \
                    .where(ItemVersion.tags.any(id=google_calendar_tag.id))

            import re
            config_entry_re = re.compile(
                    r"^\s*(?:\*\s+)?([a-zA-Z0-9]+)\s*:\s*(.*)\s*$",
                    re.MULTILINE)
            for item_ver in dbsession.query(ItemVersion).from_statement(qry):
                entry = {}
                entries.append(entry)
                for match in config_entry_re.finditer(item_ver.contents):
                    entry[match.group(1)] = match.group(2)

        return entries
Esempio n. 2
0
    def get_tags_with_usecounts(self, session, model, parsed_query=None,
            max_timestamp=None, startswith=None, limit=None):
        from sqlalchemy.sql import select, func

        if parsed_query is not None:
            itemversions_q = query_itemversions(session, model,
                    parsed_query, max_timestamp)
        else:
            itemversions_q = select([model.itemversions],
                    from_obj=[get_current_itemversions_join(
                        model, max_timestamp)
                        ])

        itemversions_q = itemversions_q.alias("currentversions")

        # twuc_q stands for tags_with_usecount_query
        twuc_q = (
                select([
                    model.tags.c.name,
                    func.count(itemversions_q.c.id).label("use_count"),
                        ],
                    from_obj=[
                        model.itemversions_tags
                        .join(itemversions_q,
                            itemversions_q.c.id
                            == model.itemversions_tags.c.itemversion_id)
                        .join(model.tags)
                        ])
                )

        if startswith:
            twuc_q = twuc_q.where(model.tags.c.name.startswith(startswith))

        twuc_q = (
                twuc_q
                .group_by(model.tags.c.id)
                .having(func.count(itemversions_q.c.id) > 0)
                .order_by(model.tags.c.name)
                )

        if limit is not None:
            twuc_q = twuc_q.limit(limit)

        return session.execute(twuc_q)
Esempio n. 3
0
    def http_calendar_data(self, request):
        start = float(request.GET.get("start", 0))
        end = float(request.GET.get("end", 0))
        max_timestamp = None  # FIXME

        from_obj = get_current_itemversions_join(
                request.datamodel, max_timestamp)

        from sqlalchemy.sql import select, or_, and_
        where = or_(
            # start_date in range
            and_(
                start <= ItemVersion.start_date,
                ItemVersion.start_date <= end),
            # end_date in range
            and_(
                start <= ItemVersion.end_date,
                ItemVersion.end_date <= end),
            # span entire range
            and_(
                ItemVersion.start_date <= start,
                ItemVersion.end_date <= end)
            )

        qry = select([request.datamodel.itemversions], from_obj=from_obj) \
                .where(where)

        data = []
        for item_ver in (request.dbsession.query(ItemVersion).from_statement(qry)):
            if item_ver.all_day:
                from time import gmtime, mktime
                if item_ver.start_date is not None:
                    start = mktime(
                            kill_hms_in_time_struct(
                                gmtime(item_ver.start_date)))
                else:
                    start = None
                if item_ver.end_date is not None:
                    end = mktime(
                            kill_hms_in_time_struct(
                                gmtime(item_ver.end_date)))
                else:
                    end = None
            else:
                start = item_ver.start_date
                end = item_ver.end_date

            contents = item_ver.contents

            if len(contents) > 40:
                contents = contents[:40] + "..."

            from urllib import quote
            data.append(dict(
                id=item_ver.id,
                title=contents,
                start=start,
                end=end,
                allDay=item_ver.all_day,
                className=["tag-%s" % tag.name for tag in item_ver.tags],
                url="/#"+quote('{"query": "id(%d) nohide"}' % item_ver.item_id),
                ))

        from time import time
        now = time()
        data.append(dict(
            id="-1",
            title="NOW",
            start=now,
            end=now + 7.5 * 60,
            allDay=False,
            className=["calendar-now"],
            ))

        return request.respond(
                json.dumps(data),
                mimetype="text/plain")