Beispiel #1
0
def delete_menu(restaurant_id: int, menu_id: int):
    session = DBSession()
    restaurant = session.query(Restaurant).filter_by(
        id=restaurant_id).one_or_none()
    item = (session.query(MenuItem).filter_by(
        id=menu_id, restaurant_id=restaurant_id).one_or_none())
    if restaurant is None:
        return (
            jsonify({"details": f"Restaurant {restaurant_id} does not exist"}),
            404,
            {},
        )
    if item is None:
        return (
            jsonify(
                {
                    "details":
                    f"Menu item {menu_id} does not exist in restaurant {restaurant.name}",
                }, ),
            404,
            {},
        )
    session.delete(item)
    session.commit()
    return (
        None,
        204,
        {},
    )
Beispiel #2
0
def delete_all_votes():
    """
    WARNING: Sending a DELETE request to /delete-votes deletes ALL votes.
    """
    # this query deletes all votes
    DBSession.query(Vote).delete()
    DBSession.commit()
    return json.dumps({"result": "OK", "message" : "All votes have been deleted."})
Beispiel #3
0
def show_menu(restaurant_id: int):
    session = DBSession()

    restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one_or_none()
    items = session.query(MenuItem).filter_by(restaurant_id=restaurant_id).all()

    return render_template(
        "4_menu.html",
        restaurant=restaurant,
        items=items,
    )
Beispiel #4
0
def oauth_redirect():
    print(session)
    if request.args.get('state') != app.config['SESSION_STATE']:
        return 'Invalid state'
    data = urllib.request.urlopen(
        'https://www.googleapis.com/oauth2/v4/token',
        urllib.parse.urlencode({
            'code': request.args.get('code'),
            'client_id': app.config['CLIENT_ID'],
            'client_secret': app.config['CLIENT_SECRET'],
            'redirect_uri': app.config['REDICET_URL'],
            'grant_type': 'authorization_code'
        }).encode('utf8')).read()
    data = json.loads(data.decode('utf8'))

    id_token = data['id_token'].split('.')[1]
    id_token = id_token + '=' * (4 - len(id_token) % 4
                                 )  # パディングが足りなかったりするっぽいので補う
    id_token = base64.b64decode(id_token, '-_')
    id_token = json.loads(id_token.decode('utf8'))
    session['user_id'] = id_token['sub']

    users = DBSession.query(User)\
        .filter(User.id == id_token['sub'])\
        .all()
    print(session)
    print(users)
    if len(users) != 0:
        session['name'] = users[0].name
        return redirect(url_for('application'))

    return redirect(url_for('register'))
Beispiel #5
0
def connect_to_server(ip, port, system_id, password, system_type, recipient, message, sms_id, sender_number):
    """
    This method is responsible to create client instance to communicate with destination network server as client.
    """
    try:
        client = SMPPClient(ip, port)
        connection = False
        notification = 0
        while connection is False:   # while connection is not established with server, try to connect.
            if client.connect():
                connection = True
                # this thread is checking the socket for getting responses from other server and save in dictionary.
                background_thread4 = threading.Thread(target=client.session.storing_recieved_pdus, args=())  # to recieve pdu response from other smpp server to whom it has sent the request.
                background_thread4.start()
    
        if client.login('TX', system_id, password, system_type):  # if client successfully logins
            client.session.send_sms(recipient, message, sender_number)
            # till client receives  no response for sending sms
            while notification == 0:
                notification = client.session.notifications_4_client()
            client.session.processing_recieved_pdus()
        smses = DBSession.query(Sms).filter_by(id=int(sms_id)).first()
        if smses:
            smses.status = 'delivered'
        client.session.unbind()
        while client.session.state != SessionState.UNBOUND:
            client.session.processing_recieved_pdus()
        client.sc.close()
        transaction.commit()
        background_thread4.join()
    except:
        pass
Beispiel #6
0
def list_votes():
    """
    Get the list of all votes.
    """
    votes = DBSession.query(Vote).order_by(Vote.id)

    json_data = {'votes': [vote.as_dict() for vote in votes]}
    return json.dumps(json_data)
Beispiel #7
0
def list_people():
    """
    Get the list of all people ordered by name.
    """
    people = DBSession.query(Person).order_by(Person.name)

    # this is more compact, using a list comprehension.
    json_data = {'people': [person.as_dict() for person in people]}
    return json.dumps(json_data)
Beispiel #8
0
def fetch_incoming_sms(user_id):
    """
    This method query database to retrieve pending incoming smses for logged in client..
    """

    smses = DBSession.query(Sms).filter_by(sms_type='incoming', user_id=user_id, status='recieved').first()
    if smses:
        smses.status = 'delivered'
    return(smses)
