Exemplo n.º 1
0
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')}
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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
Exemplo n.º 11
0
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
Exemplo n.º 12
0
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
Exemplo n.º 13
0
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]
Exemplo n.º 14
0
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')}
Exemplo n.º 15
0
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
            }
Exemplo n.º 16
0
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
            }
Exemplo n.º 17
0
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
Exemplo n.º 18
0
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)
Exemplo n.º 19
0
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}
Exemplo n.º 20
0
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
Exemplo n.º 21
0
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
Exemplo n.º 22
0
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
Exemplo n.º 23
0
def insert_count(session, count):
    insert = Number(count=count)
    session.add(insert)
    session.commit()
Exemplo n.º 24
0
def getOtherNumber():
    from models import Number  #Prevents circular dependencies
    num_obj = Number.objects()
    return num_obj[0].number
Exemplo n.º 25
0
def get_Seller(newSMS):
    smsNumber = newSMS.number.number
    sellerNumber = Number.get(Number.number == smsNumber)
    seller = sellerNumber.seller
    return seller
Exemplo n.º 26
0
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
Exemplo n.º 27
0
def get_Number_Object(number):
    numberObject = Number.get(Number.number == number)
    return numberObject
Exemplo n.º 28
0
def create_Number_List():
    numberList = []
    for number in Number.select():
        numberList.append(number.number)
    return numberList