code: def get_all_regions(self):
          '''
          Request a list of regions from Datapoint. Returns each Region
          as a Site object. Regions rarely change, so we cache the response
          for one hour to minimise requests to API.
          '''
          if (time() - self.regions_last_update) < self.regions_update_time:
              return self.regions_last_request
  
          response = self.call_api(self.all_regions_path)
          regions = []
          for location in response['Locations']['Location']:
              region = Site()
              region.id = location['@id']
              region.region = location['@name']
              region.name = REGION_NAMES[location['@name']]
              regions.append(region)
  
          self.regions_last_update = time()
          self.regions_last_request = regions
          return regionf get_all_regions(self):
          '''
          Request a list of regions from Datapoint. Returns each Region
          as a Site object. Regions rarely change, so we cache the response
          for one hour to minimise requests to API.
          '''
          if (time() - self.regions_last_update) < self.regions_update_time:
              return self.regions_last_request
  
          response = self.call_api(self.all_regions_path)
          regions = []
          for location in response['Locations']['Location']:
              region = Site()
              region.id = location['@id']
              region.region = location['@name']
              region.name = REGION_NAMES[location['@name']]
              regions.append(region)
  
          self.regions_last_update = time()
          self.regions_last_request = regions
          return regions
docs: Request a list of regions from Datapoint. Returns each Region
          as a Site object. Regions rarely change, so we cache the response
          for one hour to minimise requests to API.