Beispiel #9
0
 def DeleteProject(self, request, context):
     client = create_client()
     session = DBSession()
     for user in session.query(ProjectUser).filter_by(
             project_id=request.projectId):
         delete_db_user(user, client)
         session.delete(user)
     session.commit()
     return DeleteProjectResponse()
Beispiel #10
0
 def DeleteUser(self, request: DeleteUserRequest,
                context) -> DeleteUserResponse:
     client = create_client()
     session = DBSession()
     for user in session.query(ProjectUser).filter_by(
             user_id=request.userId):
         delete_db_user(user, client)
         session.delete(user)
     session.commit()
     return DeleteUserResponse()
Beispiel #11
0
 def spider_closed(self, spider):
     session = DBSession()
     task = session.query(SpiderTask).filter(
         SpiderTask.spider_rule_id == self.rule_id,
         SpiderTask.end_time == None).first()
     if task:
         task.end_time = datetime.now()
         task.status = "closed"
         session.commit()
     session.close()
Beispiel #12
0
def delete_person_votes(person_id):
    """
    This deletes all votes for a given Person.
    """
    person = DBSession.query(Person).filter_by(id=person_id).first()
    if person:
        # Delete votes based on a filter queryset
        DBSession.query(Vote).filter_by(person_id=person_id).delete()
        DBSession.commit()
        result = {
            "result": "OK",
            "message" : "All votes for person {} have been deleted.".format(person)
        }
        return json.dumps(result)
    else:
        result = {
            "result": "ERROR",
            "message": "Person with id {} does not exist.".format(person_id)
        }
        return json.dumps(result), 404
Beispiel #13
0
def list_movies():
    """
    Get the list of all movies ordered by name.
    """
    movies = DBSession.query(Movie).order_by(Movie.name)

    movie_list = []
    for movie in movies:
        movie_list.append(movie.as_dict())

    json_data = {'movies': movie_list}
    return json.dumps(json_data)
Beispiel #14
0
def delete_plot(id):
    if id == None:
        return 'Invalid ID'
    plot = DBSession.query(Restraurant)\
        .filter(Restraurant.id == id)\
        .first()
    if plot == None:
        return 'Invalid ID'
    if plot.created_by != session['user_id']:
        return 'Invalid ID'
    DBSession.delete(plot)
    DBSession.commit()
    return 'ok'
Beispiel #15
0
def updating_status(sms_ids):
    """
    This method is responsible to update status of messages from scheduled to delivered when messages are for server of
    other network.
    """

    if sms_ids:
        sms_ids = sms_ids.splitlines()
        print(sms_ids)
        for sms_id in sms_ids:
            smses = DBSession.query(Sms).filter_by(id=int(sms_id)).first()
            smses.status = 'delivered'
        transaction.commit()
Beispiel #16
0
def selected_packages(user_id):
    """
    This method is used by server to ensure if logged in user has selected any package or not.
    """

    total_selected_package = DBSession.query(Selected_package).filter_by(user_id=user_id).count()
    if(total_selected_package > 0):
        selected_package = DBSession.query(Selected_package).filter_by(user_id=user_id)[-1]  # retrieve last selected package
    else:
        selected_package = None
    if(selected_package is None):
            package_name = None
            rates = 1.5
    else:
        end_date = int(selected_package.end_date.strftime('%d'))
        end_month = int(selected_package.end_date.strftime('%m'))
        end_year = int(selected_package.end_date.strftime('%y'))
        date = datetime.datetime.now()
        today_date = int(date.strftime('%d'))
        today_month = int(date.strftime('%m'))
        today_year = int(date.strftime('%y'))
        if(end_year > today_year and int(selected_package.smses) > 0):
            package_name = selected_package.package_name
            rates = 0.0
            selected_package.smses = selected_package.smses-1
        elif(end_year == today_year and end_month > today_month and int(selected_package.smses) > 0):
            package_name = selected_package.package_name
            rates = 0.0
            selected_package.smses = selected_package.smses-1
        elif(end_month == today_month):
            if(end_date >= today_date and int(selected_package.smses) > 0):
                package_name = selected_package.package_name
                rates = 0.0
                selected_package.smses = selected_package.smses-1
        else:
            package_name = None
            rates = 1.5
    return(dict(package_name=package_name, rates=rates))
