mirror of
				https://github.com/peeringdb/peeringdb.git
				synced 2024-05-11 05:55:09 +00:00 
			
		
		
		
	initial commit of code
This commit is contained in:
		
							
								
								
									
										58
									
								
								peeringdb_server/management/commands/pdb_geosync.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								peeringdb_server/management/commands/pdb_geosync.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| import googlemaps | ||||
| import reversion | ||||
|  | ||||
| from django.core.management.base import BaseCommand | ||||
| from django.conf import settings | ||||
|  | ||||
| from peeringdb_server import models | ||||
|  | ||||
| API_KEY = settings.GOOGLE_GEOLOC_API_KEY | ||||
|  | ||||
|  | ||||
| class Command(BaseCommand): | ||||
|     help = "Sync latitude and longitude on all geocoding enabled entities" | ||||
|  | ||||
|     def add_arguments(self, parser): | ||||
|         parser.add_argument( | ||||
|             "reftag", nargs="?", help= | ||||
|             "can be reftag only such as 'fac' or reftag with id to only sync that specific entity such as 'fac.1'" | ||||
|         ) | ||||
|         parser.add_argument( | ||||
|             "--limit", type=int, default=0, | ||||
|             help="limit how many rows are synced, useful for testing") | ||||
|  | ||||
|     def log(self, msg): | ||||
|         print(msg) | ||||
|  | ||||
|     def handle(self, *args, **options): | ||||
|         reftag = options.get("reftag") | ||||
|         limit = options.get("limit") | ||||
|         if reftag.find(".") > -1: | ||||
|             reftag, _id = reftag.split(".") | ||||
|         else: | ||||
|             _id = 0 | ||||
|         self.gmaps = googlemaps.Client(API_KEY, timeout=5) | ||||
|         self.sync(reftag, _id, limit=limit) | ||||
|  | ||||
|     @reversion.create_revision() | ||||
|     def sync(self, reftag, _id, limit=0): | ||||
|         model = models.REFTAG_MAP.get(reftag) | ||||
|         if not model: | ||||
|             raise ValueError("Unknown reftag: %s" % reftag) | ||||
|         if not hasattr(model, "geocode_status"): | ||||
|             raise TypeError( | ||||
|                 "Can only geosync models containing GeocodeBaseMixin") | ||||
|         q = model.handleref.undeleted().filter(geocode_status=False) | ||||
|         if _id: | ||||
|             q = q.filter(id=_id) | ||||
|         count = q.count() | ||||
|         if limit > 0: | ||||
|             q = q[:limit] | ||||
|         i = 0 | ||||
|         for entity in q: | ||||
|             if entity.geocode_status: | ||||
|                 continue | ||||
|             i += 1 | ||||
|             self.log("Syncing %s [%s %d/%d ID:%s]" % (entity, reftag, i, count, | ||||
|                                                       entity.id)) | ||||
|             entity.geocode(self.gmaps) | ||||
		Reference in New Issue
	
	Block a user