endoreg-db 0.3.7__py3-none-any.whl → 0.3.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of endoreg-db might be problematic. Click here for more details.

Files changed (29) hide show
  1. endoreg_db/data/__init__.py +4 -0
  2. endoreg_db/data/agl_service/data.yaml +9 -0
  3. endoreg_db/data/case_template/rule_value/.init +0 -0
  4. endoreg_db/data/distribution/multiple_categorical/.init +0 -0
  5. endoreg_db/data/distribution/numeric/.init +0 -0
  6. endoreg_db/data/log_type/data.yaml +57 -0
  7. endoreg_db/data/network_device/data.yaml +9 -3
  8. endoreg_db/management/commands/load_base_db_data.py +4 -0
  9. endoreg_db/management/commands/load_logging_data.py +39 -0
  10. endoreg_db/management/commands/load_network_data.py +11 -3
  11. endoreg_db/migrations/0068_networkdevicetype_networkdevicetypemanager_and_more.py +57 -0
  12. endoreg_db/migrations/0069_delete_networkdevicetypemanager_networkdevice_online.py +21 -0
  13. endoreg_db/migrations/0070_logtype_alter_rawpdffile_file_networkdevicelogentry_and_more.py +71 -0
  14. endoreg_db/migrations/0071_aglservicelogentry.py +33 -0
  15. endoreg_db/migrations/0072_alter_rawpdffile_file.py +20 -0
  16. endoreg_db/models/__init__.py +1 -0
  17. endoreg_db/models/logging/__init__.py +4 -0
  18. endoreg_db/models/logging/agl_service.py +15 -0
  19. endoreg_db/models/logging/base.py +22 -0
  20. endoreg_db/models/logging/log_type.py +23 -0
  21. endoreg_db/models/logging/network_device.py +16 -0
  22. endoreg_db/models/network/__init__.py +2 -1
  23. endoreg_db/models/network/agl_service.py +38 -0
  24. endoreg_db/models/network/network_device.py +27 -1
  25. endoreg_db/models/network/network_device_type.py +1 -1
  26. {endoreg_db-0.3.7.dist-info → endoreg_db-0.3.9.dist-info}/METADATA +3 -1
  27. {endoreg_db-0.3.7.dist-info → endoreg_db-0.3.9.dist-info}/RECORD +29 -12
  28. {endoreg_db-0.3.7.dist-info → endoreg_db-0.3.9.dist-info}/LICENSE +0 -0
  29. {endoreg_db-0.3.7.dist-info → endoreg_db-0.3.9.dist-info}/WHEEL +0 -0
@@ -55,6 +55,10 @@ CASE_TEMPLATE_RULE_VALUE_TYPE_DATA_DIR = CASE_TEMPLATE_BASE_DIR / "rule_value_ty
55
55
  # NETWORK
56
56
  NETWORK_DEVICE_DATA_DIR = DATA_DIR / "network_device"
57
57
  NETWORK_DEVICE_TYPE_DATA_DIR = DATA_DIR / "network_device_type"
58
+ AGL_SERVICE_DATA_DIR = DATA_DIR / "agl_service"
59
+
60
+ # LOGS
61
+ LOG_TYPE_DATA_DIR = DATA_DIR / "log_type"
58
62
 
59
63
  # To Do
60
64
  LAB_VALUE_DATA_DIR = DATA_DIR / "lab_value"
@@ -0,0 +1,9 @@
1
+ - model: endoreg_db.agl_service
2
+ fields:
3
+ name: "agl-home-django"
4
+ description: "AGL Home Django service"
5
+ devices: [
6
+ "agl-server-04",
7
+ ]
8
+ port: 9100
9
+ url: "https://home.endo-reg.net/"
File without changes
File without changes
@@ -0,0 +1,57 @@
1
+ - model: endoreg_db.log_type
2
+ fields:
3
+ name: 'service-alive'
4
+ description: 'Data log type'
5
+
6
+ - model: endoreg_db.log_type
7
+ fields:
8
+ name: 'service-error'
9
+ description: 'Data log type'
10
+
11
+ - model: endoreg_db.log_type
12
+ fields:
13
+ name: 'service-info'
14
+ description: 'Data log type'
15
+
16
+ - model: endoreg_db.log_type
17
+ fields:
18
+ name: 'service-warning'
19
+ description: 'Data log type'
20
+
21
+ - model: endoreg_db.log_type
22
+ fields:
23
+ name: 'service-status'
24
+ description: 'Data log type'
25
+
26
+ - model: endoreg_db.log_type
27
+ fields:
28
+ name: 'service-task'
29
+ description: 'Data log type'
30
+
31
+ - model: endoreg_db.log_type
32
+ fields:
33
+ name: 'device-alive'
34
+ description: 'Data log type'
35
+
36
+ - model: endoreg_db.log_type
37
+ fields:
38
+ name: 'device-error'
39
+ description: 'Data log type'
40
+
41
+ # device-status
42
+ - model: endoreg_db.log_type
43
+ fields:
44
+ name: 'device-status'
45
+ description: 'Data log type'
46
+
47
+ # device-task
48
+ - model: endoreg_db.log_type
49
+ fields:
50
+ name: 'device-task'
51
+ description: 'Data log type'
52
+
53
+ # device-info
54
+ - model: endoreg_db.log_type
55
+ fields:
56
+ name: 'device-info'
57
+ description: 'Data log type'
@@ -2,16 +2,22 @@
2
2
  fields:
3
3
  name: "agl-server-01"
4
4
  device_type: "agl-server"
