Changeset 557
- Timestamp:
- 11/27/08 15:58:16 (6 weeks ago)
- Files:
-
- 1 modified
-
modules/trunk/GoogleBase/sync.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
modules/trunk/GoogleBase/sync.py
r498 r557 1 1 #!/usr/bin/env python 2 """NAME 3 sync.py 4 5 DESCRIPTION 6 Syncrolize google products with remote ones stored on google/base server. 7 8 SYNOPSIS 9 sync.py [-q] [-i regexp]... 2 10 3 from datetime import date, timedelta 4 #from django.conf import settings 5 from django.db import models 6 import djw.modules.GoogleBase.settings as settings 7 from django.db.models import Q 8 from djw.modules.GoogleBase.models import GoogleProduct,GoogleProductDeleted 9 from djw.modules.GoogleBase.google import google_client 10 import djw.modules.GoogleBase.log as log 11 PARAMETERS 12 -q be quietly - display messages only on errors 13 14 -i regexp 15 ignore errors with if python regexp found in update log 11 16 12 def exec_sync(): 13 """Refresh all products on remote GoogleBase 17 INFO 18 Should executed with DJANGO_SETTINGS_MODULE set before 19 (recommended to use run.py utility) 20 If 30 upload errors occured then process is terminated. 21 22 EXAMPLES 23 run.py sync.py -i ""child sex"" 24 """ 25 from sys import argv 14 26 15 If 30 errors occured in process then exit. 27 def exec_sync(argv): 28 from datetime import date, timedelta 29 from django.db import models 30 import djw.modules.GoogleBase.settings as settings 31 from django.db.models import Q 32 from djw.modules.GoogleBase.models import GoogleProduct,GoogleProductDeleted 33 from djw.modules.GoogleBase.google import google_client 34 35 # quiet (display only errors) 36 quiet = argv.count('-q') > 0 37 38 # create RE-list of ignored errors (from -i arguments) 39 igns = [argv[i+1] for i in range(len(argv)) if argv[i] == '-i'] 40 ignore_relist = [re.compile(s) for s in igns] 16 41 17 """ 42 def must_ignore_error(error): 43 """ return true if error must ignored """ 44 for i in ignore_relist: 45 if i.search(error) is not None: 46 return True 47 return False 18 48 19 log.info("Synchronizing remote GoogleBase...") 49 def log(message, display=quiet): 50 if not quiet or forse_display: 51 print(message) 52 53 log("Synchronizing remote GoogleBase...") 20 54 # Delete deferred products 21 55 # (cannot use "GoogleProductDeleted.objects.all().delete()" because in that way "delete" method is not called for 22 56 # each product) 23 log .info("Deleting deferred products...")57 log("Deleting deferred products...") 24 58 for prod in GoogleProductDeleted.objects.all(): 25 log .info("Deleting '%s'..." % prod)59 log("Deleting '%s'..." % prod) 26 60 prod.delete() 27 61 28 log .info("Uploading deferred products...")62 log("Uploading deferred products...") 29 63 errors = 0 30 64 # refresh changed or expired products 31 65 for prod in GoogleProduct.objects.filter(Q(changed = True)|Q(exp_date__lte = date.today() + timedelta(1))): 32 66 33 log.info("Uploading '%s'..." % prod)67 #log("Uploading '%s'..." % prod) 34 68 # Updload product on GoogleBase 35 69 (is_uploaded, upload_log) = prod.upload_to_google_base() … … 37 71 # if product still not uploaded print log messages 38 72 if is_uploaded: 39 log .info("OK")40 else: 41 log.info("Error. See GoogleProduct admin table for details.")42 43 errors += 173 log("Product %s uploaded successfully." % (prod)) 74 else: 75 if not must_ignore_error(update_log): 76 log("Product %s upload error: %s." % (prod, upload_log), True) 77 errors += 1 44 78 45 79 if errors > 30: 46 log .info("Error number is 30. Sync process stopped.")80 log("Error number is 30. Sync process terminated.", True) 47 81 break 48 82 49 83 if __name__ == "__main__": 50 exec_sync() 84 if argv.count('--help') > 0: 85 print __doc__ 86 else: 87 exec_sync(argv)
