def add_promo_code_words(self, session, text='', part_of_speech=0): text = text.strip() words = [] if text: with Session() as session: old_words = set(s for (s,) in session.query(PromoCodeWord.normalized_word).filter( PromoCodeWord.part_of_speech == part_of_speech).all()) for word in [s for s in shlex.split(text.replace(',', ' ')) if s]: if PromoCodeWord.normalize_word(word) not in old_words: words.append(PromoCodeWord().apply( dict(word=word, part_of_speech=part_of_speech))) words = [word.word for word in session.bulk_insert(words)] return {'words': words}
def delete_promo_code_word(self, session, word=''): result = 0 word = PromoCodeWord.normalize_word(word) if word: result = session.query(PromoCodeWord).filter( PromoCodeWord.normalized_word == word).delete(synchronize_session=False) return {'result': result}
def generate_promo_codes(self, session, message='', **params): defaults = dict( is_single_promo_code=1, count=1, use_words=False, length=9, segment_length=3, code='', expiration_date=c.ESCHATON, discount_type=0, discount=10, uses_allowed=1, export=False) params = dict(defaults, **{k: v for k, v in params.items() if k in defaults}) params['code'] = params['code'].strip() params['expiration_date'] = PromoCode.normalize_expiration_date(params['expiration_date']) try: params['count'] = int(params['count']) except Exception: params['count'] = 1 try: params['is_single_promo_code'] = int(params['is_single_promo_code']) except Exception: params['is_single_promo_code'] = 0 words = PromoCodeWord.group_by_parts_of_speech( session.query(PromoCodeWord).order_by(PromoCodeWord.normalized_word).all()) result = dict( params, message=message, promo_codes=[], words=[(i, s) for (i, s) in words.items()]) if cherrypy.request.method == 'POST': codes = None if params['is_single_promo_code']: params['count'] = 1 if params['code']: codes = [params['code']] if params['use_words'] and not codes and \ not any(s for (_, s) in words.items()): result['message'] = 'Please add some promo code words!' return result if not codes: if params['use_words']: codes = PromoCode.generate_word_code(params['count']) else: try: length = int(params['length']) except Exception: length = 9 try: segment_length = int(params['segment_length']) except Exception: segment_length = 3 codes = PromoCode.generate_random_code( params['count'], length, segment_length) promo_codes = [] for code in codes: params['code'] = code promo_codes.append(PromoCode().apply(params, restricted=False)) message = check_all(promo_codes) if message: result['message'] = message return result result['promo_codes'] = session.bulk_insert(promo_codes) generated_count = len(result['promo_codes']) if generated_count <= 0: result['message'] = "Could not generate any of the requested " \ "promo codes. Perhaps they've all been taken already?" return result if generated_count != params['count']: result['message'] = 'Some of the requested promo codes could not be generated' if params['export']: return self.export_promo_codes(codes=result['promo_codes']) result.update(defaults) return result
def generate_promo_codes(self, session, message='', **params): defaults = dict(is_single_promo_code=1, count=1, use_words=False, length=9, segment_length=3, code='', expiration_date=c.ESCHATON, discount_type=0, discount=10, uses_allowed=1) params = dict(defaults, **{k: v for k, v in params.items() if k in defaults}) params['code'] = params['code'].strip() try: params['count'] = int(params['count']) except Exception: params['count'] = 1 try: params['is_single_promo_code'] = int( params['is_single_promo_code']) except Exception: params['is_single_promo_code'] = 0 words = PromoCodeWord.group_by_parts_of_speech( session.query(PromoCodeWord).order_by( PromoCodeWord.normalized_word).all()) result = dict(params, message=message, promo_codes=[], words=[(i, s) for (i, s) in words.items()]) if cherrypy.request.method == 'POST': codes = None if params['is_single_promo_code']: params['count'] = 1 if params['code']: codes = [params['code']] if params['use_words'] and not codes and \ not any(s for (_, s) in words.items()): result['message'] = 'Please add some promo code words!' return result if not codes: if params['use_words']: codes = PromoCode.generate_word_code(params['count']) else: try: length = int(params['length']) except Exception: length = 9 try: segment_length = int(params['segment_length']) except Exception: segment_length = 3 codes = PromoCode.generate_random_code( params['count'], length, segment_length) promo_codes = [] for code in codes: params['code'] = code promo_codes.append(PromoCode().apply(params, restricted=False)) message = check_all(promo_codes) if message: result['message'] = message return result result['promo_codes'] = session.bulk_insert(promo_codes) generated_count = len(result['promo_codes']) if generated_count <= 0: result['message'] = "Could not generate any of the requested " \ "promo codes. Perhaps they've all been taken already?" return result if generated_count != params['count']: result[ 'message'] = 'Some of the requested promo codes could not be generated' if 'export' in params: return self.export_promo_codes(codes=result['promo_codes']) result.update(defaults) return result