7 __author__
= "Berlin Brown"
14 import util
.keyword_processor
as textutils
15 from util
.text_utils
import formatStrAscii
, formatDescrWithSoup
16 from botlist_business_object
import BotlistBusinessObject
25 ------------------------------------------------
26 Bean Definitions for Object Mapping
27 ------------------------------------------------
33 self
.urlDescription
= None
40 self
.urlDescription
= None
42 self
.channelURL
= None
45 """ Because we are inserting these values into the database,
46 ensure that a zero length value is returned as opposed to null"""
47 self
.channelURL
= self
.channelURL
and self
.channelURL
or ''
48 self
.channelURL
= self
.channelURL
.strip()
54 self
.urlDescription
= None
60 #--------------------------------------
61 class ScanFeedHandler(BotlistBusinessObject
):
62 def createItem(self
, url
, title
, descr
, source
, hostname
):
65 sql_set
.append("insert into system_feed_items(main_url, url_title, url_description, url_source, hostname) values(")
66 sql_set
.append(SQL_PREFIX
+ "%s" + SQL_SUFFIX
) # main_url
67 sql_set
.append(SQL_PREFIX
+ "%s" + SQL_SUFFIX
) # url_title
68 sql_set
.append(SQL_PREFIX
+ "%s" + SQL_SUFFIX
) # url_descr
69 sql_set
.append(SQL_PREFIX
+ "%s" + SQL_SUFFIX
) # url_source
70 sql_set
.append(SQL_PREFIX
+ "%s" + SQL_PREFIX
) # hostname
72 sql_str
= ''.join(sql_set
)
73 cursor
= self
.conn
.cursor()
75 url_val
= url
.encode("utf-8").replace("'", "")
76 title_val
= formatStrAscii(title
).replace("'", "")
77 descr_val
= formatDescrWithSoup(formatStrAscii(descr
)).replace("'", "")
78 source_val
= source
.encode("utf-8").replace("'", "")
79 host_val
= hostname
.encode("utf-8").replace("'", "")
81 cursor
.execute(sql_str
% (url_val
, title_val
, descr_val
, source_val
, host_val
))
84 # Typically a unique id exception
87 def updateInsertEntityProcessCount(self
, link
, title
, user_name
, hostname
):
88 """ Complete transfer by inserting into the entity link table
89 for display to the user"""
92 cursor
= self
.conn
.cursor()
94 sql_set
.append("update system_feed_items set process_count = 1 where main_url = '%s'")
95 sql_str
= ''.join(sql_set
)
96 cursor
.execute(sql_str
% link
)
99 # Filter title and keywords
100 cleanTitle
= textutils
.filterNonAscii(title
.encode('utf-8', 'ignore'))
101 keywordTitle
= textutils
.createKeywords(cleanTitle
)
103 if MAX_BOT_RATING
> 0:
104 rnd_val
= random
.randint(1, MAX_BOT_RATING
)
109 sql_set2
.append("insert into entity_links(main_url, url_title, full_name, keywords, rating, hostname, created_on) values(")
110 sql_set2
.append(SQL_PREFIX
+ "%s" + SQL_SUFFIX
) # main_url
111 sql_set2
.append(SQL_PREFIX
+ "%s" + SQL_SUFFIX
) # title
112 sql_set2
.append(SQL_PREFIX
+ "%s" + SQL_SUFFIX
) # username
113 sql_set2
.append(SQL_PREFIX
+ "%s" + SQL_SUFFIX
) # keywords
114 sql_set2
.append("%s,") # rating (currently set to random value)
116 sql_set2
.append(SQL_PREFIX
+ "%s" + SQL_SUFFIX
) # hostname
118 # Create a record with a NULL entry
120 sql_set2
.append("%s,") # hostname
122 sql_set2
.append("NOW())") # created_on
123 sql_str
= ''.join(sql_set2
)
124 cursor
.execute(sql_str
% (link
, cleanTitle
, user_name
, keywordTitle
, rnd_val
, hostname
))
126 except MySQLdb
.OperationalError
, message
:
127 errorMessage
= "ERR %d:\n%s" % (message
[0], message
[1])
130 def hasEntityLink(self
, link
):
133 cursor
= self
.conn
.cursor()
135 sql_set
.append("select count(1) from entity_links where main_url = '%s'")
136 sql_str
= ''.join(sql_set
)
137 cursor
.execute(sql_str
% (link
))
138 data
= cursor
.fetchall()
140 except MySQLdb
.OperationalError
, message
:
141 errorMessage
= "ERR %d:\n%s" % (message
[0], message
[1])
153 def listSystemFeedItems(self
):
154 """System feed item articles have been inserted, now tranfer
155 these items into the entity links table"""
158 cursor
= self
.conn
.cursor()
160 sql_set
.append("select main_url, url_title, url_description, url_source, hostname from system_feed_items where process_count = 0 order by RAND()")
161 sql_str
= ''.join(sql_set
)
162 cursor
.execute(sql_str
)
163 data
= cursor
.fetchall()
164 self
.fields
= cursor
.description
166 except MySQLdb
.OperationalError
, message
:
167 errorMessage
= "ERR %d:\n%s" % (message
[0], message
[1])
172 raise "ERR: No data returned during listSystemFeedItems() call (try to run a scan on feeds)."
176 # FeedItem(rs,rs,rs,rs)
177 feed_item
= FeedItem()
178 feed_item
.mainUrl
= cgi
.escape(row
[0])
179 feed_item
.urlTitle
= cgi
.escape(row
[1])
180 feed_item
.urlDescription
= cgi
.escape(row
[2])
181 feed_item
.urlSource
= cgi
.escape(row
[3])
183 feed_item
.channelURL
= cgi
.escape(row
[4])
185 transform_data
.append(feed_item
)
187 return transform_data
189 def listScanFeeds(self
):
190 """Return a list of ScanFeed items"""
193 cursor
= self
.conn
.cursor()
195 sql_set
.append("select main_url, url_title, url_description, url_source from system_scan_feeds order by RAND()")
196 sql_str
= ''.join(sql_set
)
197 cursor
.execute(sql_str
)
198 data
= cursor
.fetchall()
199 self
.fields
= cursor
.description
201 except MySQLdb
.OperationalError
, message
:
202 errorMessage
= "ERR %d:\n%s" % (message
[0], message
[1])
209 # Transform into a list of simple objects
213 feed
.mainUrl
= cgi
.escape(row
[0])
214 feed
.urlTitle
= cgi
.escape(row
[1])
215 feed
.urlDescription
= cgi
.escape(row
[2])
216 feed
.urlSource
= cgi
.escape(row
[3])
217 transform_data
.append(feed
)
219 return transform_data