Пример #1
0
def csv_to_db(path_to_csv_file):
    with open(path_to_csv_file) as file:
        csv_reader = csv.DictReader(file)
        for row in csv_reader:
            csv_row_data = {}

            # keys to lowercase, remove spaces
            row = dict(
                (k.lower().replace(' ', '_'), v) for k, v in row.items())
            keys = row.keys()

            if not row['first_name'] or not row['last_name']:
                continue

            first = row['first_name']
            last = row['last_name']
            csv_row_data['first'] = first
            csv_row_data['last'] = last
            csv_row_data['username'] = str.lower(first[0] + last)

            bonus_keys = ['address', 'num_seats', 'phone']
            for key in bonus_keys:
                if key in keys:

                    if key == 'phone':
                        csv_row_data[key] = validate_phone_number(row[key])
                    else:
                        csv_row_data[key] = row[key]

                    if key == 'address':
                        address_dict = validate_address(row[key])
                        if address_dict is not None:
                            coord_dict = get_coordinates_from_address(
                                address_dict)
                            if coord_dict is not None:
                                address_dict = {**address_dict, **coord_dict}
                            # merge the address_dict into csv_row_data
                            csv_row_data = {**csv_row_data, **address_dict}

                    if key == 'num_seats':
                        if len(row[key]) > 0:
                            csv_row_data[key] = int(row[key])
                        else:
                            csv_row_data[key] = 0
                else:
                    csv_row_data[key] = None

            if 'm/w' in keys and 'v/n' in keys:
                csv_row_data['team'] = row['m/w'] + row['v/n']
            else:
                csv_row_data['team'] = None

            log.debug('creating new user with data: {}'.format(csv_row_data))

            User.user_from_csv_row(csv_row_data)
Пример #2
0
    def details(forum, related=None):
        if not related:
            related = []

        query = Query.SELECT.format(
            columns='*',
            table=Tables.TABLE_NAMES['FORUM']
        ) + Query.WHERE.format(
            clause='short_name = %r' % str(forum)
        )

        connection = db_connect.get_connection()
        try:
            cursor = connection.cursor()
            cursor.execute(query)
            response = dictfetchall(cursor)[0]
        except Exception as e:
            return Codes.UNKNOWN_ERROR, str(e)
        finally:
            connection.close()

        code = Codes.OK
        if 'user' in related:
            code, response['user'] = User.details(response['user'])

        return code, response
Пример #3
0
def list_users():
    request_data = get_json(request)

    code, response = User.list_by_forum(request_data['forum'], request_data)
    return json.dumps(
        {'code': code,
         'response': response}
    )
Пример #4
0
def unfollow():
    request_data = get_json(request)

    code, response = User.unfollow(request_data['follower'], request_data['followee'])
    return json.dumps({
        'code': code,
        'response': response
    })
Пример #5
0
def list_following():
    request_data = get_json(request)

    code, response = User.list_following(request_data['user'])
    return json.dumps({
        'code': code,
        'response': response
    })
Пример #6
0
def details():
    request_data = get_json(request)

    code, response = User.details(request_data['user'])
    return json.dumps({
        'code': code,
        'response': response
    })
Пример #7
0
def update():
    request_data = get_json(request)

    code, response = User.update(request_data['user'], request_data['name'], request_data['about'])
    return json.dumps({
        'code': code,
        'response': response
    })
Пример #8
0
    def details(short_name, related=None):
        if not related:
            related = []

        code, result = Forum.get_forum(short_name)

        if code == Codes.OK and 'user' in related:
            code, result['user'] = User.details(result['user'])

        return code, result
Пример #9
0
def create():
    request_data = get_json(request)

    columns = ', '.join(request_data.keys())
    values = get_values(request_data)

    code, response = User.create(columns, values, request_data['email'])
    return json.dumps({
        'code': code,
        'response': response
    })
Пример #10
0
    def list_by_forum(forum, request, related=None):
        if not related:
            related = []

        code, result = Post.get_posts_by_forum(forum, related, request)

        if code != Codes.OK:
            return code, result

        for post in result:

            if 'user' in related:
                code, post['user'] = User.details(post['user'])

        return code, result
Пример #11
0
    def details(post_id, related=None):
        if not related:
            related = []

        code, result = Post.get_post(post_id)
        if code != Codes.OK:
            return code, result

        if code == Codes.OK and 'user' in related:
            code, result['user'] = User.details(result['user'])
        if code == Codes.OK and 'forum' in related:
            code, result['forum'] = Forum.details(result['forum'])
        if code == Codes.OK and 'thread' in related:
            code, result['thread'] = Thread.details(result['thread'])

        return code, result
Пример #12
0
    def details(thread_id, related=None):
        if not related:
            related = []

        if 'thread' in related:
            return Codes.NOT_CORRECT, 'Thread can\'t be in related'

        code, result = Thread.get_thread(thread_id)
        if code != Codes.OK:
            return code, result

        if code == Codes.OK and 'user' in related:
            code, result['user'] = User.details(result['user'])
        if code == Codes.OK and 'forum' in related:
            code, result['forum'] = Forum.details(result['forum'], None)

        return code, result