Beispiel #17
0
def process_incoming_sms():
    """
    This method is responsible for processing incoming smses.
    """

    sms_ids = ''
    smses = DBSession.query(Sms).filter_by(sms_type='incoming', status='recieved', target_network=None, user_id=None).all()
    if smses:
        for S in smses:
            sms_to = S.sms_to
            sms_from = S.sms_from
            mnp = DBSession.query(Mnp).filter_by(cell_number=sms_to).first()  # querying for mobile number conversion
            if mnp:
                target_network = mnp.target_network
                S.sms_type = 'outgoing'
                S.status = 'scheduled'
                S.validity_period = datetime.date.today()+datetime.timedelta(days=1)
            else:
                source_prefix = sms_from[0:6]  # extract prefix of sender number
                dest_prefix = sms_to[0:6]  # extract prefix of recipient
                s_network = DBSession.query(Prefix_Match).filter_by(prefix=source_prefix).first()
                source_network = s_network.network  # refers to sender network, getting the network of source from prefixes
                d_network = DBSession.query(Prefix_Match).filter_by(prefix=dest_prefix).first()
                dest_network = d_network.network   # refers to recipient network
                user = DBSession.query(User_Number).filter_by(cell_number=sms_to).first()  # user refers to normal user
                if user:
                    S.user_id = user.user_id
                    target_network = None  # bECAUSE IT IS FOR CLIENT
                else:
                    #  IF network is same or different. 
                    target_network = dest_network  # member variable
                    S.sms_type = 'outgoing'
                    S.status = 'scheduled'
                    S.validity_period = datetime.date.today()+datetime.timedelta(days=1)
            S.target_network = target_network  # from sms table
            if target_network != source_network:
                connect_info(sms_to, S.msg, dest_network, S.id, sms_from)
Beispiel #18
0
def unsubscribe(message):
    session = DBSession()
    wechat = session.query(Wechat).filter(
        Wechat.openid == message.source).one_or_none()
    if wechat:
        wechat.subscribe = False
        wechat.unsubscribe_time = datetime.datetime.now()
    else:
        wechat = Wechat(openid=message.source, subscribe=False,
                        unsubscribe_time=datetime.datetime.now(), create_time=datetime.datetime.now())
        session.add(wechat)
    session.commit()
    session.close()

    return SuccessReply()
Beispiel #19
0
 def cancel_result(message_id, user_id):
     """
     This method is responsible to cancel sending particular sms if it is not yet delivered.
     """
     transaction.commit()
     message_id = int(message_id.decode(encoding='ascii'))
     smses = DBSession.query(Sms).filter_by(sms_type='outgoing', id=message_id, user_id=user_id).first()
     if(smses is None):
         return False
     elif(smses.status == 'delivered'):
         return command_status.ESME_RCANCELFAIL
     else:
         DBSession.delete(smses)
         transaction.commit()
         return True
Beispiel #20
0
    def query_result(message_id, user_id):
        """
        This method is responsible to query database for provided message id to view the status of Sms
        """

        message_id = int(message_id.decode(encoding='ascii'))
        smses = DBSession.query(Sms).filter_by(sms_type='outgoing', id=message_id, user_id=user_id).first()  #check for all outgoing sms
        if(smses is None):
            return(command_status.ESME_RINVMSGID)
        elif(smses.status == 'delivered'):
            return(dict(state=message_state.DELIVERED, final_date=smses.validity_period))
        elif(smses.status == 'scheduled' and smses.validity_period >= datetime.datetime.now()):
            return(dict(state=message_state.SCHEDULED, final_date=smses.validity_period))
        elif(smses.status == 'scheduled' and smses.validity_period < datetime.datetime.now()):
            return(dict(state=message_state.EXPIRED, final_date=smses.validity_period))
Beispiel #21
0
    def validate(system_id, password, system_type):
        """
        This method is used by server to validate credentials provided by client against database
        """

        system_id = system_id.decode(encoding='ascii')
        passhash = hashlib.sha1(bytes(password.decode(encoding='ascii'), encoding="utf8")).hexdigest()
        system_type = system_type.decode(encoding='ascii')
        record = DBSession.query(User).filter_by(user_id=system_id, password=passhash, system_type=system_type).first()
        if(record):
            print("Credentials Validated successfully!!!")
            return 'True'
        else:
            print("Validation failed")
            return 'false'
Beispiel #22
0
def process_outgoing_sms(sender, user_id, recipient):
    """
    This method is responsible for processing outgoing smses.
    """
    
    if sender is not '':
            sender_number = sender
    else:
        user = DBSession.query(User_Number).filter_by(user_id=user_id).first()  # user refers to normal user
        sender_number = user.cell_number  # cell number of sender
    source_prefix = sender_number[0:6]  # extract prefix of sender number
    s_network = DBSession.query(Prefix_Match).filter_by(prefix=source_prefix).first()
    source_network = s_network.network  # refers to sender network, getting the network of source from prefixes
    dest_prefix = recipient[0:6]  # extract prefix of recipient
    d_network = DBSession.query(Prefix_Match).filter_by(prefix=dest_prefix).first()
    dest_network = d_network.network   # refers to recipient network
    mnp = DBSession.query(Mnp).filter_by(cell_number=recipient).first()  # querying for mobile number conversion
    if mnp:
        target_network = mnp.target_network
    elif(source_network == dest_network):
        target_network = dest_network
    else:
        target_network = dest_network
    return(dict(sender_number=sender_number, source_network=source_network, target_network=target_network))
