]> git.giorgioravera.it Git - mercedes_me_api.git/commitdiff
used class inside resources.py
authorGiorgio Ravera <giorgio.ravera@gmail.com>
Fri, 23 Oct 2020 18:10:34 +0000 (20:10 +0200)
committerGiorgio Ravera <giorgio.ravera@gmail.com>
Fri, 23 Oct 2020 18:10:34 +0000 (20:10 +0200)
const.py
mercedes_me_api.py
resources.py

index 4c549f9ab30035bdf2cf279a2f922906682d9360..8dfc77698a67467f1d5b9f0b01c23382828c565c 100644 (file)
--- a/const.py
+++ b/const.py
@@ -6,7 +6,6 @@ Author: G. Ravera
 For more details about this component, please refer to the documentation at
 https://github.com/xraver/mercedes_me_api/
 """
-
 # Software Parameters
 NAME = "Mercedes Me API"
 DOMAIN = "mercedesmeapi"
index 48d326b4c3c4094436cd7c1096477f5c2f3bca90..f40e7fff30a73012390c2e1d18dc55339eb9500e 100644 (file)
@@ -11,7 +11,7 @@ import logging
 import sys
 
 from config import MercedesMeConfig
-from resources import MercedesMeResources
+from resources import MercedesMeResourcesDB
 
 # Logger
 logger = logging.getLogger(__name__)
@@ -21,7 +21,7 @@ class MercedesMeData:
         # Configuration Data
         self.config = MercedesMeConfig()
         # Resource Data
-        self.resources = MercedesMeResources(self.config)
+        self.resourcesDB = MercedesMeResourcesDB(self.config)
 
 ########################
 # Parse Input
@@ -55,7 +55,7 @@ if __name__ == "__main__":
         logger.error ("Error initializing configuration")
         exit (1)
 
-    if not data.resources.ReadResources():
+    if not data.resourcesDB.ReadResources():
         logger.error ("Error initializing resources")
         exit (1)
 
@@ -70,8 +70,8 @@ if __name__ == "__main__":
             exit (1)
             
     if (args.resources):
-        data.resources.PrintAvailableResources()
+        data.resourcesDB.PrintAvailableResources()
 
     if (args.status == True):
-        data.resources.UpdateResourcesStatus()
-        data.resources.PrintResourcesStatus()
+        data.resourcesDB.UpdateResourcesStatus()
+        data.resourcesDB.PrintResourcesStatus()
index 327befa14ae44050aa7b426cc42342524e5325e5..b3caf0e5077560f3134dcced13a3324ff013f91c 100644 (file)
@@ -16,9 +16,28 @@ from query import GetResource
 # Logger
 logger = logging.getLogger(__name__)
 
-class MercedesMeResources:
+class MercedesMeResource:
+    def __init__( self, name, version, href, status=None, timestamp=None, valid=False ):
+        self.name = name 
+        self.version = version
+        self.href = href
+        self.status = status
+        self.timestamp = timestamp
+        self.valid = valid
 
-    resources = None
+    def getJson(self):
+        return ({ 
+            "name" : self.name,
+            "version" : self.version,
+            "href" : self.href,
+            "status" : self.status,
+            "timestamp" : self.timestamp,
+            "valid" : self.valid,
+            })
+
+class MercedesMeResourcesDB:
+
+    database = { }
     config = None
 
     ########################
@@ -26,107 +45,131 @@ class MercedesMeResources:
     ########################
     def __init__(self, config):
         self.config = config
-        
+
     ########################
     # Read Resources
     ########################
     def ReadResources(self):
-        # Get Resources List
+
+        found = False
+        resources = None
+
         if not os.path.isfile(self.config.resources_file):
+            # Resources File not present - Retriving new one from server
             logger.error ("Resource File missing - Creating a new one.")
-            if (self.CreateResourcesFile() == False):
-                logger.error ("Error creating resources file.")
-                return None
+            found = False
         else:
             with open(self.config.resources_file, 'r') as file:
                 try:
-                    self.resources = json.load(file)
+                    resources = json.load(file)
+                    if (not self.CheckResources(resources)):
+                        raise ValueError
+                    else:
+                        found = True
                 except ValueError:
-                    resources = None
-                if not self.CheckResources():
-                    logger.error ("Resource File not correct - Creating a new one.")
-                    if (self.CreateResourcesFile() == False):
-                        logger.error ("Error creating resources file.")
-                        return None
-        return True
+                    logger.error ("Error reading resource file - Creating a new one.")
+                    found = False
 
-    ########################
-    # Init Resources
-    ########################
-    def InitResources(self):
-        # Create Empty Status
-        for res in self.resources:
-            res["status"] = ""
-            res["timestamp"] = 0
-            res["valid"] = False
-
-    ########################
-    # Write Resources File
-    ########################
-    def WriteResourcesFile(self):
-        with open(self.config.resources_file, 'w') as file:
-            json.dump(self.resources, file)
+        if ( not found ):
+            # Not valid or file missing
+            resources = self.RetriveResourcesList()
+            if( resources == None ):
+                # Not found or wrong
+                logger.error ("Error retriving resource list.")
+                return False
+            else:
+                # import and write
+                self.ImportResourcesList(resources)
+                self.WriteResourcesFile()
+                return True
+        else:
+            # Valid: just import
+            self.ImportResourcesList(resources)
+            return True
 
     ########################
     # Check Resources
     ########################
-    def CheckResources(self):
-        if "error" in self.resources:
-            if "error_description" in self.resources:
-                logger.error ("Error retriving resources: " + self.resources["error_description"])
+    def CheckResources(self, resources):
+        if "reason" in resources:
+            logger.error ("Error retriving available resources - " + resources["reason"] + " (" + str(resources["code"]) + ")")
+            return False
+        if "error" in resources:
+            if "error_description" in resources:
+                logger.error ("Error retriving resources: " + resources["error_description"])
             else:
-                logger.error ("Error retriving resources: " + self.resources["error"])
+                logger.error ("Error retriving resources: " + resources["error"])
             return False
-        if len(self.resources) == 0:
+        if len(resources) == 0:
             logger.error ("Empty resources found.")
             return False
         return True
 
     ########################
-    # Create Resources File
+    # Retrive Resources List
     ########################
-    def CreateResourcesFile(self):
+    def RetriveResourcesList(self):
         resName = "resources"
         resURL = self.config.res_url_prefix + "/vehicles/" + self.config.vin + "/" + resName
-        self.resources = GetResource(resName, resURL, self.config)
-        if "reason" in self.resources:
-            logger.error ("Error retriving available resources - " + self.resources["reason"] + " (" + str(self.resources["code"]) + ")")
-            return False
+        resources = GetResource(resName, resURL, self.config)
+        if not self.CheckResources(resources):
+            logger.error ("Error retriving available resources")
+            return None
         else:
-            self.InitResources()
-            self.WriteResourcesFile()
-            return True
+            return resources
+
+    ########################
+    # Import Resources List
+    ########################
+    def ImportResourcesList(self, resources):
+        for res in resources:
+            if("status" in res):
+                self.database[res["name"]] = MercedesMeResource (res["name"], res["version"], res["href"], res["status"], res["timestamp"], res["valid"])
+            else:
+                self.database[res["name"]] = MercedesMeResource (res["name"], res["version"], res["href"])
+
+    ########################
+    # Write Resources File
+    ########################
+    def WriteResourcesFile(self):
+        output = []
+        # Extract List
+        for res in self.database:
+            output.append( self.database[res].getJson() )
+        # Write File
+        with open(self.config.resources_file, 'w') as file:
+            json.dump(output, file)
 
     ########################
     # Print Available Resources
     ########################
     def PrintAvailableResources(self):
-        print ("Found %d resources" % len(self.resources) + ":")
-        for res in self.resources:
-            print (res["name"] + ": " + self.config.res_url_prefix + res["href"])
+        print ("Found %d resources" % len(self.database) + ":")
+        for res in self.database:
+            print (self.database[res].name + ": " + self.config.res_url_prefix + self.database[res].href)
 
     ########################
     # Print Resources Status
     ########################
     def PrintResourcesStatus(self, valid = True):
-        for res in self.resources:
-            if((not valid) | res["valid"]):
-                print (res["name"] + ":")
-                print ("\tvalid: " + str(res["valid"]))
-                print ("\tstatus: " + res["status"])
-                print ("\ttimestamp: " + str(res["timestamp"]))
+        for res in self.database:
+            if((not valid) | self.database[res].valid):
+                print (self.database[res].name + ":")
+                print ("\tvalid: " + str(self.database[res].valid))
+                print ("\tstatus: " + self.database[res].status)
+                print ("\ttimestamp: " + str(self.database[res].timestamp))
 
     ########################
     # Update Resources Status
     ########################
     def UpdateResourcesStatus(self):
-        for res in self.resources:
-            resName = res["name"]
-            resURL = self.config.res_url_prefix + res["href"]
+        for res in self.database:
+            resName = self.database[res].name
+            resURL = self.config.res_url_prefix + self.database[res].href
             result = GetResource(resName, resURL, self.config)
             if not "reason" in result:
-                res["valid"] = True
-                res["timestamp"] = result[resName]["timestamp"]
-                res["status"] = result[resName]["value"]
+                self.database[res].valid = True
+                self.database[res].timestamp = result[resName]["timestamp"]
+                self.database[res].status = result[resName]["value"]
         # Write Resource File
-        self.WriteResourcesFile()
\ No newline at end of file
+        self.WriteResourcesFile()