Merge pull request #307 from eReuse/feature/3530-download-snapshots
Feature/3530 download snapshots
This commit is contained in:
commit
97d0dd1411
|
@ -9,6 +9,7 @@ ml).
|
||||||
|
|
||||||
## testing
|
## testing
|
||||||
- [add] #305 add button download iso Workbench.
|
- [add] #305 add button download iso Workbench.
|
||||||
|
- [add] #306 add link for download json snapshot
|
||||||
- [changed] #302 add system uuid for check the identity of one device.
|
- [changed] #302 add system uuid for check the identity of one device.
|
||||||
|
|
||||||
## [2.2.0] - 2022-06-24
|
## [2.2.0] - 2022-06-24
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
import csv
|
import csv
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
from distutils.util import strtobool
|
from distutils.util import strtobool
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
import flask
|
import flask
|
||||||
import flask_weasyprint
|
import flask_weasyprint
|
||||||
from flask import Blueprint, g, make_response, request, url_for
|
from flask import Blueprint
|
||||||
|
from flask import current_app as app
|
||||||
|
from flask import g, make_response, request, url_for
|
||||||
from flask.views import View
|
from flask.views import View
|
||||||
from flask_login import current_user, login_required
|
from flask_login import current_user, login_required
|
||||||
from werkzeug.exceptions import NotFound
|
from werkzeug.exceptions import NotFound
|
||||||
|
@ -479,6 +483,7 @@ class ExportsView(View):
|
||||||
'certificates': self.erasure,
|
'certificates': self.erasure,
|
||||||
'lots': self.lots_export,
|
'lots': self.lots_export,
|
||||||
'devices_lots': self.devices_lots_export,
|
'devices_lots': self.devices_lots_export,
|
||||||
|
'snapshot': self.snapshot,
|
||||||
}
|
}
|
||||||
|
|
||||||
if export_id not in export_ids:
|
if export_id not in export_ids:
|
||||||
|
@ -685,6 +690,33 @@ class ExportsView(View):
|
||||||
data, "Devices_Incoming_and_Outgoing_Lots_Spreadsheet.csv"
|
data, "Devices_Incoming_and_Outgoing_Lots_Spreadsheet.csv"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def snapshot(self):
|
||||||
|
uuid = request.args.get('id')
|
||||||
|
if not uuid:
|
||||||
|
messages.error('Snapshot not exist!')
|
||||||
|
return flask.redirect(request.referrer)
|
||||||
|
|
||||||
|
user = g.user.email
|
||||||
|
name_file = f"*_{user}_{uuid}.json"
|
||||||
|
tmp_snapshots = app.config['TMP_SNAPSHOTS']
|
||||||
|
path_dir_base = os.path.join(tmp_snapshots, user)
|
||||||
|
|
||||||
|
for _file in Path(path_dir_base).glob(name_file):
|
||||||
|
with open(_file) as file_snapshot:
|
||||||
|
snapshot = file_snapshot.read()
|
||||||
|
data = StringIO()
|
||||||
|
data.write(snapshot)
|
||||||
|
bfile = data.getvalue().encode('utf-8')
|
||||||
|
output = make_response(bfile)
|
||||||
|
output.headers['Content-Disposition'] = 'attachment; filename={}'.format(
|
||||||
|
name_file
|
||||||
|
)
|
||||||
|
output.headers['Content-type'] = 'text/json'
|
||||||
|
return output
|
||||||
|
|
||||||
|
messages.error('Snapshot not exist!')
|
||||||
|
return flask.redirect(request.referrer)
|
||||||
|
|
||||||
|
|
||||||
class SnapshotListView(GenericMixin):
|
class SnapshotListView(GenericMixin):
|
||||||
template_name = 'inventory/snapshots_list.html'
|
template_name = 'inventory/snapshots_list.html'
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
<th scope="col">System UUID</th>
|
<th scope="col">System UUID</th>
|
||||||
<th scope="col">Status</th>
|
<th scope="col">Status</th>
|
||||||
<th scope="col" data-type="date" data-format="DD-MM-YYYY">Time</th>
|
<th scope="col" data-type="date" data-format="DD-MM-YYYY">Time</th>
|
||||||
|
<th scope="col"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -68,6 +69,13 @@
|
||||||
{{ snap.status }}
|
{{ snap.status }}
|
||||||
</td>
|
</td>
|
||||||
<td>{{ snap.created.strftime('%H:%M %d-%m-%Y') }}</td>
|
<td>{{ snap.created.strftime('%H:%M %d-%m-%Y') }}</td>
|
||||||
|
<td>
|
||||||
|
{% if snap.snapshot_uuid %}
|
||||||
|
<a href="{{ url_for('inventory.export', export_id='snapshot') }}?id={{ snap.snapshot_uuid }}" target="_blank">
|
||||||
|
<i class="bi bi-box-arrow-up-right"></i>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -1385,3 +1385,18 @@ def test_export_lots(user3: UserClientFlask):
|
||||||
assert fixture_csv[0] == export_csv[0], 'Headers are not equal'
|
assert fixture_csv[0] == export_csv[0], 'Headers are not equal'
|
||||||
assert fixture_csv[1][1:] == export_csv[1][1:], 'Computer information are not equal'
|
assert fixture_csv[1][1:] == export_csv[1][1:], 'Computer information are not equal'
|
||||||
UUID(export_csv[1][0])
|
UUID(export_csv[1][0])
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.mvp
|
||||||
|
@pytest.mark.usefixtures(conftest.app_context.__name__)
|
||||||
|
def test_export_snapshot_json(user3: UserClientFlask):
|
||||||
|
file_name = 'real-eee-1001pxd.snapshot.12.json'
|
||||||
|
snap = create_device(user3, file_name)
|
||||||
|
|
||||||
|
snapshot = conftest.yaml2json(file_name.split(".json")[0])
|
||||||
|
snapshot = json.dumps(snapshot)
|
||||||
|
|
||||||
|
uri = "/inventory/export/snapshot/?id={}".format(snap.uuid)
|
||||||
|
body, status = user3.get(uri)
|
||||||
|
assert status == '200 OK'
|
||||||
|
assert body == snapshot
|
||||||
|
|
Reference in a new issue