def test_render(self): key = Key(name=fake.word(), soft_type='INTEGER', size=1024) key.save(self.user) slot = Slot(key=key, value=fake.pyint()) slot.save(self.user) resp = slot.render() self.assertEqual(resp, str(slot.value))
def drop_slot(): path = request.args['path'] row_nums = [int(i) for i in request.args['rows'].split(",")] node = Path.find(path).node rows = [] e = { 'return_mimetype': 'application/html', 'static_url': common_settings.CONFIG['static'][common_settings.ONEBASE_MODE], } to_delete = [] for row_num in row_nums: row = [] for key in node.get_keys(): slot = Slot.objects(key=key, row=row_num).first() to_delete.append(slot) row.append(slot.get_repr(environment=e)) rows.append(row) if request.method == 'GET': return render_template('drop.html', rows=rows) elif request.method == 'POST' and 'YES' in request.form: for s in to_delete: Slot.objects(id=s.id).delete() return redirect(url_for('node.view_node', path=request.args['path']))
def test_get_attrs(self): key = Key(name=fake.word(), soft_type='INTEGER', size=1024) key.save(self.user) slot = Slot(key=key, value=fake.pyint()) slot.save(self.user) attrs = slot.get_attrs() self.assertEqual(attrs.get('type'), 'text/plain')
def test_prepare(self): """ Integer requires no preparation. """ key = Key(name=fake.word(), soft_type='INTEGER', size=1024) key.save(self.user) slot = Slot(key=key, value=fake.pyint()) slot.save(self.user) prepared = slot.prepare() self.assertEqual(int(prepared), slot.value)
def test_api_respond(self): """ API responds correctly. """ client = app.test_client() key = Key(name=fake.word(), soft_type='INTEGER', size=1024) key.save(self.user) slot = Slot(key=key, value=fake.pyint()) slot.save(self.user) resp = client.get('/slot/render/{}'.format(slot.id)) logger.debug('test_api_response body={}'.format(resp.data)) self.assertEqual(resp.data, str(slot.value)) self.assertEqual(resp.status_code, 200)
def update_slow_row(row): path = request.args['path'] node = Path.find(path).node if node is None: return abort(404) class DynSlotInsertForm(SlotInsertForm): pass for key in node.get_keys(): slot = Slot.objects(row=int(row), key=key.id).first() logger.debug('adding field {}'.format(key.name)) setattr(DynSlotInsertForm, key.name, StringField(default=slot.value)) DynSlotInsertForm.ext_keys.update({ key.name: key, }) form = DynSlotInsertForm(request.form) if request.method == 'POST': if form.validate(): form.submit(node=node, user=get_user(), update_row=row) return redirect(url_for('node.view_node', path=path)) return render_template('update.html', form=form, title='Insert into {}'.format(node.title))
def setUp(self): super(TestIntType, self).setUp() self.user = self.admin key = Key(name=fake.word(), soft_type='INTEGER', size=1024) key.save(self.user) self.valid_slots = ( Slot(key=key, value=fake.pyint()), Slot(key=key, value=str(0 - fake.pyint())), Slot(key=key, value='+' + str(fake.pyint())), ) for s in self.valid_slots: s.save(self.user) self.invalid_slots = ( Slot(key=key, value='123.456'), Slot(key=key, value={'dictionary': 1}), ) for s in self.invalid_slots: s.save(self.user)
def submit(self, node, user, update_row=None): """ Insert a record for the node. :param node: Node to which we're adding a slot. :param user: User doing the adding. :return: List of saved slots. """ _saved = [] row = node.row_count for (data_key, data_value) in self.data.items(): if data_key not in self.ext_keys: continue doc_key = self.ext_keys[data_key] # t = doc_key.soft_type.fetch() if update_row is not None: slot = Slot.objects(key=doc_key, row=update_row).first() slot.value = data_value slot.save() continue slot = Slot(key=doc_key, row=row, value=data_value) logger.debug("INSERT: saving {}".format(slot.to_json())) slot.save(user) _saved.append(slot) return _saved
def render_slot(slot_id): slot = Slot.objects(id=slot_id).first() return slot.respond(**request.args)
def get_attrs(slot_id): slot = Slot.objects(id=slot_id).first() return ApiResponse(data=slot.get_attrs(**request.args))