def teardown_user(): user = User() user.login('test_user','test_pass') model = MongoModel(project=user.project,collection=user.collection) model.delete({'_id':objectid.ObjectId(str(user.user.id))}) model = MongoModel(project='internal',collection='project') model.delete({'name':'scraped'})
def test_update(): user = User() user.login('test_user_api_update','test_pass') api_key = user.user.auth_token project = Project() project.find('test api update') entry_id = project.find_entry('test api entry') print user.get_project() print project.get_id() mongo = MongoModel(project='test_api_update',collection='test_api_entry') data = mongo.query({'a':1}) print data id = str(data['_id']) updated = {'a':2} url = '/api/db/%s/%s/%s/?api_key=%s' % (project.project.id,entry_id,id,api_key) client = webapp.app.test_client() response = client.put(url, data = json.dumps(updated), content_type='application/json') print response.data status = json.loads(response.data) assert status['status'] updated_data = mongo.query({'_id':objectid.ObjectId(id)}) assert updated_data['a'] == 2
def teardown_project_update(): user = User() user.login('test_update_user','test_password') db = MongoModel(project=user.project,collection=user.collection) db.delete({'username':'******'}) db = MongoModel(project='internal',collection='project') db.delete({'name':'project update'})
def register(): user = User() form = UserForm(csrf_enabled=False) if form.validate_on_submit(): user.create(form.username.data,form.password.data,form.email.data) return render_template('register.html',form=form)
def setup_project_update(): user = User() user.create('test_update_user','test_password','*****@*****.**') project = Project() project.create('project update','test project update') user.add_project(project.get_id()) project.add_entry('data','test data','data')
def setup_user(): user = User() user.create('test_user','test_pass','*****@*****.**') project = Project() project.create('scraped','scraped') project.add_entry('entry','entry','localhost') user.add_project(project.get_id())
def setup_user_project(): # now create user user = User() user.create('test_user_update_project','test_pass','*****@*****.**') # create project project = Project() project.create('project update','project update content') # associate project user.add_project(project.get_id())
def test_add_multiple(db_session): db_session.add_all([ User(name="John", age=90), User(name="Philo", age=98), User(name="Paris", age=95) ]) db_session.commit() result = db_session.query(User).filter(User.age >= 90) assert result.count() == 3
def setup_test_update(): mongo = MongoModel(project='test_api_update',collection='test_api_entry') mongo.insert({'a':1}) user = User() user.create('test_user_api_update','test_pass','*****@*****.**') project = Project() project.create('test api update','scraped') project.add_entry('test api entry','entry','localhost') user.add_project(project.get_id())
def teardown_test_update(): mongo = MongoModel(project='test_api_update',collection='test_api_entry') mongo.delete({'a':2}) user = User() user.login('test_user_api_update','test_pass') model = MongoModel(project=user.project,collection=user.collection) model.delete({'_id':objectid.ObjectId(str(user.user.id))}) model = MongoModel(project='internal',collection='project') model.delete({'name':'test api update'})
def teardown_project_delete(): user = User() user.login('test_user_delete_api_project','test_pass') project = Project() model = MongoModel(project=user.project,collection=user.collection) model.delete({'_id':ObjectId(user.user.id)}) project.find('project 1') model = MongoModel(project=project.project_,collection=project.collection_) model.delete({'name':'project 1'}) model.conn.drop_database('project_1')
def test_user_project_list(): user = User() user.login('test_user_list','test_pass') api_key = user.user.auth_token test_client = webapp.app.test_client() data = {'action':'user_list'} url = '/api/project/?api_key=%s' % api_key result = test_client.get(url) print result.data assert 'project list 1' in result.data assert 'project list 2' in result.data
def test_db_relationships(db_session): new_user = User(name="Lomothy", age=25) new_user.addresses = [ Address(email="*****@*****.**"), Address(email="*****@*****.**") ] db_session.add(new_user) db_session.commit() lomothy = db_session.query(User).filter(User.name == "Lomothy").first() assert len(lomothy.addresses) == 2
def login(): form = LoginForm(csrf_enabled=False) user = User() if form.validate_on_submit(): username = form.username.data password = form.password.data user = user.login(username,password) login_user(user) flash('user is logged in') identity_changed.send(current_app._get_current_object(),identity=Identity(user.user.id)) return redirect(request.args.get('next') or '/') return render_template('login.html',form=form)
def verifica_user(): user_json = session['barzinga_user'] user = User.query().filter(User.email == user_json["email"]).get() dx = user_json['email'].endswith('@dextra-sw.com') mutant = user_json['email'].endswith('@mutantbr.com') if not dx and not mutant: raise Exception('Invalid domain %s' % user_json['email']) if not user: # user = User(name = user_json['name'], email=user_json['email'], photo_url=user_json['picture'], money=0.0, admin=False, rfid=str('')) user = User(name = '', email=user_json['email'], photo_url=user_json['picture'], money=0.0, admin=False, infra=False, rfid=str(''), active = True) user.put() user_document = search.Document( fields=[ search.TextField(name='name', value=user.name), search.TextField(name='email', value=user.email) ]) search.Index(name='user').put(user_document) elif not user.photo_url: user.photo_url = user_json['picture'] user.put() identity = Identity(user.key.id()) identity_changed.send(current_app._get_current_object(), identity=identity)
def get(self, email=None): parser = reqparse.RequestParser() parser.add_argument('limit', type=int) args = parser.parse_args(strict=True) limit = args.get('limit') if limit is not None: users = User.limit_users(limit) return [user.to_dict() for user in users] elif email is not None: user = User.get_user_by_email(email) return user.to_dict() abort(400, message="You must provide limit or email")
def delete(self,project_id): api_key = request.args.get('api_key') if not authorized(api_key,project_id): return jsonify({'status':False}) user = User() user.api_login(api_key) project = Project() project.get(project_id) if not project.get_id() in user.user.project: return jsonify({'status':False}) user.remove_project(project.get_id()) model = MongoModel(project=project.project_,collection=project.collection_) model.delete({'_id':objectid.ObjectId(str(project_id))}) return jsonify({'status':True})
def setup_user_project_list(): user = User() user.create('test_user_list','test_pass','*****@*****.**') project = Project() project.create('project list 1','project content 1') user.add_project(project.get_id()) project = Project() project.create('project list 2','project content 2') user.add_project(project.get_id()) project = Project() project.create('project list 3','project content 3') user.add_project(project.get_id())
def dailyDebitExceeded(): users = User.query().filter(User.money < -40.01, User.active == True).fetch() users_email_list = [] usersJson = 'email;valor \n' for u in users: usersJson += str(u.email) + ';' + str( "%.2f" % round(u.money, 2)) + ' \n' users_email_list.append(str(u.email)) make_blob_public(usersJson, 'debitExceeded/', datetime.datetime.now().strftime("%d_%m_%y")) if (len(users_email_list) != 0): mail.EmailMessage( sender='*****@*****.**', bcc=users_email_list, subject='Barzinga: Saldo em débito excedido', html= """\ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml"><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"/><meta content="width=device-width" name="viewport"/><meta content="IE=edge" http-equiv="X-UA-Compatible"/><title></title><style type="text/css">body{margin: 0;padding: 0;}table,td,tr{vertical-align: top;border-collapse: collapse;}*{line-height: inherit;}a[x-apple-data-detectors=true]{color: inherit !important;text-decoration: none !important;}</style><style id="media-query" type="text/css">@media (max-width: 920px){.block-grid,.col{min-width: 320px !important;max-width: 100% !important;display: block !important;}.block-grid{width: 100% !important;}.col{width: 100% !important;}.col>div{margin: 0 auto;}img.fullwidth,img.fullwidthOnMobile{max-width: 100% !important;}.no-stack .col{min-width: 0 !important;display: table-cell !important;}.no-stack.two-up .col{width: 50% !important;}.no-stack .col.num4{width: 33% !important;}.no-stack .col.num8{width: 66% !important;}.no-stack .col.num4{width: 33% !important;}.no-stack .col.num3{width: 25% !important;}.no-stack .col.num6{width: 50% !important;}.no-stack .col.num9{width: 75% !important;}.video-block{max-width: none !important;}.mobile_hide{min-height: 0px;max-height: 0px;max-width: 0px;display: none;overflow: hidden;font-size: 0px;}.desktop_hide{display: block !important;max-height: none !important;}}</style></head><body class="clean-body" style="margin: 0; padding: 0; -webkit-text-size-adjust: 100%; background-color: transparent;"><table bgcolor="transparent" cellpadding="0" cellspacing="0" class="nl-container" role="presentation" style="table-layout: fixed; vertical-align: top; min-width: 320px; Margin: 0 auto; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: transparent; width: 100%;" valign="top" width="100%"><tbody><tr style="vertical-align: top;" valign="top"><td style="word-break: break-word; vertical-align: top;" valign="top"><div style="background-color:transparent;"><div class="block-grid" style="Margin: 0 auto; min-width: 320px; max-width: 900px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: transparent;"><div style="border-collapse: collapse;display: table;width: 100%;background-color:transparent;"><div class="col num12" style="min-width: 320px; max-width: 900px; display: table-cell; vertical-align: top; width: 900px;"><div style="background-color:#F4F4F4;width:100% !important;"><div style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:15px; padding-bottom:15px; padding-right: 15px; padding-left: 15px;"><div align="center" class="img-container center fixedwidth" style="padding-right: 0px;padding-left: 0px;"><img align="center" alt="Image" border="0" class="center fixedwidth" src="https://i.imgur.com/bHxH9mX.png" style="text-decoration: none; -ms-interpolation-mode: bicubic; border: 0; height: auto; width: 100%; max-width: 172px; display: block;" title="Image" width="172"/></div></div></div></div></div></div></div><div style="background-color:transparent;"><div class="block-grid" style="Margin: 0 auto; min-width: 320px; max-width: 900px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #FFFFFF;"><div style="border-collapse: collapse;display: table;width: 100%;background-color:#FFFFFF;"><div class="col num12" style="min-width: 320px; max-width: 900px; display: table-cell; vertical-align: top; width: 900px;"><div style="width:100% !important;"><div style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:25px; padding-bottom:35px; padding-right: 0px; padding-left: 0px;"><div style="color:#555555;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:1.5;padding-top:5px;padding-right:20px;padding-bottom:10px;padding-left:20px;"><div style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.5; color: #555555; mso-line-height-alt: 18px;"><p style="font-size: 14px; line-height: 1.5; text-align: center; mso-line-height-alt: 21px; margin: 0;">Olá, Dextran@!</p><p style="font-size: 14px; line-height: 1.5; text-align: center; mso-line-height-alt: 21px; margin: 0;"> </p><p style="font-size: 14px; line-height: 1.5; text-align: center; mso-line-height-alt: 21px; margin: 0;">Nossos sistemas perceberam que sua conta no Barzinga! encontra-se muito negativa.</p><p style="font-size: 14px; line-height: 1.5; text-align: center; mso-line-height-alt: 21px; margin: 0;">(╥ ﹏ ╥)</p></div></div><div align="center" class="img-container center fixedwidth" style="padding-right: 5px;padding-left: 5px;"><div style="font-size:1px;line-height:20px"> </div><img align="center" alt="Image" border="0" class="center fixedwidth" src="https://media.giphy.com/media/S6MfYgFHs00HFijzlG/giphy.gif" style="text-decoration: none; -ms-interpolation-mode: bicubic; border: 0; height: auto; width: 100%; max-width: 360px; display: block;" title="Image" width="360"/></div><div style="color:#555555;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:1.5;padding-top:30px;padding-right:20px;padding-bottom:10px;padding-left:20px;"><div style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.5; color: #555555; mso-line-height-alt: 18px;"><p style="font-size: 14px; line-height: 1.5; text-align: center; mso-line-height-alt: 21px; margin: 0;">Por isso, gostaríamos de pedir que nos procure para se regularizar, urgentemente!<br/>(‘• ω • `) ♡</p></div></div></div></div></div></div></div></div><div style="background-color:transparent;"><div class="block-grid" style="Margin: 0 auto; min-width: 320px; max-width: 900px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: transparent;"><div style="border-collapse: collapse;display: table;width: 100%;background-color:transparent;"><div class="col num12" style="min-width: 320px; max-width: 900px; display: table-cell; vertical-align: top; width: 900px;"><div style="background-color:#f3f7fa;width:100% !important;"><div style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:15px; padding-bottom:5px; padding-right: 0px; padding-left: 0px;"><div align="center" class="img-container center fixedwidth" style="padding-right: 5px;padding-left: 5px;"><div style="font-size:1px;line-height:5px"> </div><img align="center" alt="Image" border="0" class="center fixedwidth" src="https://i.imgur.com/qGd2R2z.png" style="text-decoration: none; -ms-interpolation-mode: bicubic; border: 0; height: auto; width: 100%; max-width: 178px; display: block;" title="Image" width="178"/><div style="font-size:1px;line-height:5px"> </div></div><table border="0" cellpadding="0" cellspacing="0" class="divider" role="presentation" style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;" valign="top" width="100%"><tbody><tr style="vertical-align: top;" valign="top"><td class="divider_inner" style="word-break: break-word; vertical-align: top; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;" valign="top"><table align="center" border="0" cellpadding="0" cellspacing="0" class="divider_content" height="0" role="presentation" style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-top: 1px solid #BBBBBB; height: 0px; width: 80%;" valign="top" width="80%"><tbody><tr style="vertical-align: top;" valign="top"><td height="0" style="word-break: break-word; vertical-align: top; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;" valign="top"><span></span></td></tr></tbody></table></td></tr></tbody></table><div style="color:#555555;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:1.2;padding-top:5px;padding-right:5px;padding-bottom:5px;padding-left:5px;"><div style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.2; color: #555555; mso-line-height-alt: 14px;"><p style="font-size: 10px; line-height: 1.2; text-align: center; mso-line-height-alt: 12px; margin: 0;"><span style="font-size: 10px; color: #999999;">Este e-mail é confidencial. Para mais informações, clique <a href="https://dextra.com.br/confidencial/" rel="noopener" style="text-decoration: underline; color: #0068A5;" target="_blank">aqui</a>.</span></p><p style="font-size: 10px; line-height: 1.2; text-align: center; mso-line-height-alt: 12px; margin: 0;"><span style="font-size: 10px; color: #999999;">Polis II de Alta Tecnologia - R. Dr. Ricardo Benetton Martins, 1000 - Prédio 11 - Bosque das Palmeiras, Campinas - SP, 13086-902</span></p></div></div><table cellpadding="0" cellspacing="0" class="social_icons" role="presentation" style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt;" valign="top" width="100%"><tbody><tr style="vertical-align: top;" valign="top"><td style="word-break: break-word; vertical-align: top; padding-top: 5px; padding-right: 5px; padding-bottom: 10px; padding-left: 5px;" valign="top"><table activate="activate" align="center" alignment="alignment" cellpadding="0" cellspacing="0" class="social_table" role="presentation" style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: undefined; mso-table-tspace: 0; mso-table-rspace: 0; mso-table-bspace: 0; mso-table-lspace: 0;" to="to" valign="top"><tbody><tr align="center" style="vertical-align: top; display: inline-block; text-align: center;" valign="top"><td style="word-break: break-word; vertical-align: top; padding-bottom: 5px; padding-right: 5px; padding-left: 5px;" valign="top"><a href="https://www.facebook.com/dextrasis" target="_blank"><img alt="Facebook" height="32" src="https://i.imgur.com/Ftl2iCe.png" style="text-decoration: none; -ms-interpolation-mode: bicubic; height: auto; border: none; display: block;" title="Facebook" width="32"/></a></td><td style="word-break: break-word; vertical-align: top; padding-bottom: 5px; padding-right: 5px; padding-left: 5px;" valign="top"><a href="https://www.instagram.com/dextra_digital/" target="_blank"><img alt="Instagram" height="32" src="https://i.imgur.com/8P9Zmjj.png" style="text-decoration: none; -ms-interpolation-mode: bicubic; height: auto; border: none; display: block;" title="Instagram" width="32"/></a></td><td style="word-break: break-word; vertical-align: top; padding-bottom: 5px; padding-right: 5px; padding-left: 5px;" valign="top"><a href="https://twitter.com/dextra_digital" target="_blank"><img alt="Twitter" height="32" src="https://i.imgur.com/x7vajxc.png" style="text-decoration: none; -ms-interpolation-mode: bicubic; height: auto; border: none; display: block;" title="Twitter" width="32"/></a></td><td style="word-break: break-word; vertical-align: top; padding-bottom: 5px; padding-right: 5px; padding-left: 5px;" valign="top"><a href="https://www.linkedin.com/company/dextra-digital" target="_blank"><img alt="LinkedIn" height="32" src="https://i.imgur.com/cvz1c8M.png" style="text-decoration: none; -ms-interpolation-mode: bicubic; height: auto; border: none; display: block;" title="LinkedIn" width="32"/></a></td></tr></tbody></table></td></tr></tbody></table></div></div></div></div></div></div></td></tr></tbody></table></body></html> """ ).Send() users_email_list.clear() return json.dumps(usersJson)
def blockdevice(): entityID = int(request.POST.get("entityID") or 0) block = request.POST["block"] == 'True' if not entityID: return FAILURE from player.model import Player userID = Player.simple_load(entityID, ['userID']).userID if not userID: return FAILURE from user.model import User user = User.load(userID) imsi = user.imsi if not imsi: return FAILURE from session.regions import r_block_devices if block: r_block_devices.sadd(imsi) else: r_block_devices.srem(imsi) if block: for regionID, entityIDs in user.roles.items(): for entityID in entityIDs: spawn(proxy_batch_call, 'chat.manager.clear_blocked_message', regionID, entityID) return SUCCESS
def blocktime(): # userID = int(request.POST.get("userID") or 0) entityID = int(request.POST.get("entityID") or 0) blocktime = int(request.POST.get("blocktime") or 0) if not entityID: return FAILURE now = int(time.time()) if blocktime and blocktime < now: return FAILURE from player.model import Player userID = Player.simple_load(entityID, ['userID']).userID if not userID: return FAILURE from user.model import User user = User.load(userID) user.blocktime = blocktime user.save() for regionID, entityIDs in user.roles.items(): for entityID in entityIDs: spawn(proxy_batch_call, 'chat.manager.clear_blocked_message', regionID, entityID) return SUCCESS
def test_user_project_join(): user = User() user.login('test_user_list','test_pass') api_key = user.user.auth_token test_client = webapp.app.test_client() project = Project() project.find('project list 3') url = '/api/project/%s/?api_key=%s' % (project.project.id,api_key) data = {'project':'project list 3','action':'join'} result = test_client.put(url,data=json.dumps(data),content_type='application/json') user.login('test_user_list','test_pass') print user.user.project assert str(project.get_id()) in user.user.project
def add_app(): json_data = request.get_json() user_json = json_data.get('user') user = User.query().filter(User.email == user_json.get('email')).get() products = json_data.get('products') products_list = [] quantity_table = {} for product in products: id = int(product['id']) quantity_table[id] = product['quantity'] products_list.append(ndb.Key(Product, id).get()) try: transaction = Transaction.new(user, products_list, quantity_table) transaction.put() except Exception as e: return str(e), 400 return str('ok'), 200
def get(self, *args, **kwargs): if not self.user.admin: self.add_message(u'您没有访问该页面的权限, 请联系管理员') return self.render('failed.html') ps = Project.find(status__no=Project._status_del) users = User.find(status=User._status_ok) return self.render('manager.html', ps=ps, users=users)
def register(): if request.method == 'POST': username = request.form.get('username') password = request.form.get('password') gender = request.form.get('gender') age = request.form.get('age') city = request.form.get('city') phone = request.form.get('phone') try: user = User.query.filter_by(username=username).one() if user: return '用户名已存在' except Exception: user = User(username=username, password=password, gender=gender, age=age, city=city, phone=phone) db.session.add(user) db.session.commit() return redirect('/user/login') else: return render_template('register.html')
def transactions_last_month(): today = datetime.date.today() first = today.replace(day=1) lastMonthEnd = first - datetime.timedelta(days=1) lastMonthBegin = lastMonthEnd.replace(day=1) transactions = transactions_all(end=lastMonthEnd.strftime("%d-%m-%Y"), start=lastMonthBegin.strftime("%d-%m-%Y")) users = User.query().fetch() credits = credits_all(end=lastMonthEnd.strftime("%d-%m-%Y"), start=lastMonthBegin.strftime("%d-%m-%Y")) totalTransacoesCompra = 0.00 totalInadimplentes = 0.00 totalCreditosEmUsuarios = 0.00 totalCreditosComprados = 0.00 for t in transactions: totalTransacoesCompra += t.value for u in users: totalCreditosEmUsuarios += u.money if u.money < -0.01 : totalInadimplentes += u.money for c in credits: totalCreditosComprados += c.value resultado = 'Valor total das transacoes; '+str("%.2f" % round(totalTransacoesCompra,2))+'\n' resultado += 'Valor total dos creditos em usuarios; '+str("%.2f" % round(totalCreditosEmUsuarios,2))+'\n' resultado += 'Valor total dos Usuarios Negativos; '+str("%.2f" % round(totalInadimplentes,2))+'\n' resultado += 'Valor total dos Creditos Adquiridos; '+str("%.2f" % round(totalCreditosComprados,2))+'\n' make_blob_public(str(resultado), 'monthly', 'balance_'+lastMonthBegin.strftime("%d-%m-%Y")) return str('ok'), 200
def login(self, msgtype, body): limited, message = self.access_limited() if limited: return fail_msg(msgtype, reason=message) req = poem_pb.LoginWorldRequest() req.ParseFromString(body) if not req.verify_code: logger.error( 'invalid verify_code %s, body %r', req.verify_code, body) return fail_msg(msgtype, msgTips.FAIL_MSG_INVALID_REQUEST) session = SessionStore(get_session_pool(), str(req.verify_code)) if not req.userID or session.uid != req.userID: return fail_msg(msgtype, reason="登录超时,请重试") self.userID = req.userID # get role list user = User.load(self.userID) rsp = poem_pb.LoginWorldResponse() entityIDs = user.roles.get(settings.REGION['ID']) if not entityIDs: return success_msg(msgtype, rsp) # if len(entityIDs) == 1: # entityID = entityIDs[0] # else: # entityID = req.entityID if not req.entityID: entityID = min(entityIDs) else: entityID = req.entityID rsp.roles.add(id=entityID) rsp.need_rename = PlayerDuplicateNamesIndexing.exists(entityID) logger.debug(rsp) return success_msg(msgtype, rsp)
def lock_device_and_skip_guide(entityID): from entity.manager import g_entityManager from player.model import Player, OfflineAttrType entityID = int(entityID) deviceID = request.POST.getone('deviceID', '') lock_level = int(request.POST.getone('lock_level', '50')) role = g_entityManager.get_player(entityID) if not role: Player.add_offline_attr(entityID, Player.getAttributeIDByName('skip_guide'), True, OfflineAttrType.Set) Player.add_offline_attr(entityID, Player.getAttributeIDByName('lock_level'), lock_level, OfflineAttrType.Set) else: role.skip_guide = True role.lock_level = lock_level role.save() role.sync() # lock device if not role: userID = Player.simple_load(entityID, ['userID']).userID else: userID = role.userID from user.model import User u = User.simple_load(userID, ['lock_device', 'imsi']) u.lock_device = deviceID or u.imsi u.save() return SUCCESS
def query_player(): value = request.POST.getone('value') type = request.POST.getone('type') regionID = int(request.GET['regionID']) if not type or not value: return FAILURE import settings from player.model import Player from yy.entity.index import UniqueIndexing from user.model import User, UsernameIndexing if type == 'playername': indexing = UniqueIndexing('index_p_name{%d}' % regionID, settings.REDISES['index']) entityID = indexing.get_pk(value) if entityID: entityIDs = [indexing.get_pk(value)] else: entityIDs = [] elif type == 'username': userID = UsernameIndexing.get_pk(value) u = User.load(userID) entityIDs = u.roles[regionID] elif type == 'entityID': entityIDs = [int(value)] attrs = [ 'entityID', 'username', 'name', 'sex', 'career', 'level', 'userID' ] header = ['ID', u'用户名', u'名称', u'性别', u'职业', u'等级', u"用户ID"] rows = [] players = Player.batch_load(entityIDs, attrs) for player in players: ll = [getdisplayattr(player, s) for s in attrs] rows.append(ll) return dict(rows=rows, header=header)
def get_all(category=None): print category if category: if category == 'POSSOCOMPRAR': user_logged = session['barzinga_user'] user = User.query().filter( User.email == user_logged["email"]).get() products = [ p.to_dict() for p in Product.query(Product.price <= user.money).order( Product.description).fetch() ] else: products = [ p.to_dict() for p in Product.query(Product.category == category).order( Product.description).fetch() ] else: products = [ p.to_dict() for p in Product.query().order(Product.description).fetch() ] return json.dumps(products)
def test_user_registration(): username = '******' password = '******' email = '*****@*****.**' test_client = webapp.app.test_client() create = test_client.post('/register/',data={ 'username':username, 'password':password, 'confirm':password, 'email':email },follow_redirects=True) user = User() user.login(username,password) assert user.is_authenticated()
def transactions_user(): logged_user = session['barzinga_user'] logged_user = User.query().filter(User.email == logged_user["email"]).get() transactions = Transaction.query().filter( Transaction.user == logged_user.key).order(-Transaction.date).fetch(20) trans = [] for t in transactions: transact = {} transact['id'] = str(t.key) transact['user'] = logged_user.name.encode('utf-8').strip() transact['value'] = str(t.value) transact['date'] = str(t.date.strftime('%d/%m/%y - %H:%M')) itens = [] for it in t.items: item = {} transaction_item = it.get() prod = transaction_item.product.get() item['product'] = 'Nao Existe Mais' if prod: item['product'] = prod.description item['quantity'] = str(transaction_item.quantity) itens.append(item) transact['itens'] = itens trans.append(transact) return json.dumps(trans)
def authorized(api_key,project_id): user = User() print "api key is %s" % api_key user.api_login(api_key) if not user.is_authenticated(): print "wrong password" return False login_user(user) identity_changed.send(current_app._get_current_object(),identity=Identity(user.user.id)) permission = EditProjectPermission(project_id) if not permission.can(): print "bad permission" return False return True
def alter_name(self, msgtype, body): limited, message = self.access_limited() if limited: return fail_msg(msgtype, reason=message) req = poem_pb.AlterNameRequest() req.ParseFromString(body) entityID = req.entityID if not entityID: user = User.load(self.userID) entityIDs = user.roles.get(settings.REGION['ID']) if len(entityIDs) > 1: return fail_msg(msgtype, reason="未指定角色") if entityIDs: entityID = entityIDs[0] if not PlayerDuplicateNamesIndexing.exists(entityID): return fail_msg(msgtype, reason="不可修改名称") session = SessionStore(get_session_pool(), str(req.verify_code)) if not req.userID or session.uid != req.userID: return fail_msg(msgtype, reason="登录超时,请重试") name, error = validate_name(req.name) if error: return fail_msg(msgtype, error) # 名字去重复 try: PlayernameIndexing.register(0, name) # 占位 p = Player.simple_load(entityID, ["name"]) p.name = name p.save() PlayernameIndexing.pool.execute( 'HSET', PlayernameIndexing.key, name, entityID) # 更新 except DuplicateIndexException: return fail_msg(msgtype, reason=_YYTEXT('该名称已存在')) PlayerDuplicateNamesIndexing.unregister(entityID) return success_msg(msgtype, '')
def test_project_update(): user = User() user.login('test_user_update_project','test_pass') api_key = user.user.auth_token project = Project() project.find('project update') test_client = webapp.app.test_client() url = '/api/project/%s/?api_key=%s' % (project.project.id,api_key) data = json.dumps({'description':'project updated content'}) result = test_client.put(url,data=data,content_type='application/json') status = json.loads(result.data) print status assert status['status'] project=Project() project.find('project update') assert project.project.description == 'project updated content'
def setup_base(): Base.metadata.drop_all(bind=db, tables=[User.__table__, Address.__table__]) Base.metadata.create_all(db) session = Session() change_user = User(name="Mike", age=44) session.add(change_user) session.commit() session.close()
def users(self): us = [] auths = Auth.find_project_users(pid=self.id) for auth in auths: u = User.get(id=auth.user_id, status=User._status_ok) if u: us.append(u) return us
def load_player(self, userID, entityID, clientVersion='', featureCode='', clientIP=''): player = self.get_player(entityID) if player: return player user = User.get(userID) # 校验entityID if not user or entityID not in user.roles.get(settings.REGION['ID']): logger.error('player crossed failed %d', entityID) return player = Player.load(entityID) if not player: return player.userID = user.userID player.username = user.username player.username_alias = user.username_alias or '' player.channel = user.channel or '' self.set_player(player) if not player.lastlogin: create_player(player) player.totallogin = 1 # 累计登陆 player.seriallogin = 1 # 连续登陆 player.clientVersion = clientVersion player.featureCode = featureCode player.clientIP = clientIP from common.log import role_register role_register.info(player=player) else: player.load_mails() today = datedate.today() if player.lastlogin.date() != today: # 当日重复不计算累计连续登陆 if player.lastlogin.date() < (datedate.today() - timedelta(days=1)): # 昨天没登陆 player.seriallogin = 1 else: player.seriallogin += 1 player.totallogin += 1 # 月卡减去每天登录的天数 if player.monthly_card_30: delta = today - player.lastlogin.date() player.monthly_card_30 = max(player.monthly_card_30 - delta.days + 1, 0) # {{ 新月卡 if player.monthcard1: delta = today - player.lastlogin.date() player.monthcard1 = max(player.monthcard1 - delta.days + 1, 0) if player.monthcard2: delta = today - player.lastlogin.date() player.monthcard2 = max(player.monthcard2 - delta.days + 1, 0) if player.weekscard1: delta = today - player.lastlogin.date() player.weekscard1 = max(player.weekscard1 - delta.days + 1, 0) if player.weekscard2: delta = today - player.lastlogin.date() player.weekscard2 = max(player.weekscard2 - delta.days + 1, 0) # }} player.daily_first_login = True now = int(time.time()) player.lastlogin = datetime.fromtimestamp(now) player.save() return player
def test_project_create(): # login user get token user = User() user.login('test_user','test_pass') api_key = user.user.auth_token # do a post url = '/api/project/?api_key=%s' % api_key # now check project in user test_client = webapp.app.test_client() data = {'name':'project create','description':'project content create'} result = test_client.post(url,data=json.dumps(data),content_type='application/json') status = json.loads(result.data) assert status['status'] project = ProjectList() test_user = User() test_user.login('test_user','test_pass') print test_user.user.project registered = False for i in project.all(): if i.get_id() in test_user.get_project(): registered = True assert registered, "project not in user project" exist = False for i in project.all(): if 'project create' == i.project.name: exist = True assert exist, "project created" # now delete it project = Project() model = MongoModel(project=project.project_,collection=project.collection_) model.delete({'name':'project create'})
def test_user_settings_password(): test_client = webapp.app.test_client() user = User() username = '******' password = '******' user.login(username,password) result = test_client.post('/login/',data={ 'username':username, 'password':password },follow_redirects=True) result = test_client.get('/settings/',follow_redirects=True) assert user.user.auth_token in result.data # create an update call, then check data # remember to reauthenticate password = '******' result = test_client.post('/settings/',data={ 'password':password, 'confirm':password },follow_redirects=True) user = User() user.login(username,password) assert user.is_authenticated() assert user.user.auth_token in result.data
def register(): if request.method == "GET": return render_template('register.html') if request.method == "POST": username = request.form.get('username') password = request.form.get("password") if not all([username, password]): return render_template('register.html') # 保存注册信息 user = User() user.username = username user.password = password db.session.add(user) db.session.commit() return render_template('login.html')
def deactivate(): user = User.query().filter(User.email == request.form['email']).get() if user: user.active = False user.put() return '', 204 return '', 404
def on_identity_loaded(sender, identity): user_json = session['barzinga_user'] user = User.query().filter(User.email == user_json["email"]).get() if user: identity.user = user.key.id() if user.admin: identity.provides.add(RoleNeed('admin'))
def index(_write_tmpl, name=None): url = router.to_path(index) users = User.query_all().fetch() if name: cmds = log_facade.save_user_log(name)+facade.save_user(name) user=cmds.execute().result if not cmds.errors: users.insert(0, user) values = {'form_url': url, 'users': users} _write_tmpl('templates/form.html', values)
def add(): user_logged = session['barzinga_user'] user_operator = User.query().filter( User.email == user_logged['email']).get() user_email = request.form['user'] value = float(request.form['value']) user_email = user_email.split('@')[0] + '@dextra-sw.com' userClient = User.query().filter(User.email == user_email).get() if userClient: userClient.credit(value=value) userClient.put() credit = Credit(user_email=user_email, value=value, operator=user_operator.email) credit.put() return 'Barzingas creditados', 204 else: return 'Usuario invalido', 406
def new(cls, **kwargs): p = super(Project, cls).new(**kwargs) if p.status == cls._status_open: for u in User.find(status=User._status_ok): Auth.new( project_id=p.id, project_name=p.name, user_id=u.id, user_name=u.name ) return p
def put_rfid(): user = User.query().filter(User.email == request.form['email']).get() rfid = request.form['rfid'] name = request.form['name'] if user: user.rfid = rfid user.name = name user.put() return '', 204 return '', 404
def put_pin(): user_json = session['barzinga_user'] user = User.query().filter(User.email == user_json["email"]).get() pin = request.form['pin'] if user: user.pin = pin user.put() return '', 204
def allCredits(): users = User.query().fetch() usersJson = 'email,valor \n' for u in users: usersJson += str(u.email) + ',' + str( "%.2f" % round(u.money, 2)) + ' \n' make_blob_public(usersJson) return json.dumps(usersJson)
def add(): name = request.form['name'] email = request.form['email'] rfid = request.form['rfid'] user = User(name=name, email=email, admin=False, photo_url='', money=0, rfid=rfid) user.put() user_document = search.Document(fields=[ search.TextField(name='name', value=user.name), search.TextField(name='email', value=user.email) ]) search.Index(name='user').put(user_document) return '', 204
def test_insert(): user = User() user.login('test_user','test_pass') api_key = user.user.auth_token client = webapp.app.test_client() data = {'a':1} project = Project() project.find('scraped') entry_id = project.find_entry('entry') url = '/api/db/%s/%s/?api_key=%s' % (project.project.id,entry_id,api_key) response = client.post(url,data=json.dumps(data), content_type='application/json') status = json.loads(response.data) assert status['status'] mongo = MongoModel(project='scraped',collection='entry') check = mongo.all() assert check[0]['a'] == 1 mongo.delete(check[0])
def test_user_settings_email(): test_client = webapp.app.test_client() user = User() username = '******' password = '******' user.login(username,password) result = test_client.post('/login/',data={ 'username':username, 'password':password },follow_redirects=True) result = test_client.get('/settings/',follow_redirects=True) assert user.user.email in result.data # create an update call, then check data # remember to reauthenticate result = test_client.post('/settings/',data={ 'email':'*****@*****.**' },follow_redirects=True) user = User() user.login(username,password) assert user.user.email == '*****@*****.**' db = MongoModel(project=user.project,collection=user.collection) db.delete({'_id':user.user.id})
def get(self): parser = reqparse.RequestParser() parser.add_argument('email', required=True, type=str) parser.add_argument('password', required=True, type=str) args = parser.parse_args() email = args.get("email") password = args.get("password") user = User.get_user_by_email(email) if user.check_password(password): login_user(user) return 200 abort(401)
def test_delete(): user = User() user.login('test_user','test_pass') api_key = user.user.auth_token mongo = MongoModel(project='scraped',collection='entry') client = webapp.app.test_client() mongo.insert({'a':1}) data = mongo.query({'a':1}) id = str(data['_id']) project = Project() project.find('scraped') entry_id = project.find_entry('entry') url = '/api/db/%s/%s/%s/?api_key=%s' % (project.project.id,entry_id,id,api_key) response = client.delete(url) status = json.loads(response.data) assert status['status'] check = mongo.query({'_id':objectid.ObjectId(id)}) assert not check
def get_by_rfid(rfid): user = User.query().filter(User.rfid == rfid).get() if user: user_json = { 'name': user.name, 'email': user.email, 'money': user.money, 'photo_url': user.photo_url, 'id': user.key.id() } return json.dumps(user_json) return '', 404
def post(self, *args, **kwargs): tid = kwargs.get('tid') if not tid: raise HTTPError(404) task = Task.get(id=tid) form = CommentForm(self.request.arguments) # set form data form.from_user_id.data = self.user.id form.from_user_name.data = self.user.name form.to_user_id.data = task.creator_id form.to_user_name.data = task.creator_name form.task_id.data = task.id form.task_title.data = task.title # 分析content 识别链接, 识别@ # 链接 <a>url</a> content, at_users = analyse_content(form.content.data) print '****************content: ', repr(content) form.type.data = Comment._type_at if at_users else Comment._type_reply form.content.data = content if form.validate(): comment = Comment.new(**form.data) # 评论消息 自己回复自己或者自己@自己不发消息 if int(self.user.id) != int(task.creator_id): Message.set( user_id=task.creator_id, from_user=self.user, task=task, pid=self.pid, pname=self.auth.project_name, type='apply', content=content, ) # @消息 for name in at_users: user = User.get(name=name, status=User._status_ok) if user and user.id != int(self.user.id): Message.set( user_id=user.id, from_user=self.user, task=task, pid=self.pid, pname=self.auth.project_name, type='@', content=content, ) return self.redirect('/%s/task/%s' % (self.pid, task.id)) else: return self.render('comment.html', errors=form.errors, auth=self.auth, task=task)
def get(self,project_id): if project_id: project = Project() project.get(project_id) data = project.project.to_mongo() else: data = {} project = ProjectList() all_project = [] for p in project.all(): all_project.append(p.project.to_mongo()) data['all'] = all_project if request.args.get('api_key'): user = User() user.api_login(request.args.get('api_key')) user_project = user.user.project data['user'] = self.get_project(user_project) data = json.dumps(data,default=bson.json_util.default) resp = Response(data,status=200,mimetype='application/json') resp.headers['Link'] = 'http://localhost:5000' return resp