def do_enter(): """Enter numbers into database""" numbers = set(parse_numbers(request.forms.get('numbers', ''))) timestamp = datetime.datetime.now() usr_hash = get_fingerprint(request) result_num = [] # TODO make place variable, depending on current request q = Place.select().where(Place.place == 'LAGESO') lageso = q.get() if q.count() == 1 else None if not numbers: result_num.append(_('novalidnumbers')) else: for num in numbers: if is_valid_number(num): try: n = Number.create(number=num.upper(), time=timestamp, place=lageso, fingerprint=usr_hash) result_num.append(n.number) except IntegrityError: try: n = Number.get(Number.number == num.upper()) # FIXME Why ain't there any value placeholder in translation string? result_num.append(_(u'erruniquenumber') + ': {}'.format(n.number)) except DoesNotExist: result_num.append(u'Something weired happend with {}'.format(num)) # FIXME result_num is horrible, as it contains success and failures, indistinguishable return {'entered': result_num, 'timestamp': timestamp.strftime('%x %X')}
def create_Seller_Number_Association(oldNumber, newNumber): seller = oldNumber.seller update_query = Number.update(seller=seller).where(Number.number == newNumber.number) update_query.execute() newNumber = Number.get(Number.number == newNumber.number) statement = str(oldNumber.number) + ' : ' + str(oldNumber.seller) + ' // ' + str(newNumber.number) + ' : ' + str(newNumber.seller) return statement
def create_tables(): Number.create_table(True) SMS.create_table(True) Seller.create_table(True) Market.create_table(True) List.create_table(True) ListRelationship.create_table(True) Outbox.create_table(True)
def reactivate_Number(newSMS): numberObject = newSMS.number update_query = Number.update(isActive = True).where(Number.number == numberObject.number) update_query.execute() update_query = Number.update(modifiedAt = datetime.datetime.now()).where(Number.number == numberObject.number) update_query.execute() statement = str(newSMS.number.number) + ': You have been reactivated!' # You have been deactivated and will no longer receive messages create_Outbox_Message(numberObject, statement) return statement
def deactivate_Number(newSMS): numberObject = newSMS.number # print >> sys.stderr, numberObject update_query = Number.update(isActive = False).where(Number.number == numberObject.number) update_query.execute() update_query = Number.update(modifiedAt = datetime.datetime.now()).where(Number.number == numberObject.number) update_query.execute() statement = str(newSMS.number.number) + ': baakusazeeko tojja kwongera kufuna bubaka. Bwobeera oyagala okuddamu okukozesa obunnakibiina bwo, weereza- okuyunga eri 0784820672' # You have been deactivated and will no longer receive messages If you would like to re-activate your membership, please send okuyunga to 0784820672 create_Outbox_Message(numberObject, statement) return statement
def deactivate_Seller(newSMS): smsNumber = newSMS.number.number sellerNumber = Number.get(Number.number == smsNumber) seller = sellerNumber.seller update_query = Number.update(isActive = False).where(Number.seller == seller) update_query.execute() update_query = Number.update(modifiedAt = datetime.datetime.now()).where(Number.seller == seller) update_query.execute() statement = str(seller) + ': baakusazeeko tojja kwongera kufuna bubaka.' # You have been deactivated and will no longer receive messages create_Outbox_Message(newSMS.number, statement) return statement
def store_Number(number): numberList = create_Number_List() if number not in numberList: newNumber = Number(number = number) newNumber.save() numberID = newNumber.id print 'new number saved!' else: oldNumber = Number.get(Number.number == number) numberID = oldNumber.id print 'number found!' return numberID
def add_Numbers(listObject, numberList, createdBy): listOwner = listObject.seller ownerNumberObject = Number.get(Number.seller == listOwner) for number in numberList: number = validate_Number(number) if type(number) == str: print number statement = "E nnamba yayingizi ddwamu bubi" # This number was entered incorrectly else: numberID = store_Number(number) numberObject = get_Number_Object(number) if check_ListRelationship_Exists(listObject, numberObject): statement = str(numberObject.number) + " is already on your list!" create_Outbox_Message(ownerNumberObject, statement) else: newListRelationship = create_ListRelationship(listObject, numberObject, createdBy, createdBy) print newListRelationship statement = str(numberObject.number) + " was added to your list!" create_Outbox_Message(ownerNumberObject, statement) memberStatement = ( "You've been added to the following list: " + str(listObject.name) + ". To reply, start your message with '" + str(listObject.name) + "'. To reply all, start your message with '" + str(listObject.name) + " all'" ) create_Outbox_Message(numberObject, memberStatement) return statement
def store_Seller(newSMS): print >> sys.stderr, "within store seller" if check_Seller_Exists(newSMS): print >> sys.stderr, "within store seller if" statement = "Okimanyi nti e nnamba eno wagiwaandiisa dda ku lukalala?" # Do you know you've already registered this number for the mailing list? create_Outbox_Message(newSMS.number, statement) else: try: print >> sys.stderr, "within store seller else try" bodyList = split_Body(newSMS) if len(bodyList) > 4: print >> sys.stderr, "within store seller else if" newSeller = Seller(givenName = bodyList[1], familyName = bodyList[2], product = bodyList[3], kind = bodyList[4], market = 1) newSeller.save() update_query = Number.update(seller=newSeller).where(Number.number == newSMS.number.number) update_query.execute() numberObject = get_Number_Object(newSMS.number.number) listObject = get_List_Object(newSeller.market) newListRelationship = create_ListRelationship(listObject, numberObject, numberObject, numberObject) statement = newSeller else: print >> sys.stderr, "within store seller else else" statement = "Okutwegattako Goberera enkola eno 'okuyunga Erinnya Eppaatiike Erinnya Ery'ekika Byotunda'" #explanation of how to join create_Outbox_Message(newSMS.number, statement) except: print >> sys.stderr, "within except" print >> sys.stderr, str(sys.exc_info()[0]) # These write the nature of the error print >> sys.stderr, str(sys.exc_info()[1]) statement = 'An exception has Occurred'+ str(sys.exc_type) + '[' + str(sys.exc_value) + ']' return statement return statement
def do_query(): """Search for numbers in database""" user_input = request.forms.get('number', '') numbers = parse_numbers(user_input) number = None timestamps = [] invalid_input = None if numbers: # FIXME WTF? Allow and parse a list and than pick one & silently drop the others? number = numbers[0] qry = Number.select(Number.time).where(Number.number**number).order_by( Number.time) timestamps = [n.time for n in qry] else: invalid_input = user_input context = { 'result': number or invalid_input, 'invalid_input': invalid_input, 'timestamps': timestamps } return context
def create_Market(name, nickname, neighborhood, city, number): newMarket = Market( name=name.lower(), nickname=nickname.lower(), neighborhood=neighborhood.lower(), city=city.lower() ) newMarket.save() update_query = Number.update(market=newMarket).where(Number.number == number) update_query.execute() return newMarket
def add_Owners_Number(sellersListName, sellersListNumbers): print >> sys.stderr, "within add_Owners_Number" # print >> sys.stderr, sellersListName if sellersListName in MARKETLISTS: return sellersListNumbers else: listOwner = get_Mini_List_Owner(sellersListName) ownerNumberObject = Number.get(Number.seller == listOwner) sellersListNumbers.append(ownerNumberObject) return sellersListNumbers
def insert_number(): data = [] numbers = json.load(open('data/numbers_data.json'))['data'] try: for n in numbers: row = Number(name=n['name'], number=n['number'], on_campus=n['onCampus'], all_day=n['allDay'], description=n['description']) db.session.add(row) db.session.commit() except: print "Error: couldn't add new number.", sys.exc_info()[1]
def do_enter(): """Enter numbers into database""" numbers = set(parse_numbers(request.forms.get('numbers', ''))) timestamp = datetime.datetime.now() usr_hash = get_fingerprint(request) result_num = [] # TODO make place variable, depending on current request q = Place.select().where(Place.place == 'LAGESO') lageso = q.get() if q.count() == 1 else None if not numbers: result_num.append(_('novalidnumbers')) else: for num in numbers: if is_valid_number(num): try: n = Number.create(number=num.upper(), time=timestamp, place=lageso, fingerprint=usr_hash) result_num.append(n.number) except IntegrityError: try: n = Number.get(Number.number == num.upper()) # FIXME Why ain't there any value placeholder in translation string? result_num.append( _(u'erruniquenumber') + ': {}'.format(n.number)) except DoesNotExist: result_num.append( u'Something weired happend with {}'.format(num)) # FIXME result_num is horrible, as it contains success and failures, indistinguishable return {'entered': result_num, 'timestamp': timestamp.strftime('%x %X')}
def display(): oldest_to_be_shown = datetime.datetime.now() - datetime.timedelta(days=MAX_DAYS) # TODO optimize query even more, so we don't need to iterate manually?! # TODO make Place variable and part of WHERE numbers = Number.select(Number.number).join(Place).switch(Number).annotate(Place).\ where(Number.time >= oldest_to_be_shown).order_by(Number.number, Number.time) # filter numbers entered often enough # format numbers for later output display_output = sorted([{'num': n.number, 'count': int(n.count)} for n in numbers if int(n.count) >= MIN_COUNT][:DISPLAY_SIZE], key=lambda n: n['num']) since = format_datetime(oldest_to_be_shown, 'short', locale=request.locale) return {'numbers': display_output, 'since': since, 'min_count': MIN_COUNT }
def display(): oldest_to_be_shown = datetime.datetime.combine(datetime.date.today() - datetime.timedelta(days=MAX_DAYS), datetime.datetime.min.time()) # TODO optimize query, so we don't need to iterate manually, e.g. by selecing only count > min_count! # TODO make Place variable and part of WHERE numbers = Number.select(Number.number, Number.time, fn.Count(Number.number).alias('count')).\ where(Number.time >= oldest_to_be_shown).group_by(Number.number).order_by(Number.time.desc(), Number.number) # filter numbers entered often enough # format numbers for later output display_output = sorted([{'num': n.number, 'count': int(n.count)} for n in numbers if int(n.count) >= MIN_COUNT][:DISPLAY_SIZE], key=lambda n: n['num']) since = format_datetime(oldest_to_be_shown, 'short', locale=get_valid_locale(request.locale)) return {'numbers': display_output, 'since': since, 'min_count': MIN_COUNT }
def index(password): print >> sys.stderr, "within index" try: if password == PASSWORD: print >> sys.stderr, "within try" sellerList = Seller.select() smsList = SMS.select() numberList = Number.select() l = List.select() marketList = Market.select() lrList = ListRelationship.select() outboxList = Outbox.select() return render_template("index.html", title = 'TABLES', sellerList = sellerList, smsList = smsList, l = l, marketList = marketList) #return 'hello world' else: print >> sys.stderr, "wrong password" except: print >> sys.stderr, "within except" print >> sys.stderr, str(sys.exc_info()[0]) # These write the nature of the error print >> sys.stderr, str(sys.exc_info()[1]) statement = 'An exception has Occured'+ str(sys.exc_type) + '[' + str(sys.exc_value) + ']' return statement
def home(): form = DataForm() print("OH YES") if form.validate_on_submit(): print("OH AGAIN") number_from = form.number_from.data number_to = form.number_to.data email = form.email.data with app.app_context(): number = Number(email=email, number_from=number_from, number_to=number_to) db.session.add(number) db.session.commit() flash("Successfully sent message, wait a few minutes to recieve") user_data_dict[email] = Stalk(email) user_data_dict[email].search(email) user_data_dict[email].write(user_data_dict[email].results) return render_template("index.jinja2", form=form)
def display(): oldest_to_be_shown = datetime.datetime.combine( datetime.date.today() - datetime.timedelta(days=MAX_DAYS), datetime.datetime.min.time()) # TODO optimize query, so we don't need to iterate manually, e.g. by selecing only count > min_count! # TODO make Place variable and part of WHERE numbers = Number.select(Number.number, Number.time, fn.Count(Number.number).alias('count')).\ where(Number.time >= oldest_to_be_shown).group_by(Number.number).order_by(Number.time.desc(), Number.number) # filter numbers entered often enough # format numbers for later output display_output = sorted([{ 'num': n.number, 'count': int(n.count) } for n in numbers if int(n.count) >= MIN_COUNT][:DISPLAY_SIZE], key=lambda n: n['num']) since = format_datetime(oldest_to_be_shown, 'short', locale=get_valid_locale(request.locale)) return {'numbers': display_output, 'since': since, 'min_count': MIN_COUNT}
def do_query(): """Search for numbers in database""" user_input = request.forms.get('number', '') numbers = parse_numbers(user_input) number = None timestamps = [] invalid_input = None if numbers: # FIXME WTF? Allow and parse a list and than pick one & silently drop the others? number = numbers[0] qry = Number.select(Number.time).where(Number.number ** number).order_by(Number.time) timestamps = [n.time for n in qry] else: invalid_input = user_input context = { 'result': number or invalid_input, 'invalid_input': invalid_input, 'timestamps': timestamps } return context
def check_SMS(newSMS): print >> sys.stderr, "inside check_SMS" bodyList = split_Body(newSMS) listNames = get_Mini_ListNames(newSMS.number) # print >> sys.stderr, listNames if (bodyList[0] in listNames): # sender is any member of mini list EXCEPT the creator/owner of the mini list print >> sys.stderr, "inside bodyList listNames" listName = str(bodyList[0]) # print >> sys.stderr, listName bodyList.pop(0) if (bodyList[0] == 'all'): # message meant to go to everyone on the list print >> sys.stderr, 'within all' bodyList.pop(0) body = ' '.join(str(n) for n in bodyList) # print >> sys.stderr, body newSMS.body = body statement = promote_SMS(newSMS, listName, False) return statement elif (bodyList[0] == 'okugata') or (bodyList[0] == 'add'): # member of list trying to add new member to list print >> sys.stderr, 'within check_SMS add' bodyList.pop(0) numberList = bodyList # list name and keyword removed so that it is just a list of numbers l = get_Mini_List(listName) createdBy = newSMS.number statement = add_Numbers(l, numberList, createdBy) else: # message meant to only go to the creator/owner of the list print >> sys.stderr, 'meant only to send to owner of list' body = ' '.join(str(n) for n in bodyList) identity = form_SMS_To_Promote(newSMS) message = identity + body listOwner = get_Mini_List_Owner(listName) ownerNumberObject = Number.get(Number.seller == listOwner) create_Outbox_Message(ownerNumberObject, message) statement = "Your message was delivered only to the creator of the " + str(listName) + " list" # Thank you for sending your message to the list of [blank] create_Outbox_Message(newSMS.number, statement) return message elif check_Seller_Exists(newSMS): seller = get_Seller(newSMS) miniSellersListNames = get_Mini_Sellers_ListNames(seller) # print >> sys.stderr, miniSellersListNames if not bodyList: # blank message sent statement = promote_SMS(newSMS, seller.market.name, False) elif bodyList[0] in miniSellersListNames: # message sent by the creator/owner of the mini list and meant to go to all members print >> sys.stderr, 'bodyList[0] in miniSellersListNames' miniSellersListName = str(bodyList[0]) bodyList.pop(0) body = ' '.join(str(n) for n in bodyList) newSMS.body = body statement = promote_SMS(newSMS, miniSellersListName, True) elif bodyList[0] in KEYWORDS: print >> sys.stderr, "elif bodyList[0] in KEYWORDS" statement = check_Keywords(newSMS, miniSellersListNames) else: print >> sys.stderr, "within check_Seller_Exists general promotion" statement = promote_SMS(newSMS, seller.market.name, False) # general promotion to the seller's market list elif (bodyList[0] == 'okuyunga') or (bodyList[0] == 'join'): # new seller trying to join print >> sys.stderr, "entering new okuyunga" newSeller = store_Seller(newSMS) if not type(newSeller) == str: statement = notify_Members(newSeller, newSeller.market.name) else: statement = newSeller elif (bodyList[0] == 'help') or (bodyList[0] == 'obuyambi'): statement = "Olukalala lw'omu katale k'e Bugolobi lukosobozesa okusindikira abantu obubaka. Osasulira obubaka bwa muntu omu bwokka 'okuyunga Erinnya Eppaatiike Erinnya Ery'ekika Byotunda'" #explanation of how to join # The Bugolobi Market Mailing List allows you to send messages to over 40 members, but you only need to pay for one message! Instructions on how to join, etc. create_Outbox_Message(newSMS.number, statement) elif (bodyList[0] == 'kuvawo') or (bodyList[0] == 'leave'): statement = deactivate_Number(newSMS) # leave all lists elif bodyList[0].isdigit(): # new Number/Seller association from message sent by unassociated Number number = bodyList[0] number = validate_Number(number) if type(number) == int: oldNumber = get_Number_Object(number) newNumber = newSMS.number statement = create_Seller_Number_Association(oldNumber, newNumber) else: statement = number elif newSMS.number.number in SPAM: statement = 'MTN keeps spamming the mailing list!' else: statement = "Walyagadde okwegatta ku lukalala lwa kataale ke'Bugolobi? Yogerako ne Maama Zaina." # Would you like to join the Bugolobi Market Mailing List? Please talk to Maama Zaina. create_Outbox_Message(newSMS.number, statement) return statement
from flask import render_template, Flask, url_for, request import random from models import Number app = Flask("Guess") gen_number = Number(score=random.randrange(1, 100)) stored_number = gen_number.put() count = 0 @app.route('/', methods=['GET', 'POST']) def index(): global gen_number global stored_number global count input_number = request.form.get("number") if request.method == 'POST': try: if int(input_number) > stored_number.get().score: reply = "Your input is greater, you entered %s. Try again" % ( input_number) img = 'sad' count += 1 #print stored_number.get() return render_template('index.html', reply=reply, img=img) elif int(input_number) < stored_number.get().score: reply = "Your input is lesser, you entered %s. Try again" % ( input_number) img = 'sad' count += 1
def insert_count(session, count): insert = Number(count=count) session.add(insert) session.commit()
def getOtherNumber(): from models import Number #Prevents circular dependencies num_obj = Number.objects() return num_obj[0].number
def get_Seller(newSMS): smsNumber = newSMS.number.number sellerNumber = Number.get(Number.number == smsNumber) seller = sellerNumber.seller return seller
def check_Seller_Exists(newSMS): for number in Number.select(): if number == newSMS.number and number.seller: print 'a seller is already associated with the number of this incoming sms!' return True
def get_Number_Object(number): numberObject = Number.get(Number.number == number) return numberObject
def create_Number_List(): numberList = [] for number in Number.select(): numberList.append(number.number) return numberList