def test_sa_session_nested(self): err = None try: with ptah.sa_session() as sa: with ptah.sa_session() as sa: pass except Exception as e: err = e self.assertIsNotNone(err)
def msg_load(self, data): with ptah.sa_session() as sa: data = [] for todo in sa.query(Todo).all(): data.append(self.get_info(todo)) self.send('list', {'tasks':sorted(data,key=lambda i:i['created'])})
def __call__(self): self.tinfo = ptah.resolve(self.params['turi']) with ptah.sa_session() as sa: self.session = sa self.context = ptah.resolve(self.params['uri']) return super(EditRecord, self).__call__()
def test_uri_resolver(self): import ptah import sqlalchemy as sqla @ptah.type('mycontent', 'MyContent') class MyContentSql(ptah.get_base()): __tablename__ = 'tinfo_sql_test7' id = sqla.Column(sqla.Integer, primary_key=True) test = sqla.Column(sqla.Unicode) self.init_ptah() id = None uri = None with ptah.sa_session() as sa: item = MyContentSql(test='title') sa.add(item) sa.flush() id = item.id uri = item.__uri__ self.assertEqual(uri, 'mycontent:%s'%id) item = ptah.resolve(uri) self.assertTrue(item.id == id)
def modify_handler(self): data, errors = self.extract() if errors: return errors with ptah.sa_session() as sa: user = ptah.resolve(self.params['__uri__']) # update attrs user.name = data['name'] user.login = data['login'] user.email = data['login'] if data['password'] is not ptah.form.null: user.password = ptah.pwd_tool.encode(data['password']) # update props user.validated = data['validated'] user.suspended = data['suspended'] # add roles and groups info props = user.properties props['roles'] = data['roles'] props['groups'] = data['groups'] info = self.protocol.get_user_data(user) # done self.close('User properties has been updated.') self.protocol.broadcast('updated', info)
def msg_list(self, data): with ptah.sa_session() as sa: data = [] for f in sa.query(File).all(): data.append(self.get_info(f)) self.send('list', {'files':sorted(data,key=lambda i:i['created'])})
def msg_complete(self, data): with ptah.sa_session() as sa: todo = sa.query(Todo).filter(Todo.id==data['id']).first() if todo is not None: todo.completed = not todo.completed self.broadcast('completed', self.get_info(todo))
def msg_create(self, data): with ptah.sa_session() as sa: todo = Todo(text=data['text'], creator=self.user_name) sa.add(todo) sa.flush() self.broadcast('added', self.get_info(todo))
def modify_handler(self): data, errors = self.extract() if errors: self.errors = errors return with ptah.sa_session(): self.context.updatedb(**data) self.close("Settings have been modified.") self.protocol.broadcast( 'updated', self.protocol.get_info(self.context.__name__))
def update(self): # load user with ptah.sa_session() as sa: uri = self.params['__uri__'] user = ptah.resolve(uri) if user is None: raise ValueError("User unknown") sa.expunge(user) self.context = user super(ModifyUserForm, self).update()
def update(self): # load user with ptah.sa_session() as sa: id = self.params['id'] gallery = sa.query(Gallery).filter(Gallery.id==id).first() self.sa = sa self.context = gallery self.content = {'title': gallery.name, 'description': gallery.description} return super(EditGallery, self).update()
def msg_upload(self, data): if isinstance(data['data'], unicode): data['data'] = data['data'].encode('latin1') with ptah.sa_session() as sa: file = File(filename=data['filename'], mimetype=data['mimetype'], size=len(data['data']), data=data['data']) sa.add(file) sa.flush() self.broadcast('added', self.get_info(file))
def update(self): # load user with ptah.sa_session() as sa: id = self.params['id'] gallery = sa.query(Gallery).filter(Gallery.id == id).first() self.sa = sa self.context = gallery self.content = { 'title': gallery.name, 'description': gallery.description } return super(EditGallery, self).update()
def msg_upload(self, data): if isinstance(data['data'], unicode): data['data'] = data['data'].encode('latin1') with ptah.sa_session() as sa: p = Photo(gallery = data['id'], name = data['filename'], filename = data['filename'], size = len(data['data']), mimetype = data['mimetype'], data = data['data']) sa.add(p) sa.flush() self.send('gallery', self.list_gallery(data['id'], sa))
def on_submit(self): data, errors = self.extract() if errors: return errors with ptah.sa_session() as sa: gallery = Gallery(user = self.protocol.user_id, name = data['title'], description = data['description']) sa.add(gallery) sa.flush() self.close() self.protocol.send('galleries', self.protocol.get_galleries(sa))
def msg_upload(self, data): if isinstance(data['data'], unicode): data['data'] = data['data'].encode('latin1') with ptah.sa_session() as sa: p = Photo(gallery=data['id'], name=data['filename'], filename=data['filename'], size=len(data['data']), mimetype=data['mimetype'], data=data['data']) sa.add(p) sa.flush() self.send('gallery', self.list_gallery(data['id'], sa))
def on_submit(self): data, errors = self.extract() if errors: return errors with ptah.sa_session() as sa: gallery = Gallery(user=self.protocol.user_id, name=data['title'], description=data['description']) sa.add(gallery) sa.flush() self.close() self.protocol.send('galleries', self.protocol.get_galleries(sa))
def modify_handler(self): data, errors = self.extract() if errors: return errors with ptah.sa_session() as sa: tinfo = ptah.resolve(self.params['turi']) instance = tinfo.create(**data) sa.add(instance) uri = instance.__uri__ self.close("Record has been created.") self.protocol.broadcast('added', {'uri': uri})
def msg_remove_users(self, data): users = [uri for uri in data if uri != self.user_id] if not users: return # remove users with ptah.sa_session() as sa: for uri in users: user = sa.query(ptahcrowd.CrowdUser) \ .filter(ptahcrowd.CrowdUser.__uri__ == uri).first() if user is not None: sa.delete(user) # notify client self.broadcast('removed', data)
def msg_suspend_users(self, data): users = [uri for uri in data if uri != self.user_id] if not users: return # suspend users with ptah.sa_session() as sa: for user in sa.query(ptahcrowd.CrowdUser)\ .filter(ptahcrowd.CrowdUser.__uri__.in_(users)): user.suspended = True sa.add(user) self.broadcast('updated', self.get_user_data(user)) self.send( 'message', {'message': "Selected accounts have been suspended."})
def download(request): id = request.matchdict['id'] with ptah.sa_session() as sa: f = sa.query(Photo).filter(Photo.id == id).first() if f is None: return HTTPNotFound() response = request.response headers = {'Content-Type': f.mimetype.encode('utf-8')} if f.filename: headers['Content-Disposition'] = \ bytes_('filename="{0}"'.format(f.filename), 'utf-8') response.headers = headers response.body = f.data return response
def download(request): id = request.matchdict['id'] with ptah.sa_session() as sa: f = sa.query(File).filter(File.id == id).first() if f is None: return HTTPNotFound() response = request.response headers = {'Content-Type': f.mimetype.encode('utf-8')} if f.filename: headers['Content-Disposition'] = \ bytes_('filename="{0}"'.format(f.filename), 'utf-8') response.headers = headers response.body = f.data return response
def msg_list_model(self, data): uri = data['uri'] ti = ptah.resolve(uri) fields = [{'name':'id', 'title': 'Id'}] for name in ti.fieldset: fields.append({'name': name, 'title': ti.fieldset[name].title}) info = { 'uri': ti.__uri__, 'name': ti.name, 'description': ti.description, 'fields': fields} self.send('load_model', info) with ptah.sa_session() as sa: result = {'size': sa.query(ti.cls).count(), 'page': self.page(sa, ti, 0, 5)} self.send('page', result)
def on_submit(self): data, errors = self.extract() if errors: return errors with ptah.sa_session() as sa: # create user user = ptahcrowd.CrowdUser.__type__.create( name=data['name'], login=data['login'], email=data['login'], suspended = data['suspended'], validated = True, password=ptah.pwd_tool.encode(data['password'])) user = ptahcrowd.CrowdUser.__type__.add(user) # additional props props = user.properties props['roles'] = data['roles'] self.request.registry.notify(ptah.events.PrincipalAddedEvent(user)) # done self.close("User has been created.") self.protocol.broadcast('added', self.protocol.get_user_data(user))
def msg_list(self, data): if self.user_id is not None: with ptah.sa_session() as sa: self.send('galleries', self.get_galleries(sa))
def msg_removephoto(self, data): with ptah.sa_session() as sa: sa.query(Photo).filter(Photo.id == data['id']).delete() sa.flush() self.send('gallery', self.list_gallery(data['id'], sa))
def msg_gallery(self, data): with ptah.sa_session() as sa: self.send('gallery', self.list_gallery(data['id'], sa))
def test_sa_session(self): with ptah.sa_session() as sa: self.assertIs(sa, ptah.get_session())
def facebook_process(request): """Process the facebook redirect""" print request.GET # get session st = request.GET.get('state').split(',')[-1] manager = ptah.sockjs.get_session_manager(request.registry) try: session = manager.get(st) except: raise HTTPBadRequest("No session") code = request.GET.get('code') if not code: raise HTTPBadRequest("No reason") # auth cfg = ptah.get_settings(CFG_ID_AUTH, request.registry) client_id = cfg['facebook_id'] client_secret = cfg['facebook_secret'] # Now retrieve the access token with the code access_url = '{0}?{1}'.format( 'https://graph.facebook.com/oauth/access_token', url_encode({'client_id': client_id, 'client_secret': client_secret, 'redirect_uri': request.route_url('facebook_process'), 'code': code})) r = requests.get(access_url) if r.status_code != 200: raise HTTPBadRequest("Status %s: %s" % (r.status_code, r.content)) access_token = urlparse.parse_qs(r.content)['access_token'][0] with ptah.sa_session() as sa: user = User.get_bytoken(access_token) if user is not None: protocol = session.protocols.get('gallery') protocol.auth(user) response = request.response response.content_type = 'text/html' response.body = close return response # Retrieve profile data graph_url = '{0}?{1}'.format('https://graph.facebook.com/me', url_encode({'access_token': access_token})) r = requests.get(graph_url) if r.status_code != 200: raise HTTPBadRequest("Status %s: %s" % (r.status_code, r.content)) profile = ptah.json.loads(r.content) id = profile['id'] name = profile['name'] email = profile.get('email','').lower() with ptah.sa_session() as sa: sa.query(User).filter(User.email == email).delete() user = User( token = access_token, source = 'facebook', name = name, email = email) sa.add(user) sa.flush() protocol = session.protocols.get('gallery') protocol.auth(user) response = request.response response.content_type = 'text/html' response.body = close return response
def msg_remove(self, data): with ptah.sa_session() as sa: sa.query(File).filter(File.id == data['id']).delete() self.broadcast('removed', {'id': data['id']})
def msg_removegallery(self, data): if self.user_id is not None: with ptah.sa_session() as sa: sa.query(Gallery).filter(Gallery.id == data['id']).delete() self.send('galleries', self.get_galleries(sa))
def msg_load_page(self, data): uri = data['uri'] ti = ptah.get_types()[uri] with ptah.sa_session() as sa: self.send('page', {'page': self.page(sa, ti, 0, 5)})
def facebook_process(request): """Process the facebook redirect""" print request.GET # get session st = request.GET.get('state').split(',')[-1] manager = ptah.sockjs.get_session_manager(request.registry) try: session = manager.get(st) except: raise HTTPBadRequest("No session") code = request.GET.get('code') if not code: raise HTTPBadRequest("No reason") # auth cfg = ptah.get_settings(CFG_ID_AUTH, request.registry) client_id = cfg['facebook_id'] client_secret = cfg['facebook_secret'] # Now retrieve the access token with the code access_url = '{0}?{1}'.format( 'https://graph.facebook.com/oauth/access_token', url_encode({ 'client_id': client_id, 'client_secret': client_secret, 'redirect_uri': request.route_url('facebook_process'), 'code': code })) r = requests.get(access_url) if r.status_code != 200: raise HTTPBadRequest("Status %s: %s" % (r.status_code, r.content)) access_token = urlparse.parse_qs(r.content)['access_token'][0] with ptah.sa_session() as sa: user = User.get_bytoken(access_token) if user is not None: protocol = session.protocols.get('gallery') protocol.auth(user) response = request.response response.content_type = 'text/html' response.body = close return response # Retrieve profile data graph_url = '{0}?{1}'.format('https://graph.facebook.com/me', url_encode({'access_token': access_token})) r = requests.get(graph_url) if r.status_code != 200: raise HTTPBadRequest("Status %s: %s" % (r.status_code, r.content)) profile = ptah.json.loads(r.content) id = profile['id'] name = profile['name'] email = profile.get('email', '').lower() with ptah.sa_session() as sa: sa.query(User).filter(User.email == email).delete() user = User(token=access_token, source='facebook', name=name, email=email) sa.add(user) sa.flush() protocol = session.protocols.get('gallery') protocol.auth(user) response = request.response response.content_type = 'text/html' response.body = close return response
def msg_init(self, data): with ptah.sa_session() as sa: users = [(user.name, self.get_user_data(user)) for user in sa.query(ptahcrowd.CrowdUser).all()] self.send('list', {'users': [u for _n,u in sorted(users)]})