diff --git a/device/templates/details.html b/device/templates/details.html
index d0e9c02..593d549 100644
--- a/device/templates/details.html
+++ b/device/templates/details.html
@@ -55,8 +55,7 @@
{{ k }}
diff --git a/evidence/forms.py b/evidence/forms.py
index dab7a60..005a2c0 100644
--- a/evidence/forms.py
+++ b/evidence/forms.py
@@ -35,10 +35,14 @@ class UploadForm(forms.Form):
).first()
if exist_annotation:
- raise ValidationError("error: {} exist".format(file_name))
+ raise ValidationError("Error: {} already exists".format(file_name))
- except Exception:
- raise ValidationError("error in: {}".format(file_name))
+ except json.JSONDecodeError:
+ raise ValidationError("Error in parsing JSON: '{}'. Check for file integrity.".format(file_name))
+ except ValidationError as e:
+ raise e
+ except Exception as e:
+ raise ValidationError("Oops! Something went wrong in '{}': {}".format(file_name, str(e)))
self.evidences.append((file_name, file_json))
diff --git a/evidence/management/commands/up_snapshots.py b/evidence/management/commands/up_snapshots.py
index 3cb12fa..f2dbb22 100644
--- a/evidence/management/commands/up_snapshots.py
+++ b/evidence/management/commands/up_snapshots.py
@@ -1,12 +1,18 @@
-
import os
import json
+import logging
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
+from django.conf import settings
+
+from utils.save_snapshots import move_json, save_in_disk
from evidence.parse import Build
+logger = logging.getLogger('django')
+
+
User = get_user_model()
@@ -31,9 +37,11 @@ class Command(BaseCommand):
elif os.path.isdir(path):
self.read_directory(path)
+ else:
+ raise ValueError(f"The path {path} is neither a file nor a directory")
self.parsing()
-
+
def read_directory(self, directory):
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
@@ -41,10 +49,27 @@ class Command(BaseCommand):
self.open(filepath)
def open(self, filepath):
- with open(filepath, 'r') as file:
- content = json.loads(file.read())
- self.snapshots.append(content)
-
+ try:
+ with open(filepath, 'r') as file:
+ content = json.loads(file.read())
+ path_name = save_in_disk(content, self.user.institution.name)
+
+ self.snapshots.append((content, path_name))
+ except json.JSONDecodeError as e:
+ raise e
+ #or we cath'em all
+ except Exception:
+ raise Exception(f"Oops! Something went wrong there")
+
+
def parsing(self):
- for s in self.snapshots:
- self.devices.append(Build(s, self.user))
+ for s, p in self.snapshots:
+ try:
+ self.devices.append(Build(s, self.user))
+ move_json(p, self.user.institution.name)
+ except Exception as err:
+ if settings.DEBUG:
+ logger.exception("%s", err)
+ snapshot_id = s.get("uuid", "")
+ txt = "It is not possible to parse snapshot: %s"
+ logger.error(txt, snapshot_id)
diff --git a/evidence/parse.py b/evidence/parse.py
index 944dbd3..8848265 100644
--- a/evidence/parse.py
+++ b/evidence/parse.py
@@ -5,23 +5,15 @@ import logging
from dmidecode import DMIParse
from json_repair import repair_json
+from evidence.parse_details import get_lshw_child
from evidence.models import Annotation
from evidence.xapian import index
from utils.constants import CHASSIS_DH
-logger = logging.getLogger('django')
-
-
-def get_network_cards(child, nets):
- if child['id'] == 'network' and "PCI:" in child.get("businfo"):
- nets.append(child)
- if child.get('children'):
- [get_network_cards(x, nets) for x in child['children']]
-
+logger = logging.getLogger(__name__)
def get_mac(lshw):
- nets = []
try:
if type(lshw) is dict:
hw = lshw
@@ -30,19 +22,17 @@ def get_mac(lshw):
except json.decoder.JSONDecodeError:
hw = json.loads(repair_json(lshw))
- try:
- get_network_cards(hw, nets)
- except Exception as ss:
- print("WARNING!! {}".format(ss))
- return
+ networks = []
+ get_lshw_child(hw, networks, 'network')
- nets_sorted = sorted(nets, key=lambda x: x['businfo'])
+ nets_sorted = sorted(networks, key=lambda x: x['businfo'])
# This funcion get the network card integrated in motherboard
# integrate = [x for x in nets if "pci@0000:00:" in x.get('businfo', '')]
if nets_sorted:
- return nets_sorted[0]['serial']
-
+ mac = nets_sorted[0]['serial']
+ logger.debug("The snapshot has the following MAC: %s" , mac)
+ return mac
class Build:
def __init__(self, evidence_json, user, check=False):