Beispiel #23
0
def delete_menu_item(restaurant_id: int, menu_id: int):
    session = DBSession()

    item_to_delete = session.query(MenuItem).filter_by(id=menu_id).one_or_none()

    if request.method == "POST":
        session.delete(item_to_delete)
        session.commit()
        flash(f"Menu item {item_to_delete.name} successfully deleted")
        return redirect(url_for("show_menu", restaurant_id=restaurant_id))
    else:
        return render_template(
            "7_delete_menu_item.html",
            item=item_to_delete,
        )
Beispiel #24
0
    def spider_opened(self, spider):
        task = SpiderTask(spider_name=self.name,
                          spider_rule_id=self.rule_id,
                          start_time=datetime.now(),
                          status='running')
        session = DBSession()

        query = session.query(SpiderTask).filter(
            SpiderTask.spider_rule_id == task.spider_rule_id,
            SpiderTask.end_time == None)

        if query.count() == 0:
            session.add(task)
            session.commit()
        session.close()
Beispiel #25
0
def check_active_trades():
    with app.app_context():
        session = DBSession()
        threads = []
        users = session.query(User).filter_by(is_active=True).all()
        for user in users:
            if len(threads) >= NUM_WORKER_THREADS:
                print("waiting for threads to join")
                for thread in threads:
                    thread.join()
                threads = []
            thread = Thread(target=check_smart_trades_for_user, args=(user, ))
            thread.daemon = True
            thread.start()
            threads.append(thread)
        session.close()
Beispiel #26
0
def get_quotes():
    response.content_type = "application/json"
    limit = request.query.limit or 100
    offset = request.query.offset or 0

    try:
        limit = int(limit)
        offset = int(offset)
        assert 0 <= int(limit) <= 1000 or 0 < int(offset)
    except Exception:
        return dumps({"Error": "Too much you wish."})

    session = DBSession()
    quotes = session.query(Quote).order_by(func.random()).limit(limit).offset(offset).all()

    return dumps(list(map(lambda x: x.jsonify(), quotes)))
Beispiel #27
0
def get_plot():
    data = DBSession.query(Restraurant,
                           User).join(Restraurant,
                                      Restraurant.created_by == User.id).all()
    resp = []
    for plot in data:
        resp.append({
            'id': plot.Restraurant.id,
            'name': plot.Restraurant.name,
            'comment': plot.Restraurant.comment,
            'x': plot.Restraurant.x,
            'y': plot.Restraurant.y,
            'createdBy': plot.User.name,
            'isMine': plot.Restraurant.created_by == session['user_id']
        })
    print(resp)
    return jsonify(resp)
Beispiel #28
0
    def replace_result(message_id, message, user_id):
        """
        This method is responsible to replace particular message which is not yet delivered.
        """

        message_id = int(message_id.decode(encoding='ascii'))
        message = message.decode(encoding='ascii')
        smses = DBSession.query(Sms).filter_by(sms_type='outgoing', id=message_id, user_id=user_id).first()
        if(smses is None):
            return False
        elif(smses.status == 'delivered'):
            return(command_status.ESME_RREPLACEFAIL)
        elif(smses.status == 'scheduled'):
            smses.schedule_delivery_time = datetime.datetime.now()
            smses. validity_period = datetime.datetime.now()+datetime.timedelta(days=1)
            smses.msg = message
            transaction.commit()
            return True
Beispiel #29
0
    def render_GET(self, request):
        # self.count +=1

        sessionweb = DBSession()
        spiderRule = sessionweb.query(SpiderRule).filter(
            SpiderRule.enable and SpiderRule.cron == None).one()
        # spiderRule.name = '%s-%s'%(spiderRule.name,self.count)
        # print('我来了%s次!!!'%spiderRule.name)
        self.scheduler.add_job(crawl,
                               'date',
                               args=[spiderRule],
                               name=spiderRule.name,
                               id='%s' % spiderRule.id,
                               replace_existing=True)

        sessionweb.close()
        request.setHeader("Content-Type", "text/html; charset=utf-8")
        return ("<html>Hello, world!</html>").encode('utf-8')