5
- ip_address: "172.16.255.1"
5
+ ip: "172.16.255.1"
6
+
7
+ - model: endoreg_db.network_device
8
+ fields:
9
+ name: "agl-server-02"
10
+ device_type: "agl-server"
11
+ ip: "172.16.255.2"
6
12
 
7
13
  - model: endoreg_db.network_device
8
14
  fields:
9
15
  name: "agl-server-03"
10
16
  device_type: "agl-server"
11
- ip_address: "172.16.255.3"
17
+ ip: "172.16.255.3"
12
18
 
13
19
  - model: endoreg_db.network_device
14
20
  fields:
15
21
  name: "agl-server-04"
16
22
  device_type: "agl-server"
17
- ip_address: "172.16.255.4"
23
+ ip: "172.16.255.4"
@@ -20,6 +20,10 @@ class Command(BaseCommand):
20
20
  self.stdout.write(self.style.SUCCESS("Running load_network_data..."))
21
21
  call_command('load_network_data', verbose=verbose)
22
22
 
23
+ # Run the load_logging_data command
24
+ self.stdout.write(self.style.SUCCESS("Running load_logging_data..."))
25
+ call_command('load_logging_data', verbose=verbose)
26
+
23
27
  # Run the load_profession_data command
24
28
  self.stdout.write(self.style.SUCCESS("Running load_profession_data..."))
25
29
  call_command('load_profession_data', verbose=verbose)
@@ -0,0 +1,39 @@
1
+ from django.core.management.base import BaseCommand
2
+ from endoreg_db.models import LogType as MODEL_0
3
+ from ...utils import load_model_data_from_yaml
4
+ from ...data import LOG_TYPE_DATA_DIR as SOURCE_DIR
5
+
6
+ IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
7
+ MODEL_0.__name__,
8
+ ]
9
+
10
+ IMPORT_METADATA = {
11
+ MODEL_0.__name__: {
12
+ "dir": SOURCE_DIR, # e.g. "interventions"
13
+ "model": MODEL_0, # e.g. Intervention
14
+ "foreign_keys": [], # e.g. ["intervention_types"]
15
+ "foreign_key_models": [] # e.g. [InterventionType]
16
+ }
17
+ }
18
+
19
+ class Command(BaseCommand):
20
+ help = """Load all .yaml files in the data/intervention directory
21
+ into the Intervention and InterventionType model"""
22
+
23
+ def add_arguments(self, parser):
24
+ parser.add_argument(
25
+ '--verbose',
26
+ action='store_true',
27
+ help='Display verbose output',
28
+ )
29
+
30
+ def handle(self, *args, **options):
31
+ verbose = options['verbose']
32
+ for model_name in IMPORT_MODELS:
33
+ _metadata = IMPORT_METADATA[model_name]
34
+ load_model_data_from_yaml(
35
+ self,
36
+ model_name,
37
+ _metadata,
38
+ verbose
39
+ )
@@ -1,14 +1,16 @@
1
1
  from django.core.management.base import BaseCommand
2
- from endoreg_db.models import NetworkDevice, NetworkDeviceType
2
+ from endoreg_db.models import NetworkDevice, NetworkDeviceType, AglService
3
3
  from ...utils import load_model_data_from_yaml
4
- from ...data import NETWORK_DEVICE_DATA_DIR, NETWORK_DEVICE_TYPE_DATA_DIR
4
+ from ...data import NETWORK_DEVICE_DATA_DIR, NETWORK_DEVICE_TYPE_DATA_DIR, AGL_SERVICE_DATA_DIR
5
5
 
6
6
  MODEL_0 = NetworkDeviceType
7
7
  MODEL_1 = NetworkDevice
8
+ MODEL_2 = AglService
8
9
 
9
10
  IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
10
11
  MODEL_0.__name__,
11
- MODEL_1.__name__
12
+ MODEL_1.__name__,
13
+ MODEL_2.__name__,
12
14
  ]
13
15
 
14
16
  IMPORT_METADATA = {
@@ -23,6 +25,12 @@ IMPORT_METADATA = {
23
25
  "model": MODEL_1, # e.g. Intervention
24
26
  "foreign_keys": ["device_type"], # e.g. ["intervention_types"]
25
27
  "foreign_key_models": [NetworkDeviceType] # e.g. [InterventionType]
28
+ },
29
+ MODEL_2.__name__: {
30
+ "dir": AGL_SERVICE_DATA_DIR, # e.g. "interventions"
31
+ "model": MODEL_2, # e.g. Intervention
32
+ "foreign_keys": ["devices"], # e.g. ["intervention_types"]
33
+ "foreign_key_models": [NetworkDevice] # e.g. [InterventionType]
26
34
  }
27
35
  }
28
36
 
