I've got a weird problem here. It hurts my brain thinking about it. I've got a Django project with multiple apps. Today I added another app.
(views.py)
from %app_name%.%class_file% import %class_name%
def api(request):
    t                        = %class_name%()
    data                     = {}
    data['listOtherDevices'] = t.listOtherDevices
    logger                   = logging.getLogger(__name__)
    logger.error(len(t.listOtherDevices))
    return JsonResponse(data)
The imported class fills the 'listOtherDevices'-array via
   __init__ perfectly fine when I run it inside a console. When I do so, there are exactly 3 elements inside this array (as there are 3 devices in my LAN the class could find). So when I visit the url (development server -> manage.py runserver) linked to this method I can see a JSON with exactly 3 entries. So far so good but now comes the weird part. When I refresh the url in my browser or visit it one more time, there are more than 3 entries. The scheme is like this:
opened url 1 time:    3 entries
opened url 2 times:   9 entries  (+  6)
opened url 3 times:  18 entries  (+  9)
opened url 4 times:  30 entries  (+ 12)
opened url 5 times:  45 entries  (+ 15)
opened url 6 times:  63 entries  (+ 18)
I can see a pattern there but I cannot understand why this happends.
sudo sysdig -c spy_users
tells me, that the class is gathering information exactly 3 times using
subprocess.check_output
The responded JSON is syntactically OK. Seems like the class would 'find' 9, or 18 devices.
Please help me, because as I said earlier: this makes my brain hurt :)
import json
import subprocess
class tradfri:
tradfriIPv4                 = 'blablabla'
tradfriUser                 = 'blablabla'
tradfriPassword             = 'blablabla'
pathToCoap                  = '/blablabla/coap-client'
listDevices                     = []
listGroups                  = []
listDevicesDetails          = []
listGroupsDetails           = []
listLightbulbs              = []
listOtherDevices            = []
def __init__(self):
    self.getDevices()
    self.getGroups()
    self.getArrayLightbulbs()
    self.getArrayOtherDevices()
def getDevices(self):
    method              = 'get'
    stdoutdata      = subprocess.check_output(  self.pathToCoap 
                                                                        + ' -m ' + method
                                                                        + ' -u "' + self.tradfriUser + '"'
                                                                        + ' -k "' + self.tradfriPassword + '"'
                                                                        + ' coaps://' + self.tradfriIPv4 + ':5684/15001'
                                                                        +  " | awk 'NR==4'",
                                                                        shell=True).decode("utf-8") 
    self.listDevices    = json.loads(stdoutdata)
    for ID in self.listDevices:
        stdoutdata  = subprocess.check_output(  self.pathToCoap 
                                                                        + ' -m ' + method
                                                                        + ' -u "' + self.tradfriUser + '"'
                                                                        + ' -k "' + self.tradfriPassword + '"'
                                                                        + ' coaps://' + self.tradfriIPv4 + ':5684/15001/' + str(ID)
                                                                        +  " | awk 'NR==4'",
                                                                        shell=True).decode("utf-8")
        self.listDevicesDetails.append(json.loads(stdoutdata))
def getGroups(self):
    method              = 'get'
    stdoutdata      = subprocess.check_output(  self.pathToCoap 
                                                                        + ' -m ' + method
                                                                        + ' -u "' + self.tradfriUser + '"'
                                                                        + ' -k "' + self.tradfriPassword + '"'
                                                                        + ' coaps://' + self.tradfriIPv4 + ':5684/15004'
                                                                        +  " | awk 'NR==4'",
                                                                        shell=True).decode("utf-8") 
    self.listGroups     = json.loads(stdoutdata)
    for ID in self.listGroups:
        stdoutdata      = subprocess.check_output(  self.pathToCoap 
                                                                            + ' -m ' + method
                                                                            + ' -u "' + self.tradfriUser + '"'
                                                                            + ' -k "' + self.tradfriPassword + '"'
                                                                            + ' coaps://' + self.tradfriIPv4 + ':5684/15004/' + str(ID)
                                                                            +  " | awk 'NR==4'",
                                                                            shell=True).decode("utf-8") 
        raw = json.loads(stdoutdata)
        tmpMembers = []
        for id in raw['9018']['15002']['9003']:
            tmpMembers.append( { 'ID': str( id ), 'name': self.getDeviceNameByID(id) } )
        self.listGroupsDetails.append(  {   'ID': str( raw['9003'] ),
                                                            'name': raw['9001'],
                                                            'isGroupOn': False,
                                                            'members': tmpMembers } )
def getArrayLightbulbs(self):
    for item in self.listDevicesDetails:
        if item['3']['6'] == 1: # is lightbulb
            id                      = item['9003']
            name                    = item['9001']
            groupID             = self.getGroupIDByID(id)
            groupName           = self.getGroupNameByID(id)
            manufacturer        = item['3']['0']
            description         = item['3']['1']
            isReachable         = True
            isBulbOn                = False
            isDimmable          = False
            isWhiteSpectrum = False
            isColorSpectrum     = False
            brightnessOfBulb    = ''
            currentColor            = ''
            #isReachable
            if len(item['3311'][0]) == 1:
                isReachable = False;
            else:
                #isBulbOn
                if item['3311'][0]['5850'] == 1:
                    isBulbOn = True
                #dimmable & brightnessOfBulb
                if '5851' in item['3311'][0]:
                    brightnessOfBulb = str( item['3311'][0]['5851'] )
                    isDimmable = True
                #currentColor
                if '5706' in item['3311'][0]:
                    currentColor = item['3311'][0]['5706']
            #isWhiteSpectrum
            if ' WS ' in description:
                isWhiteSpectrum = True
            #isColorSpectrum
            if ' CWS ' in description:
                isWhiteSpectrum = True  
                isColorSpectrum = True
            self.listLightbulbs.append( {   'ID':                       str( id ), 
                                                        'Name':                     name,
                                                        'groupID':              str( groupID ),
                                                        'groupName' :           groupName, 
                                                        'manufacturer':         manufacturer,
                                                        'description' :             description,
                                                        'isReachable':          isReachable,
                                                        'isBulbOn':                 isBulbOn,
                                                        'isDimmable':           isDimmable,
                                                        'isWhiteSpectrum':  isWhiteSpectrum,
                                                        'isColorSpectrum':  isColorSpectrum,
                                                        'brightnessOfBulb':     brightnessOfBulb,
                                                        'currentColor':             currentColor    } )
def getArrayOtherDevices(self):
    for device in self.listDevicesDetails:
        if device['3']['6'] == 3:
            self.listOtherDevices.append( { 'ID':                   str( device['9003'] ), 
                                                            'Name':                 device['9001'],
                                                            'groupID':          str( self.getGroupIDByID(str( device['9003']) ) ),
                                                            'groupName':        self.getGroupNameByID(str( device['9003']) ), 
                                                            'manufacturer':     device['3']['0'],
                                                            'description':      device['3']['1']    } )
def getDeviceNameByID(self, id):
    name = ''
    for key in self.listDevicesDetails:
        if key['9003'] == id:
            name = key['9001']
    return name
def getGroupIDByID(self, id):
    groupID = ''
    for group in self.listGroupsDetails:
        for member in group['members']:
            if member['ID'] == id:
                groupID = group['ID']
    return groupID
def getGroupNameByID(self, id):
    groupName = ''
    for group in self.listGroupsDetails:
        for member in group['members']:
            if member['ID'] == id:
                groupName = group['name']
    return groupName
 
    