def test_from_gtlt(self): from repoze.catalog.query import Ge from repoze.catalog.query import Le gt = Ge('index', 0) lt = Le('index', 5) inst = self._getTargetClass().fromGTLT(gt, lt) self.assertEqual(str(inst), "0 <= index <= 5")
def rules(self, context, date=None, user='', group=''): context_uid = uuid.UUID(IUUID(context)) query = Eq('context_uid', context_uid) & Eq('category', self.category) if date is not None: query = query & Le('valid_from', date) & Ge('valid_to', date) if self.for_attribute == FOR_USER: if group: msg = u'``group`` keyword must not be given if scope is user' raise ValueError(msg) if user: query = query & Eq('user', user) else: query = query & NotEq('user', '') elif self.for_attribute == FOR_GROUP: if user: msg = u'``user`` keyword must not be given if scope is group' raise ValueError(msg) if group: query = query & Eq('group', group) else: query = query & NotEq('group', '') else: if user or group: msg = u'``user`` and ``group`` keywords must not be given ' +\ u'if scope is general' raise ValueError(msg) query = query & Eq('user', '') & Eq('group', '') return self.rules_soup.query(query, sort_index='valid_from', reverse=True)
def _datetime_checker(self, from_date, to_date): # get portal language for datetime locale formating # used for quering portal = plone.api.portal.get() locale = portal.language if len(from_date) > 0: try: from_date = convert(from_date, locale=locale) except DateTimeConversionError: return None if len(to_date) > 0: try: to_date = convert(to_date, locale=locale) except DateTimeConversionError: return None if isinstance(to_date, datetime.datetime) \ and to_date.hour == 0 and to_date.minute == 0: to_date = to_date.replace(hour=23, minute=59, second=59) if isinstance(from_date, str) and isinstance(to_date, str): return None if isinstance(from_date, datetime.datetime) \ and isinstance(to_date, str): return Ge('created', from_date) if isinstance(from_date, str) \ and isinstance(to_date, datetime.datetime): return Le('created', to_date) if isinstance(from_date, datetime.datetime) \ and isinstance(to_date, datetime.datetime): return InRange('created', from_date, to_date)
def test_negate(self): from repoze.catalog.query import Ge inst = self._makeOne('index', 'val') self.assertEqual(inst.negate(), Ge('index', 'val'))
def csv(self, request): # get orders soup orders_soup = get_orders_soup(self.context) # get bookings soup bookings_soup = get_bookings_soup(self.context) # fetch user vendor uids vendor_uids = get_vendor_uids_for() # base query for time range query = Ge('created', self.from_date) & Le('created', self.to_date) # filter by given vendor uid or user vendor uids vendor_uid = self.vendor if vendor_uid: vendor_uid = uuid.UUID(vendor_uid) # raise if given vendor uid not in user vendor uids if vendor_uid not in vendor_uids: raise Unauthorized query = query & Any('vendor_uids', [vendor_uid]) else: query = query & Any('vendor_uids', vendor_uids) # filter by customer if given customer = self.customer if customer: query = query & Eq('creator', customer) # prepare csv writer sio = StringIO() ex = csv.writer(sio, dialect='excel-colon', quoting=csv.QUOTE_MINIMAL) # exported column keys as first line ex.writerow(ORDER_EXPORT_ATTRS + COMPUTED_ORDER_EXPORT_ATTRS.keys() + BOOKING_EXPORT_ATTRS + COMPUTED_BOOKING_EXPORT_ATTRS.keys()) # query orders for order in orders_soup.query(query): # restrict order bookings for current vendor_uids order_data = OrderData(self.context, order=order, vendor_uids=vendor_uids) order_attrs = list() # order export attrs for attr_name in ORDER_EXPORT_ATTRS: val = self.export_val(order, attr_name) order_attrs.append(val) # computed order export attrs for attr_name in COMPUTED_ORDER_EXPORT_ATTRS: cb = COMPUTED_ORDER_EXPORT_ATTRS[attr_name] val = cb(self.context, order_data) val = cleanup_for_csv(val) order_attrs.append(val) for booking in order_data.bookings: booking_attrs = list() # booking export attrs for attr_name in BOOKING_EXPORT_ATTRS: val = self.export_val(booking, attr_name) booking_attrs.append(val) # computed booking export attrs for attr_name in COMPUTED_BOOKING_EXPORT_ATTRS: cb = COMPUTED_BOOKING_EXPORT_ATTRS[attr_name] val = cb(self.context, booking) val = cleanup_for_csv(val) booking_attrs.append(val) ex.writerow(order_attrs + booking_attrs) booking.attrs['exported'] = True bookings_soup.reindex(booking) # create and return response s_start = self.from_date.strftime('%G-%m-%d_%H-%M-%S') s_end = self.to_date.strftime('%G-%m-%d_%H-%M-%S') filename = 'orders-export-%s-%s.csv' % (s_start, s_end) self.request.response.setHeader('Content-Type', 'text/csv') self.request.response.setHeader('Content-Disposition', 'attachment; filename=%s' % filename) ret = sio.getvalue() sio.close() return ret
def select(cls, attempt=0, sort_index=None, reverse=False, limit=None, *args, **kwargs): catalog = cls._get_catalog() qo = None for key in kwargs: key_parts = key.split('__', 1) original_key = key key = key_parts[0] if key not in catalog.keys(): print catalog.keys() raise NoIndex( 'The field %s is not in the list of indexed fields for %s' % (key, cls.__name__)) value = kwargs[original_key] if isinstance(value, ZODBModel): value = unicode(value) if len(key_parts) == 2: if key_parts[1] == 'gt': nqo = Gt(key, value) elif key_parts[1] == 'lt': nqo = Lt(key, value) elif key_parts[1] == 'gte': nqo = Ge(key, value) elif key_parts[1] == 'lte': nqo = Le(key, value) elif key_parts[1] == 'contains': nqo = Contains(key, value) elif key_parts[1] == 'ncontains': nqo = DoesNotContain(key, value) elif key_parts[1] == 'ne': nqo = NotEq(key, value) elif key_parts[1] == 'in': nqo = Any(key, value) elif key_parts[1] == 'nin': nqo = NotAny(key, value) else: raise Exception("Unknown comparator %s" % (key_parts[1])) else: nqo = Eq(key, value) if qo: qo = qo & nqo else: qo = nqo root = cls._get_root() if qo: _, results = catalog.query(qo, sort_index=sort_index, reverse=reverse, limit=limit) else: _, results = catalog.sort_result(root.keys(), sort_index=sort_index, reverse=reverse, limit=limit) try: return [root[x] for x in results] except KeyError, e: if attempt < 2: cls.index() return cls.select(attempt=attempt + 1, *args, **kwargs) raise e