@@ -0,0 +1,57 @@
1
+ # Generated by Django 4.2.10 on 2024-08-10 12:39
2
+
3
+ import django.core.files.storage
4
+ import django.core.validators
5
+ from django.db import migrations, models
6
+ import django.db.models.deletion
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+
11
+ dependencies = [
12
+ ('endoreg_db', '0067_alter_medicationindication_indication_type'),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.CreateModel(
17
+ name='NetworkDeviceType',
18
+ fields=[
19
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20
+ ('name', models.CharField(max_length=255)),
21
+ ('description', models.CharField(max_length=255)),
22
+ ('created', models.DateTimeField(auto_now_add=True)),
23
+ ('updated', models.DateTimeField(auto_now=True)),
24
+ ],
25
+ options={
26
+ 'db_table': 'network_device_types',
27
+ 'ordering': ['name'],
28
+ },
29
+ ),
30
+ migrations.CreateModel(
31
+ name='NetworkDeviceTypeManager',
32
+ fields=[
33
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
34
+ ],
35
+ ),
36
+ migrations.AlterField(
37
+ model_name='rawpdffile',
38
+ name='file',
39
+ field=models.FileField(storage=django.core.files.storage.FileSystemStorage(location='/home/agl-admin/agl-home-django/endoreg_home/endoreg_home/erc_data/raw_pdf'), upload_to='raw_pdf/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])]),
40
+ ),
41
+ migrations.CreateModel(
42
+ name='NetworkDevice',
43
+ fields=[
44
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
45
+ ('name', models.CharField(max_length=255)),
46
+ ('ip', models.GenericIPAddressField(blank=True, null=True)),
47
+ ('description', models.CharField(max_length=255)),
48
+ ('created', models.DateTimeField(auto_now_add=True)),
49
+ ('updated', models.DateTimeField(auto_now=True)),
50
+ ('device_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.networkdevicetype')),
51
+ ],
52
+ options={
53
+ 'db_table': 'network_devices',
54
+ 'ordering': ['name'],
55
+ },
56
+ ),
57
+ ]
@@ -0,0 +1,21 @@
1
+ # Generated by Django 4.2.15 on 2024-08-10 16:31
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('endoreg_db', '0068_networkdevicetype_networkdevicetypemanager_and_more'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.DeleteModel(
14
+ name='NetworkDeviceTypeManager',
15
+ ),
16
+ migrations.AddField(
17
+ model_name='networkdevice',
18
+ name='online',
19
+ field=models.BooleanField(default=False),
20
+ ),
21
+ ]
@@ -0,0 +1,71 @@
1
+ # Generated by Django 4.2.15 on 2024-08-11 19:16
2
+
3
+ from django.conf import settings
4
+ import django.core.files.storage
5
+ import django.core.validators
6
+ from django.db import migrations, models
7
+ import django.db.models.deletion
8
+
9
+
10
+ class Migration(migrations.Migration):
11
+
12
+ dependencies = [
13
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14
+ ('endoreg_db', '0069_delete_networkdevicetypemanager_networkdevice_online'),
15
+ ]
16
+
17
+ operations = [
18
+ migrations.CreateModel(
19
+ name='LogType',
20
+ fields=[
21
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
22
+ ('name', models.CharField(max_length=255)),
23
+ ('description', models.CharField(max_length=255)),
24
+ ('created', models.DateTimeField(auto_now_add=True)),
25
+ ('updated', models.DateTimeField(auto_now=True)),
26
+ ],
27
+ options={
28
+ 'ordering': ['name'],
29
+ },
30
+ ),
31
+ migrations.AlterField(
32
+ model_name='rawpdffile',
33
+ name='file',
34
+ field=models.FileField(storage=django.core.files.storage.FileSystemStorage(location='/home/agl-admin/agl-monitor/agl_monitor/agl_monitor/erc_data/raw_pdf'), upload_to='raw_pdf/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])]),
35
+ ),
36
+ migrations.CreateModel(
37
+ name='NetworkDeviceLogEntry',
38
+ fields=[
39
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
40
+ ('timestamp', models.DateTimeField(auto_now_add=True)),
41
+ ('ip_address', models.GenericIPAddressField(blank=True, null=True)),
42
+ ('user_agent', models.CharField(blank=True, max_length=256, null=True)),
43
+ ('message', models.TextField()),
44
+ ('json_content', models.JSONField(blank=True, null=True)),
45
+ ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.networkdevice')),
46
+ ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
47
+ ],
48
+ options={
49
+ 'verbose_name': 'Network Device Log Entry',
50
+ 'verbose_name_plural': 'Network Device Log Entries',
51
+ },
52
+ ),
53
+ migrations.CreateModel(
54
+ name='AglService',
55
+ fields=[
56
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
57
+ ('name', models.CharField(max_length=255)),
58
+ ('description', models.CharField(max_length=255)),
59
+ ('online', models.BooleanField(default=False)),
60
+ ('created', models.DateTimeField(auto_now_add=True)),
61
+ ('updated', models.DateTimeField(auto_now=True)),
62
+ ('port', models.IntegerField(blank=True, null=True)),
63
+ ('protocol', models.CharField(blank=True, max_length=255, null=True)),
64
+ ('url', models.URLField(blank=True, null=True)),
65
+ ('devices', models.ManyToManyField(related_name='services', to='endoreg_db.networkdevice')),
66
+ ],
67
+ options={
68
+ 'ordering': ['name'],
69
+ },
70
+ ),
71
+ ]
@@ -0,0 +1,33 @@
1
+ # Generated by Django 4.2.15 on 2024-08-11 19:19
2
+
3
+ from django.conf import settings
4
+ from django.db import migrations, models
5
+ import django.db.models.deletion
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12
+ ('endoreg_db', '0070_logtype_alter_rawpdffile_file_networkdevicelogentry_and_more'),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.CreateModel(
17
+ name='AglServiceLogEntry',
18
+ fields=[
19
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20
+ ('timestamp', models.DateTimeField(auto_now_add=True)),
21
+ ('ip_address', models.GenericIPAddressField(blank=True, null=True)),
22
+ ('user_agent', models.CharField(blank=True, max_length=256, null=True)),
23
+ ('message', models.TextField()),
24
+ ('json_content', models.JSONField(blank=True, null=True)),
25
+ ('service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.aglservice')),
26
+ ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
27
+ ],
28
+ options={
29
+ 'verbose_name': 'AGL Service Log Entry',
30
+ 'verbose_name_plural': 'AGL Service Log Entries',
31
+ },
32
+ ),
33
+ ]
@@ -0,0 +1,20 @@
1
+ # Generated by Django 4.2.15 on 2024-08-11 19:52
2
+
3
+ import django.core.files.storage
4
+ import django.core.validators
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ('endoreg_db', '0071_aglservicelogentry'),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.AlterField(
16
+ model_name='rawpdffile',
17
+ name='file',
18
+ field=models.FileField(storage=django.core.files.storage.FileSystemStorage(location='/mnt/hdd-sensitive/Pseudo/import/pdf'), upload_to='raw_pdf/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])]),
19
+ ),
20
+ ]
@@ -5,6 +5,7 @@ from .report_reader import ReportReaderConfig, ReportReaderFlag
5
5
  from .emission import *