Пример #13
0
def UpdateGCM(self,instanttype,ohurl):
	bid = self.request.get("bid")
	bname = self.request.get("bname")
	regid = self.request.get("regid")
	message = self.request.get("message")
	atplace = self.request.get("atplace")
	timestamp = datetime.datetime.now()
	userid = self.user_id
	userDetails = self.current_user
	push_query = GcmData.query(GcmData.bid == bid)	
	pushes = push_query.fetch(1) 
	registration_ids = []
	for push in pushes:
	    instants = push.instants            
	    if len(instants) > 20:
		del instants[-1]
	    instant = InstantMesg(message = message,atplace = atplace,userid=self.user_id,timestamp = timestamp,instanttype = instanttype,ohid = ohurl)
	    instants.append(instant)
	    push.instants = instants
	    push.put()

	secs = calendar.timegm(timestamp.timetuple())

	#querry databse for registration ids
	user_query = User.query(User.instants.gcm_bids == bid)
	users = user_query.fetch() 	
	for user in users:
	    if user.key.id() != self.user_id:
		registration_ids.append(user.instants.gcm_regid)
	logging.info("%s" %registration_ids)
	if len(registration_ids) == 0:
	    self.response.write("")
	    return
	Bodyfields = {
	      "data": {"live":message,"username":userDetails.name,"bid":bid,"bname":bname,"atplace":atplace,"timestamp":secs,"instanttype":instanttype,'ohurl':ohurl},
	      "registration_ids": registration_ids
	     }
	result = urlfetch.fetch(url="https://android.googleapis.com/gcm/send",
			payload=json.dumps(Bodyfields),
			method=urlfetch.POST,
			headers={'Content-Type': 'application/json','Authorization': 'key=AIzaSyBNnXeISW8-KfETBKE-r0ASytx4WyC6NTk'})
	#self.response.out.write('Server response, status: ' + result.content )
        return result
Пример #14
0
def new_signup():
    # forms to handle sign up and sign in
    signup_form = web_forms.SignUpForm()
    signin_form = web_forms.SignInForm()

    login = True

    if request.method == 'POST':
        if signin_form.data['submit_bttn']:
            if signin_form.validate_on_submit():
                username = signin_form.data['username_field']
                password = signin_form.data['password_field']

                result = db.select('users', ['password', 'user_id'],
                                   ['username'], [username])

                log.info('here is result: {}'.format(result))

                if result:
                    hash = result['password']
                    password_match = pbkdf2_sha256.verify(password, hash)
                    if password_match:
                        curr_user = User(result['user_id'])
                        login_user(curr_user)

                        next_url = request.args.get('next')

                        if not is_safe_url(next_url):
                            return abort(400)

                        if not current_user.is_profile_complete():
                            flash(
                                'Please complete your profile before continuing!'
                            )
                            return redirect(next_url or url_for('profile'))

                        return redirect(next_url or url_for('team'))

                signin_form.username_field.errors.append(
                    "Invalid Username or Password.")

        elif signup_form.data['submit']:
            if signup_form.validate():
                # create token
                token = ts.dumps(signup_form.data['email'],
                                 salt='email-confirm-key')

                # build url
                confirm_url = url_for('confirm_email',
                                      token=token,
                                      _external=True)

                # set up html that makes up email
                html = render_template('signup_email.html',
                                       validate_url=confirm_url,
                                       user={
                                           'first': signup_form.data['first'],
                                           'last': signup_form.data['last']
                                       })

                # create thread to speed up process
                subject = "Confirm Your Email"

                t1 = threading.Thread(target=util_basic.send_email,
                                      args=(signup_form.data['email'], html,
                                            subject))
                t1.start()

                # create user
                curr_user = User.user_from_form(signup_form.data)

                # log user in
                login_user(curr_user)

                # wait for thread
                t1.join()

                # flash message and redirect user to their new profile page
                flash(
                    'Please check your email and follow the instructions to confirm your email address.',
                    'alert-success')
                return redirect(url_for('profile'))

            login = False

    return render_template(
        'signup.html',
        sign_up=signup_form,
        sign_in=signin_form,
        login=login,
        _url=
        "https://s3-us-west-2.amazonaws.com/athlessary-images/defaults/login_photo.jpg"
    )
Пример #15
0
def load_user(user_id):
    try:
        return User(user_id)
    except ValueError:
        return None
