コード例 #1
0
ファイル: test_types.py プロジェクト: src-r-r/onebase_api
 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))
コード例 #2
0
ファイル: node.py プロジェクト: src-r-r/onebase_web
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']))
コード例 #3
0
ファイル: test_types.py プロジェクト: src-r-r/onebase_api
 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')
コード例 #4
0
ファイル: test_types.py プロジェクト: src-r-r/onebase_api
 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)
コード例 #5
0
ファイル: test_types.py プロジェクト: src-r-r/onebase_api
 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)
コード例 #6
0
ファイル: node.py プロジェクト: src-r-r/onebase_web
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))
コード例 #7
0
ファイル: test_types.py プロジェクト: src-r-r/onebase_api
 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)
コード例 #8
0
    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
コード例 #9
0
def render_slot(slot_id):
    slot = Slot.objects(id=slot_id).first()
    return slot.respond(**request.args)
コード例 #10
0
def get_attrs(slot_id):
    slot = Slot.objects(id=slot_id).first()
    return ApiResponse(data=slot.get_attrs(**request.args))