6
6
  from .persons import *
7
7
  from .network import *
8
+ from .logging import *
8
9
 
9
10
  from .case_template import *
10
11
  # from .other.distribution import (
@@ -0,0 +1,4 @@
1
+ from .base import AbstractLogEntry
2
+ from .network_device import NetworkDeviceLogEntry
3
+ from .log_type import LogType
4
+ from .agl_service import AglServiceLogEntry
@@ -0,0 +1,15 @@
1
+ from django.db import models
2
+ from .base import AbstractLogEntry
3
+
4
+ class AglServiceLogEntry(AbstractLogEntry):
5
+ """
6
+ Model for log entries related to AGL services.
7
+ """
8
+ service = models.ForeignKey("AglService", on_delete=models.CASCADE)
9
+
10
+ class Meta:
11
+ verbose_name = "AGL Service Log Entry"
12
+ verbose_name_plural = "AGL Service Log Entries"
13
+
14
+ def __str__(self):
15
+ return f"{self.timestamp} - {self.user} - {self.ip_address} - {self.service} - {self.message}"
@@ -0,0 +1,22 @@
1
+ # django model for logging, first define an abstract base model
2
+ from django.db import models
3
+ from django.conf import settings
4
+
5
+ class AbstractLogEntry(models.Model):
6
+ """
7
+ Abstract base model for log entries.
8
+ """
9
+
10
+ class Meta:
11
+ abstract = True
12
+
13
+ timestamp = models.DateTimeField(auto_now_add=True)
14
+ user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True)
15
+ ip_address = models.GenericIPAddressField(null=True, blank=True)
16
+ user_agent = models.CharField(max_length=256, null=True, blank=True)
17
+ message = models.TextField()
18
+ json_content = models.JSONField(null=True, blank=True)
19
+
20
+
21
+ def __str__(self):
22
+ return f"{self.timestamp} - {self.user} - {self.ip_address} - {self.message}"
@@ -0,0 +1,23 @@
1
+ from django.db import models
2
+
3
+ class LogTypeManager(models.Manager):
4
+ # Custom manager for LogType; defines name as natural key
5
+ def get_by_natural_key(self, name):
6
+ return self.get(name=name)
7
+
8
+
9
+ class LogType(models.Model):
10
+ name = models.CharField(max_length=255)
11
+ description = models.CharField(max_length=255)
12
+ created = models.DateTimeField(auto_now_add=True)
13
+ updated = models.DateTimeField(auto_now=True)
14
+ objects = LogTypeManager()
15
+
16
+ def __str__(self):
17
+ return self.name
18
+
19
+ class Meta:
20
+ ordering = ['name']
21
+
22
+ def natural_key(self):
23
+ return (self.name,)
@@ -0,0 +1,16 @@
1
+ from django.db import models
2
+ from .base import AbstractLogEntry
3
+
4
+ class NetworkDeviceLogEntry(AbstractLogEntry):
5
+ """
6
+ Model for log entries related to network devices.
7
+ """
8
+ device = models.ForeignKey("NetworkDevice", on_delete=models.CASCADE)
9
+
10
+ class Meta:
11
+ verbose_name = "Network Device Log Entry"
12
+ verbose_name_plural = "Network Device Log Entries"
13
+
14
+ def __str__(self):
15
+ return f"{self.timestamp} - {self.user} - {self.ip_address} - {self.device} - {self.message}"
16
+
@@ -1,2 +1,3 @@
1
1
  from .network_device import NetworkDevice
2
- from .network_device_type import NetworkDeviceType
2
+ from .network_device_type import NetworkDeviceType
3
+ from .agl_service import AglService
@@ -0,0 +1,38 @@
1
+ from django.db import models
2
+
3
+ class AglServiceManager(models.Manager):
4
+ # Custom manager for AglService; defines name as natural key
5
+ def get_by_natural_key(self, name):
6
+ return self.get(name=name)
7
+
8
+ class AglService(models.Model):
9
+ name = models.CharField(max_length=255)
10
+ description = models.CharField(max_length=255)
11
+ online = models.BooleanField(default=False)
12
+ created = models.DateTimeField(auto_now_add=True)
13
+ updated = models.DateTimeField(auto_now=True)
14
+ objects = AglServiceManager()
15
+ devices = models.ManyToManyField("NetworkDevice", related_name="services")
16
+ port = models.IntegerField(blank=True, null=True)
17
+ protocol = models.CharField(max_length=255, blank=True, null=True)
18
+ url = models.URLField(blank=True, null=True)
19
+
20
+ def alive_log(self, user, ip_address, user_agent):
21
+ from ..logging import AglServiceLogEntry
22
+ AglServiceLogEntry.objects.create(
23
+ user=user,
24
+ ip_address=ip_address,
25
+ user_agent=user_agent,
26
+ message=f"Service {self.name} is alive.",
27
+ service=self
28
+ )
29
+
30
+ def __str__(self):
31
+ return self.name
32
+
33
+ class Meta:
34
+ ordering = ['name']
35
+
36
+ def natural_key(self):
37
+ return (self.name,)
38
+
@@ -12,6 +12,7 @@ class NetworkDevice(models.Model):
12
12
  ip = models.GenericIPAddressField(blank=True, null=True)