Пример #16
0
    def details(post, related=None):
        if not related:
            related = []

        columns = 'p.id, p.message, p.date, p.isApproved, p.isHighlighted, p.isEdited, p.isSpam, ' \
                  'p.isDeleted, p.forum, p.thread, p.user, p.dislikes, p.likes, p.points, p.parent'
        if 'forum' in related:
            columns += ', f.name f_name, f.short_name f_short_name, f.user f_user, f.id f_id'
        if 'thread' in related:
            columns += ', t.id t_id, t.forum t_forum, t.title t_title, t.isClosed t_isClosed, ' \
                       't.user t_user, t.date t_date, t.message t_message, t.slug t_slug, t.isDeleted t_isDeleted, ' \
                       't.posts t_posts, t.likes t_likes, t.dislikes t_dislikes, t.points t_points'

        query = Query.SELECT.format(
            columns=columns,
            table=Tables.TABLE_NAMES['POST'] + ' as p'
        )
        if 'forum' in related:
            query += Query.JOIN.format(
                table=Tables.TABLE_NAMES['FORUM'] + ' as f',
                clause='p.forum = f.short_name'
            )
        if 'thread' in related:
            query += Query.JOIN.format(
                table=Tables.TABLE_NAMES['THREAD'] + ' as t',
                clause='p.thread = t.id'
            )
        query += Query.WHERE.format(
            clause='p.id = %s' % post
        )

        connection = db_connect.get_connection()
        try:
            cursor = connection.cursor()
            cursor.execute(query)
            response = dictfetchall(cursor)[0]
        except Exception as e:
            if 'list index out of range' in str(e):
                return Codes.NOT_FOUND, 'Post %s not found' % post
            else:
                return Codes.UNKNOWN_ERROR, str(e)
        finally:
            connection.close()

        response = Post.get_response_values(response)

        code = Codes.OK
        if 'thread' in related:
            response['t_date'] = str(response['t_date'])
            response['t_isDeleted'] = bool(response['t_isDeleted'])
            response['t_isClosed'] = bool(response['t_isClosed'])

            response['thread'] = {}
            keys = []
            for val in response:
                if val[:2] == 't_':
                    response['thread'][val[2:]] = response[val]
                    keys.append(val)
            for key in keys:
                del response[key]
        if 'forum' in related:
            response['forum'] = {}
            keys = []
            for val in response:
                if val[:2] == 'f_':
                    response['forum'][val[2:]] = response[val]
                    keys.append(val)
            for key in keys:
                del response[key]
        if 'user' in related:
            code, response['user'] = User.details(response['user'])

        return code, response
Пример #17
0
def list_users():
    request_data = get_json(request)

    code, response = User.list_by_forum(request_data["forum"], request_data)
    return json.dumps({"code": code, "response": response})
Пример #18
0
    def list_by_forum(forum, request, related=None):
        if not related:
            related = []
        if 'order' not in request:
            request['order'] = 'DESC'

        columns = 'p.id, p.message, p.date, p.likes, p.dislikes, p.points, p.isApproved, ' \
                  'p.isHighlighted, p.isEdited, p.isSpam, p.isDeleted, p.forum, p.thread, p.user, p.parent'
        if 'forum' in related:
            columns += ', f.id f_id, f.name f_name, f.short_name f_short_name, f.user f_user'
        if 'thread' in related:
            columns += ', t.id t_id, t.title t_title, t.slug t_slug, t.message t_message, t.date t_date, ' \
                       't.posts t_posts, t.likes t_likes, t.dislikes t_dislikes, t.points t_points, ' \
                       't.isClosed t_isClosed, t.isDeleted t_isDeleted, t.forum t_forum, t.user t_user'

        query = Query.SELECT.format(
            columns=columns,
            table=Tables.TABLE_NAMES['POST'] + ' as p'
        )
        if 'forum' in related:
            query += Query.JOIN.format(
                table=Tables.TABLE_NAMES['FORUM'] + ' as f',
                clause='p.forum = f.short_name'
            )
        if 'thread' in related:
            query += Query.JOIN.format(
                table=Tables.TABLE_NAMES['THREAD'] + ' as t',
                clause='p.thread = t.id'
            )
        query += Query.WHERE.format(
            clause='p.forum = %r' % str(forum)
        )
        if 'since' in request:
            query += Query.AND_CLAUSE.format(
                clause='p.date > %r' % str(request['since'])
            )
        query += Query.ORDER_BY.format(
            column='p.date',
            type=request['order']
        )
        if 'limit' in request:
            query += Query.LIMIT.format(
                count=request['limit']
            )

        connection = db_connect.get_connection()
        try:
            cursor = connection.cursor()
            cursor.execute(query)
            posts = dictfetchall(cursor)
        except Exception as e:
            return Codes.UNKNOWN_ERROR, str(e)
        finally:
            connection.close()

        response = []
        code = Codes.OK
        for post in posts:
            if 'forum' in related:
                post['forum'] = {}
                keys = []
                for val in post:
                    if val[:2] == 'f_':
                        post['forum'][val[2:]] = post[val]
                        keys.append(val)
                for key in keys:
                    del post[key]

            if 'thread' in related:
                post['thread'] = {}
                keys = []
                for val in post:
                    if val[:2] == 't_':
                        post['thread'][val[2:]] = post[val]
                        keys.append(val)
                for key in keys:
                    del post[key]

                post['thread'] = Thread.get_response_values(post['thread'])

            if 'user' in related:
                code, post['user'] = User.details(post['user'])

            response.append(Post.get_response_values(post))

        return code, response