Example #1
0
    def group_nodes(self, nodes, group_type):
        futures = []
        groups = {}

        grouping_expr = lambda n: n.datestamp.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
        for node in nodes.values():
            key = grouping_expr(node)

            if not key in groups:
                groups[key] = group = NodeGroup(date_key=key, group_type=group_type)
            else:
                group = groups[key]

            group.nodes.append(node)
            group.count += 1

        for key, group in groups.items():
            persist_group = NodeGroup.get_by_date_key(key, group_type)
            if not persist_group:
                group_obj = group
            else:
                group_obj = persist_group
                group_obj.populate(nodes=group.nodes, count=group.count)

            futures.append(group_obj.put_async())

        return futures
Example #2
0
    def process_request(self, request):
        # key: (finalise, query)
        context_var_types = {
            'drinkstatic_nodes': (NodeList, lambda: Node.query().filter(Node.v_archived==False)),
            'drinkstatic_archived_nodes': (NodeList, lambda: Node.query().filter(Node.v_archived==True)),
            'drinkstatic_live_node_groups': (lambda m: m, lambda: NodeGroup.query().filter(NodeGroup.group_type==NodeGroup.NodeGroupType.live)),
            'drinkstatic_all_node_groups': (lambda m: m, lambda: NodeGroup.query().filter(NodeGroup.group_type==NodeGroup.NodeGroupType.all_nodes)),
            'drinkstatic_archived_node_groups': (lambda m: m, lambda: NodeGroup.query().filter(NodeGroup.group_type==NodeGroup.NodeGroupType.archived))
        }

        context_results = memcache.get_multi(context_var_types.keys())

        futures = {}
        for k,v in context_var_types.items():
            if k not in context_results:
                futures[k] = v[1]().fetch_async()

        ndb.Future.wait_all(futures.values())
        for k,v in futures.items():
            context_results[k] = context_var_types[k][0](list(v.get_result()))
            memcache.set(k, context_results[k], time=settings.DRINKSTATIC_MEMCACHE_TIME)

        for k,v in context_results.items():
            setattr(request, k, v)