13
13
  description = models.CharField(max_length=255)
14
14
  device_type = models.ForeignKey("NetworkDeviceType", on_delete=models.CASCADE)
15
+ online = models.BooleanField(default=False)
15
16
  created = models.DateTimeField(auto_now_add=True)
16
17
  updated = models.DateTimeField(auto_now=True)
17
18
  objects = NetworkDeviceManager()
@@ -24,4 +25,29 @@ class NetworkDevice(models.Model):
24
25
  ordering = ['name']
25
26
 
26
27
  def natural_key(self):
27
- return (self.name,)
28
+ return (self.name,)
29
+
30
+ def ping(self):
31
+ target_ip = self.ip
32
+
33
+ # Import the required module
34
+ import subprocess
35
+
36
+ # Define the command
37
+ command = ['ping', '-c', '1', target_ip]
38
+
39
+ # Run the command
40
+ process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
41
+
42
+ # Wait for the process to terminate
43
+ process.wait()
44
+
45
+ # Check the return code
46
+ return_code = process.returncode
47
+
48
+ # Return True if the return code is 0, False otherwise
49
+ self.online = return_code == 0
50
+ self.save()
51
+ return self.online
52
+
53
+
@@ -2,7 +2,7 @@
2
2
 
3
3
  from django.db import models
4
4
 
5
- class NetworkDeviceTypeManager(models.Model):
5
+ class NetworkDeviceTypeManager(models.Manager):
6
6
  # Custom manager for NetworkDeviceType; defines name as natural key
7
7
  def get_by_natural_key(self, name):
8
8
  return self.get(name=name)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: endoreg-db
3
- Version: 0.3.7
3
+ Version: 0.3.9
4
4
  Summary: EndoReg Db Django App
5
5
  License: GNU3
6
6
  Author: Thomas J. Lux
@@ -16,9 +16,11 @@ Requires-Dist: djangorestframework (>=3.14.0,<4.0.0)
16
16
  Requires-Dist: ffmpeg-python (>=0.2.0,<0.3.0)
17
17
  Requires-Dist: icecream (>=2.1.3,<3.0.0)
18
18
  Requires-Dist: opencv-python (>=4.9.0.80,<5.0.0.0)
19
+ Requires-Dist: pandas (>=2.2.2,<3.0.0)
19
20
  Requires-Dist: pillow (>=10.2.0,<11.0.0)
20
21
  Requires-Dist: pytesseract (>=0.3.10,<0.4.0)
21
22
  Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
23
+ Requires-Dist: scipy (>=1.14.0,<2.0.0)
22
24
  Requires-Dist: tqdm (>=4.66.2,<5.0.0)
23
25
  Description-Content-Type: text/markdown
24
26
 
@@ -1,8 +1,9 @@
1
1
  endoreg_db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  endoreg_db/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
3
3
  endoreg_db/apps.py,sha256=zYb2_RiEGIsLS6_OMWzCxcTHSNkF28CqF4xcd_6NHUg,151
4
- endoreg_db/data/__init__.py,sha256=OAsZAYQQOEpVIo9NCZJ9D8c0w1AhInBfPeCQ0lvVEoE,3122
4
+ endoreg_db/data/__init__.py,sha256=-6UJyklMfLgrqrs_dqGAkNoBPLGB5wmq2LcA0A4yRXw,3220
5
5
  endoreg_db/data/active_model/data.yaml,sha256=G7PvKmGDm_Gt6Tzf99s18b5vlE5qWruvClzlcINqDQE,86
6
+ endoreg_db/data/agl_service/data.yaml,sha256=HfuoV9MT-rWcwO5jhH2Y7nb8vr5VXE23akAHfz1tzUI,210
6
7
  endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml,sha256=H3kTALJ_6GJrY-4EYemeTCaa81NkyI-8LcNJFuEp5zs,4100
7
8
  endoreg_db/data/case_template/rule/01_patient-set-age.yaml,sha256=lXfgKtirkQMHfAQtp9y9mojNnYx2KskGvdK-C1GEmtc,281
8
9
  endoreg_db/data/case_template/rule/01_patient-set-gender.yaml,sha256=mZqygZ7lhjfSOO9M2m-ax1hmH2ztSXLsJwMEqJnj7e4,300
@@ -11,6 +12,7 @@ endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.
11
12
  endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml,sha256=QJ3fVapFhwf2N6InL7KFeANvZglf-NN3ozPOCZe2Oac,490
12
13
  endoreg_db/data/case_template/rule/19_create_patient.yaml,sha256=xo563JMa-S59v3DrMuLW9EbVlTbu4dZdBGFMLAYzeaY,436
13
14
  endoreg_db/data/case_template/rule_type/base_types.yaml,sha256=SOxV4SslNAx0DZoknWlKKLb3R1Ng2nlMDK2gfiVS_1M,1253
15
+ endoreg_db/data/case_template/rule_value/.init,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
16
  endoreg_db/data/case_template/rule_value_type/base_types.yaml,sha256=0flEVxBKOegNxJnc2EOhaf950BNxC7WujrLV2aPncYM,1414
15
17
  endoreg_db/data/case_template/template/base.yaml,sha256=lRrvLma0jW57qZEAuWWFQAtTWL8TaRpYiXFenlbTQJE,251
16
18
  endoreg_db/data/case_template/template_type/pre_endoscopy.yaml,sha256=pJdvcaxpZsciK3Ok4Z3yCVPBG465v4bISmq1Gmgn2mI,74