Beispiel #30
0
def delete_restaurant(restaurant_id: int):
    session = DBSession()

    restaurant_to_delete = (
        session.query(Restaurant).filter_by(id=restaurant_id).one_or_none()
    )

    if request.method == "POST":
        session.delete(restaurant_to_delete)
        session.commit()
        flash(f"Restaurant {restaurant_to_delete.name} successfully deleted")
        return redirect(url_for("show_restaurants"))
    else:
        return render_template(
            "3_delete_restaurants.html",
            restaurant_id=restaurant_id,
            restaurant=restaurant_to_delete,
        )
Beispiel #31
0
def edit_menu_item(restaurant_id: int, menu_id: int):
    session = DBSession()

    item_to_edit = session.query(MenuItem).filter_by(id=menu_id).one_or_none()

    if request.method == "POST":
        if request.form["name"]:
            item_to_edit.name = request.form["name"]

        session.add(item_to_edit)
        session.commit()
        flash(f"Menu item successfully edited to {item_to_edit.name}")
        return redirect(url_for("show_menu", restaurant_id=restaurant_id))
    else:
        return render_template(
            "6_edit_menu_item.html",
            restaurant_id=restaurant_id,
            item=item_to_edit,
        )
Beispiel #32
0
def edit_restaurant(restaurant_id: int):
    session = DBSession()
    restaurant_to_edit = (
        session.query(Restaurant).filter_by(id=restaurant_id).one_or_none()
    )

    if request.method == "POST":
        if request.form["name"]:
            restaurant_to_edit.name = request.form["name"]
        session.add(restaurant_to_edit)
        session.commit()
        flash(f"Restaurant successfully edited to {restaurant_to_edit.name}")
        return redirect(url_for("show_restaurants"))
    else:
        return render_template(
            "2_edit_restaurants.html",
            restaurant_id=restaurant_id,
            restaurant=restaurant_to_edit,
        )
Beispiel #33
0
def put_patch_menu(restaurant_id: int, menu_id: int):
    session = DBSession()
    item = session.query(MenuItem).filter_by(id=menu_id).one_or_none()
    if request.json.get("name") is not None:
        item.name = request.json["name"]
    if request.json.get("price") is not None:
        item.price = request.json["price"]
    if request.json.get("description") is not None:
        item.description = request.json["description"]
    if request.json.get("course") is not None:
        item.course = request.json["course"]
    session.commit()
    return jsonify(
        {
            "name": item.name,
            "description": item.description,
            "id": item.id,
            "price": item.price,
            "course": item.course,
        }, )
Beispiel #34
0
def connect_info(recipient, message, dest_network, sms_id, sender_number):
    """
    This method is responsible to get connection paramters from database to communicate with server of destination network
    in case when sender sends a message to some other network.
    """
    # here we have to make client object
    server = DBSession.query(Network).filter_by(network=dest_network).first()
    if server:
        print("Establishing Connection with " + server.network.upper() + " Server...")
        system_id = server.username
        password = server.password
        system_type = server.system_type
        ip = server.ip
        port = server.port

        # this thread is responsible for connecting with other smpp server.
        background_thread3 = threading.Thread(target=connect_to_server,
                                              args=(ip, port, system_id, password, system_type, recipient, message,
                                                    sms_id, sender_number))
        background_thread3.start()
        background_thread3.join()
Beispiel #35
0
def cast_vote(person_id, movie_id):
    """
    Submit a vote, one user to one movie. Return whether the vote was cast.
    """
    # this query returns None if no rows are returned
    exists = DBSession.query(Vote).filter_by(person_id=person_id, movie_id=movie_id).first()

    if exists:
        result = {
            "result": "ERROR",
            "message": "Person has already voted for this movie."
        }
        # HTTP status code 409 means "conflict"
        return json.dumps(result), 409
    else:
        # create a new Vote and save it to the database
        vote = Vote(person_id=person_id, movie_id=movie_id)
        DBSession.add(vote)
        DBSession.commit()
        result = {"result": "OK", "message": "Vote registered."}
        return json.dumps(result)
Beispiel #36
0
class DuplicatesPipeline(object):
    def __init__(self):
        self.urls_seen = set()

    def open_spider(self, spider):
        self.session = DBSession()

    def close_spider(self, spider):
        self.session.close()

    def process_item(self, item, spider):
        if item['url'] in self.urls_seen:
            raise DropItem("Duplicate item found: %s" % item)
        else:
            self.urls_seen.add(item['url'])
            count = self.session.query(Article).filter(
                Article.url == item['url']).count()
            if count == 0:
                return item
            else:
                raise DropItem("Duplicate item found: %s" % item)
