HCE Project Python language Distributed Tasks Manager Application, Distributed Crawler Application and client API bindings.  2.0.0-chaika
Hierarchical Cluster Engine Python language binding
SiteDeleteTask.py
Go to the documentation of this file.
1 '''
2 @package: dc
3 @author igor
4 @link: http://hierarchical-cluster-engine.com/
5 @copyright: Copyright © 2013-2014 IOIX Ukraine
6 @license: http://hierarchical-cluster-engine.com/license/
7 @since: 0.1
8 '''
9 
10 import dc_db.SiteCleanUpTask as SiteCleanUpTask
11 import dc_db.Constants as Constants
12 import SiteTask
13 import dc.EventObjects
14 import app.Utils as Utils # pylint: disable=F0401
15 from dtm.EventObjects import GeneralResponse
16 
17 logger = Utils.MPLogger().getLogger()
18 
19 
20 # #class implemented all logic necessary to process SiteDelete request
21 #
23 
24 
25  # #constructor
26  #
27  # @param keyValueStorageDir path to keyValue storage work dir
28  # @param rawDataDir path to raw data dir
29  def __init__(self, keyValueStorageDir, rawDataDir, dBDataTask):
30  super(SiteDeleteTask, self).__init__(keyValueStorageDir, rawDataDir, dBDataTask)
31  self.dBDataTask = dBDataTask
32 
33 
34  # #cleanup all site data from mysql db
35  #
36  # @param siteDelete instance of SiteDelete object
37  # @param queryCallback function for quieries execution
38  def process(self, siteDeletes, queryCallback):
39  ret = GeneralResponse()
40  if not isinstance(siteDeletes, list):
41  siteDeletes = [siteDeletes]
42 
43  for siteDelete in siteDeletes:
44  localIds = []
45  if siteDelete.id is None:
46  localIds = SiteTask.SiteTask.execSiteCriterions(siteDelete.criterions, queryCallback)
47  else:
48  localIds.append(siteDelete.id)
49  logger.debug(">>> SiteDeleteTask, ids are = " + str(localIds))
50 
51  for localId in localIds:
52  self.errorCode = 0
53  self.errorMessage = "OK"
54  siteDelete.id = localId
55  self.dropURLTable(siteDelete, queryCallback)
56  self.dropArbitraryTable(Constants.DC_FREQ_TABLE_NAME_TEMPLATE, siteDelete, Constants.STAT_DB_ID, queryCallback)
57  self.dropArbitraryTable(Constants.DC_LOG_TABLE_NAME_TEMPLATE, siteDelete, Constants.LOG_DB_ID, queryCallback)
58  self.dropArbitraryTable(Constants.DC_ATT_TABLE_NAME_TEMPLATE, siteDelete, Constants.ATT_DB_ID, queryCallback)
59  self.removeSiteRecord(siteDelete, queryCallback)
60  self.clearRelatedTables(siteDelete, queryCallback)
61 
62  # the rest as in SiteCleanUpTask
63  if siteDelete.delayedType == dc.EventObjects.NOT_DELAYED_OPERATION:
64  super(SiteDeleteTask, self).cleanUpDBStorage(siteDelete, SiteCleanUpTask.KEY_VALUE_FILE_NAME_TEMPLATE,
65  queryCallback)
66  super(SiteDeleteTask, self).cleanUpDBStorage(siteDelete, SiteCleanUpTask.KEY_VALUE_FIELDS_FILE_NAME_TEMPLATE,
67  queryCallback)
68  super(SiteDeleteTask, self).cleanUpRawDataStorage(siteDelete)
69  ret.errorCode = self.errorCode
70  ret.statuses.append(ret.errorCode)
71  if ret.errorMessage is None or ret.errorMessage == "":
72  ret.errorMessage = self.errorMessage
73  else:
74  ret.errorMessage += ("-" + self.errorMessage)
75 
76  return ret
77 
78 
79  # #drops urls_Site_Id table
80  #
81  # @param siteDelete instance of SiteDelete object
82  # @param queryCallback function for quieries execution
83  def dropURLTable(self, siteDelete, queryCallback):
84  SQL_DROP_QUERY_TEMPLATE = "DROP TABLE IF EXISTS `%s`"
85  tbName = Constants.DC_URLS_TABLE_NAME_TEMPLATE % siteDelete.id
86  query = SQL_DROP_QUERY_TEMPLATE % tbName
87  queryCallback(query, Constants.SECONDARY_DB_ID)
88  queryCallback(query, Constants.FOURTH_DB_ID)
89 
90 
91  # #method drops arbitrary table in specified db
92  #
93  # @param siteCleanup instance of SiteCleanup object
94  # @param dbId specific db id
95  # @param queryCallback function for quieries execution
96  def dropArbitraryTable(self, tablePrefix, siteDelete, dbId, queryCallback):
97  tbName = tablePrefix % siteDelete.id
98  SQL_DROP_QUERY_TEMPLATE = "DROP TABLE IF EXISTS `%s`"
99  query = SQL_DROP_QUERY_TEMPLATE % tbName
100  queryCallback(query, dbId)
101 
102 
103  # #deletes related records from `sites` table
104  #
105  # @param siteDelete instance of SiteDelete object
106  # @param queryCallback function for quieries execution
107  def removeSiteRecord(self, siteDelete, queryCallback):
108  DELETE_SITE_SQL_QUERY = "DELETE FROM `sites` WHERE id = '%s'"
109  query = DELETE_SITE_SQL_QUERY % siteDelete.id
110  queryCallback(query, Constants.PRIMARY_DB_ID)
111 
112 
113  # #deletes related records from `sites_urls`, `sites_filters` and `sites_properties` tables
114  #
115  # @param siteDelete instance of SiteDelete object
116  # @param queryCallback function for quieries execution
117  def clearRelatedTables(self, siteDelete, queryCallback):
118  tebleList = ["`sites_urls`", "`sites_filters`", "`sites_properties`"]
119  DELETE_SITE_SQL_QUERY = "DELETE FROM %s WHERE Site_Id = '%s'"
120  for tableName in tebleList:
121  query = DELETE_SITE_SQL_QUERY % (tableName, siteDelete.id)
122  queryCallback(query, Constants.PRIMARY_DB_ID)
def removeSiteRecord(self, siteDelete, queryCallback)
def __init__(self, keyValueStorageDir, rawDataDir, dBDataTask)
GeneralResponse event object, represents general state response for multipurpose usage.
def clearRelatedTables(self, siteDelete, queryCallback)
def cleanUpRawDataStorage(self, siteCleanup)
def dropArbitraryTable(self, tablePrefix, siteDelete, dbId, queryCallback)
def process(self, siteDeletes, queryCallback)
def dropURLTable(self, siteDelete, queryCallback)
def cleanUpDBStorage(self, siteCleanup, filesSuffix, queryCallback)