@@ -30,6 +32,8 @@ endoreg_db/data/disease_classification/coronary_vessel_disease.yaml,sha256=olKtH
30
32
  endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml,sha256=jgZVuHUp_ZGhvnl552-XgBZlFl2Uv_s1YNTgcGtW5do,1582
31
33
  endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml,sha256=Z_MG6bbx_zI4C8qV-U_Yqvn1K3KYbvG-ElFaXbYAMNQ,835
32
34
  endoreg_db/data/distribution/date/patient.yaml,sha256=I3fr98VNCja6a4qtf9YnjoFPlqH67LPbDlssQKY_cPE,210
35
+ endoreg_db/data/distribution/multiple_categorical/.init,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ endoreg_db/data/distribution/numeric/.init,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
37
  endoreg_db/data/distribution/single_categorical/patient.yaml,sha256=R7beZDRqdOWNaFu-8Bd88E6j3eBc9mqhOW_265EA0e0,156
34
38
  endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml,sha256=bBLmr3_uSLXdsbtRa9707WK1Z7Xy8TpBGKOfzWcfC_M,2968
35
39
  endoreg_db/data/endoscope_type/data.yaml,sha256=k8uF94svJsU02O-ceaLnQBoozJ6cT3iY_s_aKrvJZqg,242
@@ -57,6 +61,7 @@ endoreg_db/data/lab_value/renal_function.yaml,sha256=HS5oWQ_31mkahABKMvNjhmfspiQ
57
61
  endoreg_db/data/label/label/data.yaml,sha256=fwBiybtizA_hSGJWWCWNfKoHncy4s5ObxhKfjm9xEb8,1274
58
62
  endoreg_db/data/label/label-set/data.yaml,sha256=wpAxOPbpZzZWLM95yjoKXhhjMk6mOKcGQdoLtcDXCZ4,339
59
63
  endoreg_db/data/label/label-type/data.yaml,sha256=vffKYpTae_gu63_wza6LONs5ys4pna1EbrUUO6CafQs,136
64
+ endoreg_db/data/log_type/data.yaml,sha256=nZeua8KwnrVGupl-B74PjsUenANSmUwCVkEzdtrTGAQ,1126
60
65
  endoreg_db/data/material/material.yaml,sha256=GUY0l4DSm1OQtgExNbTMqAuUMPvUBlTvNWvrtJKhXiY,2035
61
66
  endoreg_db/data/medication/anticoagulation.yaml,sha256=NfAXuD9hQqHE2knWl51JGJnyjJvh_I1xRxaF8VS5-Us,1635
62
67
  endoreg_db/data/medication/tah.yaml,sha256=UDuY9tn9e8806KdZ3AL1LooGPdxqoPHNz6IX38yk-6g,1701
@@ -68,7 +73,7 @@ endoreg_db/data/medication_schedule/apixaban.yaml,sha256=TjmoBu4ian9ZwiSN5qBKtiv
68
73
  endoreg_db/data/medication_schedule/ass.yaml,sha256=ECiHbQcahbZP9B8IDOYRB6vHKj3yl7cBY9QasIHJ7sM,295
69
74
  endoreg_db/data/medication_schedule/enoxaparin.yaml,sha256=lI8WfFBspEXhTxnTEfyq1a_VBKbdNAcj34PIF2_X3cQ,653
70
75
  endoreg_db/data/model_type/data.yaml,sha256=vCMMo8wiI5uL2zrQROmgsHq1GrC8IdagGIgNdQunUeQ,149
71
- endoreg_db/data/network_device/data.yaml,sha256=dm1zxeDzBJ6JKrk9Si0_3ZvlH0U4He_A6-EBix2Yl1o,397
76
+ endoreg_db/data/network_device/data.yaml,sha256=Vg5H49ZrJn7l9qo4Lq2rOwzI6ly9RR3JPIkcN1cmNyE,498
72
77
  endoreg_db/data/network_device_type/data.yaml,sha256=a052EXWgo3m_8DrzJ4tYGUybc8qC6xdRCBgswiSK38M,152
73
78
  endoreg_db/data/patient_lab_sample_type/generic.yaml,sha256=nbtummOrGUeBkM7sVpqq48txkC-bmxn4_h40oS4VloY,162
74
79
  endoreg_db/data/pdf_type/data.yaml,sha256=0eMCb3-j2_zY0NkyIFFM7H9658kILpd5mt_OgrXxs64,990
@@ -109,7 +114,7 @@ endoreg_db/management/commands/import_legacy_images.py,sha256=IcBmihG9rvqC37XgMg
109
114
  endoreg_db/management/commands/import_legacy_videos.py,sha256=OHFTNb53RtznRyVay88vo83fkfafTiwTgUMieI70NX4,2732
110
115
  endoreg_db/management/commands/load_active_model_data.py,sha256=NpWIksrVQIyrd-ZhI_B_34NFbLJI1_vhwuN6gXc8hgQ,1337
111
116
  endoreg_db/management/commands/load_ai_model_data.py,sha256=rjC-yK8NNr0a0TDqvGHufI27ANQYTWDkWlSEWRkubGY,1329
112
- endoreg_db/management/commands/load_base_db_data.py,sha256=xewHewt_4OMunmEX-yntX2EFfd5bGSBhAWKVdqNzMcY,6293
117
+ endoreg_db/management/commands/load_base_db_data.py,sha256=Jrtbt7UzFEahMiqeA4goVgShRK9XkyPOgqljjHSZN_I,6475
113
118
  endoreg_db/management/commands/load_center_data.py,sha256=Ra7BikibHJF4Ks72WNGwJqtbIw-9MieCxKlZG_RUA-s,1339