Beispiel #37
0
    def db_storage(recipients, message, user_id, sender):
        """
        This method is responsible to store Sms and related fields provided by client in database
        """

        sms_ids = ''    # contains all message ids that are sended by client to recipient of same or different network.
        #smses_ids = ''  # contains only message ids that are sended by client to recipient of some other network.
        sender = sender.decode(encoding='ascii')
        recipients = recipients.decode(encoding='ascii').splitlines()
        selected_package = selected_packages(user_id)
        for recipient in recipients:
            processed_fields = process_outgoing_sms(sender, user_id, recipient)

        # storing vaues to database

            S = Sms()
            S.sms_type = 'outgoing'
            S.sms_from = processed_fields['sender_number']
            S.sms_to = recipient
            S.schedule_delivery_time = datetime.date.today()
            S.validity_period = datetime.date.today()+datetime.timedelta(days=1)
            S.msg = message
            S.timestamp = datetime.date.today()
            S.status = 'scheduled'
            S.msg_type = 'text'
            S.user_id = user_id
            S.package_name = selected_package['package_name']
            S.rates = selected_package['rates']
            S.target_network = processed_fields['target_network']  # process sms file would use it to send to respective network of which server is.
            S.client_type = 'smpp'
            DBSession.add(S)
            transaction.commit()
            sms = DBSession.query(Sms)[-1]  # to send id to the client for ancilliary operations and querying.
            sms_ids = sms_ids + str(sms.id) + '\n'
            if processed_fields['target_network'] != processed_fields['source_network']:  # if destination and source network is different 
                connect_info(recipient, message, processed_fields['target_network'], sms.id,
                             processed_fields['sender_number'])  # connect to the destination's smpp server.
                #smses_ids = smses_ids + str(s) + '\n'
        #updating_status(smses_ids)
        return(sms_ids)
Beispiel #38
0
    def DeleteInstance(self, request, context):
        client = create_client()
        # Get the server
        server = client.connection.get_server_by_id(id=request.instanceId)

        # Get the volume
        # volume = server.volumes[0]

        # Get the flavor
        flavor = client.connection.get_flavor_by_id(server.flavor["id"])

        resp = DeleteInstanceResponse()
        resp.flavor.name = flavor.name
        resp.flavor.cpu = flavor.vcpus
        resp.flavor.memory = flavor.ram
        resp.flavor.rootDisk = flavor.disk

        # Delete the server
        client.connection.delete_server(name_or_id=request.instanceId,
                                        wait=True,
                                        delete_ips=True)

        # Get the server from db
        session = DBSession()
        instance = session.query(
            models.Instance).filter_by(id=request.instanceId).one()

        # Delete the volume.
        volume = instance.volumes[0]
        resp.volume = volume.size
        client.connection.delete_volume(name_or_id=volume.id, force=True)

        # Delete the instance from db
        session.delete(instance)
        session.commit()

        return resp
Beispiel #39
0
'''This background process is responsible for reading the outgoing smses from database sent by client
and post them to the url on bottle server
'''
import urllib2
import urllib
import db
import transaction
from db import DBSession
from models import Sms, User
import datetime
import time

try:
    db.bind_session()
    while True:
        smses = DBSession.query(Sms).filter_by(status='scheduled', sms_type='outgoing', target_network='zong').all()
        if(smses):
            for S in smses:
                sms_to = S.sms_to
                sms_from = S.sms_from
                message = S.msg
                post_data = {'sms_to': sms_to, 'sms_from': sms_from, 'message': message}
                post_str = urllib.urlencode(post_data)
                # urlencode converts the dict to a string suitable for POST
                # Note when some data is specified in urlopen then HTTP request type 
                # POST is used instead of GET request type
                result = urllib2.urlopen("http://192.168.5.34:50111/" + 'sendsms', post_str).read()
                S.status = 'delivered'
                S.timestamp = datetime.date.today()
                print(result)
        transaction.commit()