114
119
  endoreg_db/management/commands/load_disease_classification_choices_data.py,sha256=zSwNVmI56myFtOBUxV9kD_-4NKh0Z4nWuvFN3RSSulU,1361
115
120
  endoreg_db/management/commands/load_disease_classification_data.py,sha256=B0sIgDq35e8Js3cqBCpRBoDuKRoDy7YvPbaZ4jjJS2I,1305
@@ -125,12 +130,13 @@ endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py,sha256=rjW
125
130
  endoreg_db/management/commands/load_information_source.py,sha256=3sL906AMa7FGO3bgrNbfJlptrEwv925n-X_XB4PDZ_Q,1347
126
131
  endoreg_db/management/commands/load_lab_value_data.py,sha256=NC3wCo7cnd7l1uyVa7LQzsYXTLVTIuGnRu8z5pgzrck,1609
127
132
  endoreg_db/management/commands/load_label_data.py,sha256=0vSBzBweO-M7mjXJotg4q_W7gbcaBoilrnA9e7dyp8o,2217
133
+ endoreg_db/management/commands/load_logging_data.py,sha256=1GWVQFh-tVWGZjSlvqcqkG2ByClJjOqU-GLwgh3TEnE,1222
128
134
  endoreg_db/management/commands/load_medication_data.py,sha256=8x-tLE7UrZDcrVFEKHUWe8EWFhJbXju6PANjxYWon6U,1262
129
135
  endoreg_db/management/commands/load_medication_indication_data.py,sha256=lR3zJdTjtKeVmXUrb3AyAcTwyutUteppfD-GbkgXRG0,1783
130
136
  endoreg_db/management/commands/load_medication_indication_type_data.py,sha256=CJ3zyFv7DnTuhBfG6TAdU9uZ0c2aHd31Y33g3X-SYVA,1282
131
137
  endoreg_db/management/commands/load_medication_intake_time_data.py,sha256=Qln3plozYsADcS0gKLdnLzAjbVLxC6N9h3ja-pS5CiI,1270
132
138
  endoreg_db/management/commands/load_medication_schedule_data.py,sha256=UTnCGF2gFUsdDb76cYrntaHGFazz4tUWg9ulF8bOVKY,1514
133
- endoreg_db/management/commands/load_network_data.py,sha256=JMusB-hPmuhuHbaIyg2tJ95yTfuJwTbf9MIUUqHD6aE,1637
139
+ endoreg_db/management/commands/load_network_data.py,sha256=zg8Kt0Qv1ocgRG3pUlweJhNIF2JCMtAFEh-kZb0SiX8,1991
134
140
  endoreg_db/management/commands/load_pdf_type_data.py,sha256=sJeGI1M4Xwkagi7rModwUJH3MuQckZXdOkHekoAvRAw,1650
135
141
  endoreg_db/management/commands/load_profession_data.py,sha256=oF3OF7zRqxA-SVpMW6e7LJ3MSfEc5Hoz1XlcvcFACRg,1321
136
142
  endoreg_db/management/commands/load_report_reader_flag.py,sha256=pvqRgtcjaYTgx2Ce7HYnNzsUB48yJe9lXTk-lzfJUPI,1371
@@ -205,8 +211,13 @@ endoreg_db/migrations/0064_casetemplaterule_extra_parameters_and_more.py,sha256=
205
211
  endoreg_db/migrations/0065_rename__date_value_distribution_casetemplaterule_date_value_distribution_and_more.py,sha256=XvKuXBA_O3AjnaeMMPjEu1ltbQIbiYDH79PczecHRdI,2067
206
212
  endoreg_db/migrations/0066_alter_patientlabvalue_patient_and_more.py,sha256=XEn9XBxJhh0mNDj8htiLUcViyGMLOkew2UmbbMExeC4,1240
207
213
  endoreg_db/migrations/0067_alter_medicationindication_indication_type.py,sha256=HcMRzp-G1bOl2y_aKTU1GMk85bX1sTO-XMeLNG4MzmE,577
214
+ endoreg_db/migrations/0068_networkdevicetype_networkdevicetypemanager_and_more.py,sha256=XlASc_hxZbtrljxxiP-V49C-sVR_710J1qSf3sX3eYg,2439
215
+ endoreg_db/migrations/0069_delete_networkdevicetypemanager_networkdevice_online.py,sha256=AGtnpgd1T6Q7UoKSGsb5ETXvYEYzMklMZnctnBXEh5Y,519
216
+ endoreg_db/migrations/0070_logtype_alter_rawpdffile_file_networkdevicelogentry_and_more.py,sha256=zN0qELi6iDJz8wPKPWj8QK8SV6AIcC326Q_7IFrUuiI,3416
217
+ endoreg_db/migrations/0071_aglservicelogentry.py,sha256=ZIO3niIExRWXYnAcNJdrm-Rj-qLEhId_ScD0360HTyw,1442
218
+ endoreg_db/migrations/0072_alter_rawpdffile_file.py,sha256=7LjAiwZbEW2tbFRC5ndTrWYV5PZzij6RK49S_dwVqjU,652
208
219
  endoreg_db/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
209
- endoreg_db/models/__init__.py,sha256=o0z5ORbMweAR15gSHRkXJzScj7Fr8SLXUoZ2J-p660k,1529
220
+ endoreg_db/models/__init__.py,sha256=wc1ZyDUNb-sKMZ4P7x_PAb0WtzDhYAq8y19AV8rC7dQ,1552
210
221
  endoreg_db/models/ai_model/__init__.py,sha256=rh5npLRGml5iiRocx359gsaA82pGJTW7wdVAfnbZP6w,106
211
222
  endoreg_db/models/ai_model/active_model.py,sha256=r7SE3yg54kbjfOkk0Ei0rgs_Wo3ikx88rcEELqvRzGc,343
212
223
  endoreg_db/models/ai_model/model_meta.py,sha256=YyYW8dScpAceHePnbrnRpgVBYDByi9x7u5Ydh03OJuo,869
@@ -264,11 +275,17 @@ endoreg_db/models/laboratory/__init__.py,sha256=UQb4RDHqgMfSvO7UBGi_TzI1wUV3QMtL
264
275
  endoreg_db/models/laboratory/lab_value.py,sha256=9X39Wqh1zHghEabUS5yPI3r9a3AKKUcrozwNg32LUag,4097
265
276
  endoreg_db/models/legacy_data/__init__.py,sha256=J0ewe30Y2qCxCUPktcFOm2WOEz2fQnwrgfZ93FRcnio,115
266
277
  endoreg_db/models/legacy_data/image.py,sha256=mKQed6AIJL2XauPB2GevHX6NXaR8gphundI9_IC9Hpc,1622
278
+ endoreg_db/models/logging/__init__.py,sha256=GDsBf4AbhGeyUITBb9teTlTLhzU1A0GYoqQH59XNrMg,158
279
+ endoreg_db/models/logging/agl_service.py,sha256=DQdoGNGPHEbTpm_D4v87p3eRmlFOh9Ilee952ItN_O8,495
280
+ endoreg_db/models/logging/base.py,sha256=39pKcV65Gru4ssZ3xb8T2IJ-ou8cjCGqn1efGuHzoRM,773
281
+ endoreg_db/models/logging/log_type.py,sha256=o_52ZzBBDE9CDgSeBmZJcNBoFyCDxo9HzeSANnOHrj0,636
282
+ endoreg_db/models/logging/network_device.py,sha256=UdcAk8PFJxjFCTZTfEChyI3iu1wcv7xiMiha9FlhHQg,509
267
283
  endoreg_db/models/medication/__init__.py,sha256=69K9Iy3zEqJSd0zS_ZS9WKbvGQIgmOJm1PCpPI_vwOg,25
268
284
  endoreg_db/models/medication/medication.py,sha256=tPXBnrGVkmyvfhjJQGcD4Jq2TkYeHl8nNLvGuVisBiI,4939
269
- endoreg_db/models/network/__init__.py,sha256=RjhUS0qXDvcAwrszx2nG_C9fXKO43q1jQZIM1tY6j90,92
270
- endoreg_db/models/network/network_device.py,sha256=s_zuLMSwu-6mpwxS7Gc0P9wSih_HzJtMWHW4hkjH5Vg,916
271
- endoreg_db/models/network/network_device_type.py,sha256=8cWAutupItIvXM8E8YWmHuR0YNxZXnFS67IG7hCGQNw,726
285
+ endoreg_db/models/network/__init__.py,sha256=lxRpaWeVxKdZDL9Hj45_rAemPs6Y2gM-f_PjmY19nOA,128
286
+ endoreg_db/models/network/agl_service.py,sha256=mS_0jDm4ovww9O-Nz0U8kVOoBK-MGrLnmv4NnFTUtrA,1275
287
+ endoreg_db/models/network/network_device.py,sha256=p2zY4vENy6ZwKVeoTP5yHYvCHmFKopvyCaBTzux1NEI,1586
288
+ endoreg_db/models/network/network_device_type.py,sha256=LHGVGkF0LRH8VmAJHE0If5H3c8HC5wtP0-GZY7r02TU,728
272
289
  endoreg_db/models/other/__init__.py,sha256=HDlNBuS98uIvxpw3sww-hiyulG871TzulFRrLO0C8ec,158
273
290
  endoreg_db/models/other/distribution.py,sha256=OLMELIpP9xQa4BkiLZoBbEoxzLmOponZh_LYro6g4DM,8404
274
291
  endoreg_db/models/other/material.py,sha256=5C09hUD-cQL8vCRFNPyq2OyRHjFwCA5nCwW4Zh16Ak0,520
@@ -357,7 +374,7 @@ endoreg_db/utils/ocr.py,sha256=jkdT1bl-LSCjZ2PvxlX1AG2TmhdMclayxUPrdZWs7UE,7322
357
374
  endoreg_db/utils/uuid.py,sha256=T4HXqYtKwXFqE5kPyvlgWHyllBBF6LL6N48nl9TpwBk,53
358
375
  endoreg_db/utils/video_metadata.py,sha256=HDyXxAeNQOK3cGzQ06xosmObzEnJBARuKjwz9vmmRIM,2613
359
376
  endoreg_db/views.py,sha256=xc1IQHrsij7j33TUbo-_oewy3vs03pw_etpBWaMYJl0,63
360
- endoreg_db-0.3.7.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
361
- endoreg_db-0.3.7.dist-info/METADATA,sha256=yaBTmBrl60vf7SiwpixdGiRMzky3lD_hV-RHzzPQDNI,976
362
- endoreg_db-0.3.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
363
- endoreg_db-0.3.7.dist-info/RECORD,,
377
+ endoreg_db-0.3.9.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
378
+ endoreg_db-0.3.9.dist-info/METADATA,sha256=oIhjtGe_1AZ2EkQUj1j50Lx66j2gWAuQcltuOFet6Us,1054
379
+ endoreg_db-0.3.9.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
380
+ endoreg_db-0.3.9.dist-info/RECORD,,