Beispiel #40
0
def create_smart_trade(user, pair, buy_price, targets, stop_loss, note,
                       signal_id, code, stepSize):
    try:
        session = DBSession()
        account = session.query(Account).filter_by(user_name=user.username,
                                                   type='binance').first()
        if account.active == False:
            session.close()
            return
        apiKey = account.api_key
        apiSecret = account.api_secret
        bot = ThreeCommas(apiKey, apiSecret)
        account_name = account.name.strip()
        channel = session.query(Channel).filter_by(user_name=user.username,
                                                   code=code).first()
        if channel.active == False:
            session.close()
            return
        profile = session.query(Profile).filter_by(user_id=user.id).first()
        if profile:
            max_trades_per_coin = profile.max_trades_per_coin
            coin = pair.split("_")[-1]
            total_trades = bot.get_total_trades(coin, account_name)
            if total_trades >= max_trades_per_coin:
                db_trade = Trade(
                    signal_id=signal_id,
                    channel=code,
                    user_name=user.username,
                    response=json.dumps({
                        "status":
                        "Ignored",
                        "message":
                        "max_trades_per_coin is reached for {}".format(pair)
                    }))
                session.add(db_trade)
                session.commit()
                session.close()
                return
        else:
            session.close()
            return
        risk = channel.risk_percent
        allowed = channel.allowed_percent

        base_asset = pair.split("_")[0]
        balance = bot.get_balance(account_name, base_asset)
        total_value = float(balance['total_btc_value']) * (allowed / 100)
        if float(buy_price) > 0.0001:
            buy_amount_total_potfolio = math.floor(
                ((total_value * (float(risk) / 100)) /
                 (abs((float(stop_loss) / float(buy_price)) - 1)) /
                 float(buy_price)) * 100) / 100
            buy_amount_available_btc = math.floor(
                (float(balance['total_available']) / float(buy_price)) *
                100) / 100
            min_amount = round(0.0011 * len(targets) / float(buy_price), 2)
        else:
            buy_amount_total_potfolio = math.floor(
                (total_value * (float(risk) / 100)) /
                (abs((float(stop_loss) / float(buy_price)) - 1)) /
                float(buy_price))
            buy_amount_available_btc = math.floor(
                float(balance['total_available']) / float(buy_price))
            min_amount = round(0.0011 * len(targets) / float(buy_price), 0)
        buy_amount = buy_amount_total_potfolio
        if float(balance['total_available']
                 ) < buy_amount_total_potfolio * float(buy_price):
            buy_amount = buy_amount_available_btc
        buy_amount = max(buy_amount, min_amount)
        if user.username == "bot_refrence_user":
            if float(buy_price) > 0.00011:
                buy_amount = round((0.0011 * len(targets)) / float(buy_price),
                                   2)
            else:
                buy_amount = math.ceil(
                    (0.0011 * len(targets)) / float(buy_price))

        buy_amount = format_value(buy_amount, stepSize)
        trade = bot.create_smart_trade(account_name=account_name,
                                       pair=pair,
                                       units_to_buy=buy_amount,
                                       buy_price=buy_price,
                                       targets=targets,
                                       stop_loss=stop_loss,
                                       note=note)
        db_trade = Trade(signal_id=signal_id,
                         channel=code,
                         user_name=user.username,
                         response=json.dumps(trade))
        session.add(db_trade)
        session.commit()
        session.close()
    except:
        traceback.print_exc()
        session.close()
Beispiel #41
0
def create_trade():
    session = DBSession()
    pair = request.form.get('pair')
    if pair.endswith("BTC"):
        pair = pair.split("_")
        pair = pair[1] + "_" + pair[0]
    buy_price = request.form.get('buy_price')
    stop_loss = request.form.get('stop_loss')
    targets = []
    tp1 = request.form.get('tp1')
    tp2 = request.form.get('tp2')
    tp3 = request.form.get('tp3')
    tp4 = request.form.get('tp4')
    note = request.form.get('note')
    code = request.form.get('code')
    if tp1 is not None and tp1 is not "":
        targets.append(tp1)
    else:
        return jsonify({"status": "error", "message": "Target 1 is required."})
    if tp2 is not None and tp2 is not "":
        targets.append(tp2)
    if tp3 is not None and tp3 is not "":
        targets.append(tp3)
    if tp4 is not None and tp4 is not "":
        targets.append(tp4)
    signal = session.query(Signal).filter_by(pair=pair,
                                             buy_price=buy_price,
                                             stop_loss=stop_loss,
                                             tp1=tp1,
                                             tp2=tp2,
                                             tp3=tp3,
                                             tp4=tp4,
                                             note=note,
                                             channel=code).first()
    if signal:
        return jsonify({"status": "error", "message": "Trade already taken"})
    signal = Signal(pair=pair,
                    buy_price=buy_price,
                    stop_loss=stop_loss,
                    tp1=tp1,
                    tp2=tp2,
                    tp3=tp3,
                    tp4=tp4,
                    note=note,
                    channel=code)
    session.add(signal)
    session.commit()
    users = session.query(User).filter_by(is_active=True).all()
    threads = []
    stepSize = get_buy_step_size(pair.split("_")[1])
    for user in users:
        if len(threads) >= NUM_WORKER_THREADS:
            print("waiting for threads to join")
            for thread in threads:
                thread.join()
            threads = []
        thread = Thread(target=create_smart_trade,
                        args=(user, pair, buy_price, targets, stop_loss, note,
                              signal.id, code, stepSize))
        thread.daemon = True
        thread.start()
        threads.append(thread)
    session.close()
    return jsonify({
        "status": "ok",
        "message": "Creating smart orders started."
    })
Beispiel #42
0
from settings import get_scrapy_settings
from spiders.general_spider import GeneralSpider
from db import DBSession, Config, SpiderRule

# from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from scrapy.utils.project import get_project_settings

from twisted.web import server, resource
from twisted.internet import reactor, endpoints, defer

configure_logging()
session = DBSession()
config = session.query(Config).filter(Config.id == 1).one()

runner = CrawlerRunner(get_scrapy_settings(config))


@defer.inlineCallbacks
def crawl(rule):
    dot = rule.spider_clsass.rindex('.')
    module, name = rule.spider_clsass[:dot], rule.spider_clsass[dot + 1:]
    if (module == GeneralSpider.__module__ and name == GeneralSpider.__name__):
        yield runner.crawl(GeneralSpider, rule)


sched = TwistedScheduler()
# sched.add_jobstore('sqlalchemy', url='mysql+pymysql://root:djejeUJ3qj^[email protected]:3306/apscheduler')
Beispiel #43
0
def check_smart_trades_for_user(user):
    while True:
        session = DBSession()
        try:
            account = session.query(Account).filter_by(user_name=user.username,
                                                       type='binance').first()
            if account.active == False:
                session.close()
                continue
            apiKey = account.api_key
            apiSecret = account.api_secret
            account_name = account.name.strip()
            profile = session.query(Profile).filter_by(user_id=user.id).first()
            if profile:
                auto_close_timer = profile.auto_close_timer.split(":")
                auto_close_timer = int(auto_close_timer[0]) * 60 + int(
                    auto_close_timer[1])
            else:
                auto_close_timer = 720  #minutes
            bot = ThreeCommas(apiKey, apiSecret)
            try:
                smart_trades = bot.get_smart_trades(account_name)
            except:
                traceback.print_exc()
                #send_debug_email("While fetching smart trades", user.user_name, traceback.format_exc())
            if smart_trades is None:
                print("Something wrong with: ", user.username)
                time.sleep(5)
                continue
            for smart_trade in smart_trades:

                if smart_trade['status'] == "buy_order_placed":
                    created_at = datetime.datetime.strptime(
                        smart_trade["created_at"], '%Y-%m-%dT%H:%M:%S.%fZ')
                    now = datetime.datetime.utcnow()
                    minutes_diff = (now - created_at).total_seconds() / 60
                    if minutes_diff >= auto_close_timer:
                        bot.cancel_smart_trade(smart_trade['id'])
                        continue

                updated_targets = []
                processed_target = None
                for target in smart_trade['take_profit_steps']:
                    prev_target = {
                        'percent': target['percent'],
                        'price': target['price'],
                        'price_method': 'bid',
                        'position': target['position']
                    }
                    updated_targets.append(prev_target)
                    if target['status'] == "processed":
                        already_updated = session.query(
                            ProcessedTarget).filter_by(
                                user_name=user.username,
                                trade_id=smart_trade['id'],
                                step_id=target['id']).first()
                        if already_updated:
                            continue
                        processed_target = target
                if processed_target is not None:
                    stop_loss = None
                    if processed_target['position'] == 1:
                        stop_loss = smart_trade['buy_price']
                    else:
                        for step in smart_trade['take_profit_steps']:
                            if processed_target['position'] - 1 == step[
                                    'position']:
                                stop_loss = step['price']
                                break
                    update = bot.update_smart_trade(smart_trade['id'],
                                                    stop_loss, updated_targets)
                    try:
                        if update['id']:
                            processed = ProcessedTarget()
                            processed.user_name = user.username
                            processed.trade_id = update['id']
                            processed.step_id = processed_target['id']
                            session.add(processed)
                            session.commit()
                            #send_update_email(user.user_name, "trade_id = {}, step = {}, stop_loss = {}".format(update['id'], processed_target['position'], stop_loss))
                    except:
                        traceback.print_exc()
                        processed = ProcessedTarget()
                        processed.user_name = user.username
                        processed.trade_id = smart_trade['id']
                        processed.step_id = processed_target['id']
                        session.add(processed)
                        session.commit()
                        #send_debug_email("While updating stop loss after fetching smart trades", user.user_name, json.dumps(update) + "\n" + traceback.format_exc())
        except:
            traceback.print_exc()
            pass
        session.close()
        time.sleep(5)