caboose-rets 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NTJjZmFkMmMwYjE3Yjc3ZmQ0ZmU1NDhjZjc0MzdjZjlhZTkwMTc4OA==
4
+ ZjZhMTdjZWFlNmQ0Y2JiYTNhNjhiNmRmM2Q4NTUyYThiNDE0NzZjYQ==
5
5
  data.tar.gz: !binary |-
6
- M2ZhOWNmMzZiMjFhNDcwNGFhOWVjNzIxZmNmNGNjOWI4ODBmNjE5ZA==
6
+ ZTlhOTIxNjRmMzJkODMzMjVjNzdhMjQyZDNmN2U5YTUzODMyYWEzMg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- Nzc2NWQ4NjQ3NzQ5YTRhZDRkZjg4ODhkMmNkNDMzNmU0YjYzNGZjOWIxYjg4
10
- ZGNkNjkzZGY3ZmFlYzhhODk4MzUxNGEzOTA1MmNhMTdkMTRmZTg1ODliZjAw
11
- NjY5NjYyMDMyYTQzZTUxZjJiMzg3MTgxNTdiYTU5N2Q4YjRhMGM=
9
+ MTg0NGRhNGYxYzg0YTUxNDAyMzVjYmFhODYzYzY2NWE4MmM0MTdkMWRmODcz
10
+ ZGI0MjFiM2FlYjMxNzllNjYxNWE4NTNlYmVhYWVmMzE5Mjk3NzFlMGI5Nzc3
11
+ YjU5NWE3ZjQ3N2YxMjIyZTFiMGRmM2RhMWQ0Y2ZkYzljODVmNTk=
12
12
  data.tar.gz: !binary |-
13
- ZDhkNWFjZmFkMjZkYjg0NWRkZWI2NThjMjA2NzAxZGVmODEwNzhiMzdmNWQ2
14
- MWNiZGRlZWM1ZmFiMjM0OWNhNjFiYmEwMWQwOTdhNDdjN2ZjM2JlODMxM2Y2
15
- NjQ2ZDI1MmVlOTk1YWY1MjBmYzZjN2RmZTExNTg5ZGFkMzRiOTA=
13
+ ZTg2ZTUyODEzZThhMjNjMDNhMDk3YWMzNTgyMGUxNDdiODc0MTRkMGI3Y2Ey
14
+ YWE5NWUzMTQyZDkyM2QyMjQ3NzI4YWU2MGEzNjcwZjM0YmI0NzA3ZTVjNGFl
15
+ ZjgzMTU1YWRhYzUzMDg5ZWI5MjZjNWViZjFiNGE1MDc0YjhmZTI=
@@ -94,7 +94,6 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
94
94
  self.import_modified_after(date_modified, 'Property' , 'LND')
95
95
  self.import_modified_after(date_modified, 'Property' , 'MUL')
96
96
  self.import_modified_after(date_modified, 'Property' , 'RES')
97
- self.update_coords
98
97
  end
99
98
 
100
99
  def self.update_images_after(date_modified)
@@ -167,6 +166,11 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
167
166
  obj.id = id
168
167
  obj.save
169
168
  end
169
+
170
+ case obj
171
+ when CabooseRets::CommercialProperty, CabooseRets::LandProperty, CabooseRets::MultiFamilyProperty, CabooseRets::ResidentialProperty
172
+ self.update_coords(obj)
173
+ end
170
174
  end
171
175
  end
172
176
 
@@ -198,24 +202,27 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
198
202
  # Property Images
199
203
  #=============================================================================
200
204
 
201
- def self.download_property_images_modified_after(date_modified, start_with_mls_acct = nil)
202
- models = [
203
- CabooseRets::CommercialProperty,
204
- CabooseRets::LandProperty,
205
- CabooseRets::MultiFamilyProperty,
206
- CabooseRets::ResidentialProperty
207
- ]
208
- models.each do |model|
209
- found_it = start_with_mls_acct ? false : true
210
- model.where("photo_date_modified > ?", date_modified.strftime('%FT%T')).reorder(:mls_acct).each do |p|
211
- found_it = true if !found_it && p.mls_acct == start_with_mls_acct
212
- self.download_property_images(p) if found_it
205
+ def self.download_property_images_modified_after(date_modified)
206
+ models = [CabooseRets::CommercialProperty, CabooseRets::LandProperty, CabooseRets::MultiFamilyProperty, CabooseRets::ResidentialProperty]
207
+ names = ["commercial", "land", "multi-family", "residential"]
208
+ i = 0
209
+ models.each do |model|
210
+ count = model.where("photo_date_modified > ?", date_modified.strftime('%FT%T')).count
211
+ j = 1
212
+ model.where("photo_date_modified > ?", date_modified.strftime('%FT%T')).reorder(:mls_acct).each do |p|
213
+ self.log("Downloading images for #{j} of #{count} #{names[i]} properties...")
214
+ self.download_property_images(p)
215
+ j = j + 1
213
216
  end
217
+ i = i + 1
214
218
  end
215
219
  end
216
220
 
217
221
  def self.download_property_images(p)
218
222
  self.refresh_property_media(p)
223
+
224
+ self.log("-- Downloading images and resizing for #{p.mls_acct}")
225
+ media = []
219
226
  self.client.get_object(:resource => :Property, :type => :Photo, :location => true, :id => p.id) do |headers, content|
220
227
 
221
228
  # Find the associated media record for the image
@@ -224,17 +231,24 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
224
231
 
225
232
  if m.nil?
226
233
  self.log("Can't find media record for #{p.mls_acct} #{filename}.")
227
- else
234
+ else
228
235
  m.image = URI.parse(headers['location'])
229
- m.save
230
- end
231
-
236
+ media << m
237
+ #m.save
238
+ end
232
239
  end
240
+
241
+ self.log("-- Uploading images to S3 for #{p.mls_acct}")
242
+ media.each do |m|
243
+ m.save
244
+ end
233
245
  end
234
246
 
235
247
  def self.refresh_property_media(p)
248
+ self.log("-- Deleting images and metadata for #{p.mls_acct}...")
236
249
  CabooseRets::Media.where(:mls_acct => p.mls_acct, :media_type => 'Photo').destroy_all
237
250
 
251
+ self.log("-- Downloading image metadata for #{p.mls_acct}...")
238
252
  params = {
239
253
  :search_type => 'Media',
240
254
  :class => 'GFX',
@@ -256,21 +270,25 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
256
270
  def self.update_coords(p = nil)
257
271
  if p.nil?
258
272
  models = [CabooseRets::CommercialProperty, CabooseRets::LandProperty, CabooseRets::MultiFamilyProperty, CabooseRets::ResidentialProperty]
273
+ names = ["commercial", "land", "multi-family", "residential"]
274
+ i = 0
259
275
  models.each do |model|
276
+ self.log "Updating coords #{names[i]} properties..."
260
277
  model.where(:latitude => nil).reorder(:mls_acct).each do |p|
261
278
  self.update_coords(p)
262
279
  end
280
+ i = i + 1
263
281
  end
264
282
  return
265
283
  end
266
-
284
+
285
+ self.log "Getting coords for mls_acct #{p.mls_acct}..."
267
286
  coords = self.coords_from_address(CGI::escape "#{p.street_num} #{p.street_name}, #{p.city}, #{p.state} #{p.zip}")
268
287
  return if coords.nil? || coords == false
269
288
 
270
289
  p.latitude = coords['lat']
271
290
  p.longitude = coords['lng']
272
- p.save
273
- self.log "Saved coords for mls_acct #{p.mls_acct}"
291
+ p.save
274
292
  end
275
293
 
276
294
  def self.coords_from_address(address)
@@ -1,3 +1,3 @@
1
1
  module CabooseRets
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
@@ -15,6 +15,61 @@ namespace :caboose_rets do
15
15
  create_multi_family(c)
16
16
  end
17
17
 
18
+ desc "Updates all the listings from MLS"
19
+ task :update_rets => :environment do
20
+ if task_is_locked
21
+ CabooseRets::RetsImporter.log("caboose_rets:update_rets task is locked. Aborting.")
22
+ next
23
+ end
24
+ CabooseRets::RetsImporter.log("Updating rets data...")
25
+ task_started = lock_task
26
+
27
+ begin
28
+ # RetsImporter.update_all_after(last_updated - Rational(1,86400))
29
+ CabooseRets::RetsImporter.update_after(last_updated)
30
+ save_last_updated(task_started)
31
+ unlock_task
32
+ rescue
33
+ raise
34
+ ensure
35
+ unlock_task_if_last_updated(task_started)
36
+ end
37
+ end
38
+
39
+ def last_updated
40
+ if !Caboose::Setting.exists?(:name => 'rets_last_updated')
41
+ Caboose::Setting.create(:name => 'rets_last_updated', :value => '2013-08-06T00:00:01')
42
+ end
43
+ s = Caboose::Setting.where(:name => 'rets_last_updated').first
44
+ return DateTime.parse(s.value)
45
+ end
46
+
47
+ def save_last_updated(d)
48
+ s = Caboose::Setting.where(:name => 'rets_last_updated').first
49
+ s.value = d.strftime('%FT%T')
50
+ s.save
51
+ end
52
+
53
+ def task_is_locked
54
+ return Caboose::Setting.exists?(:name => 'rets_update_running')
55
+ end
56
+
57
+ def lock_task
58
+ date = DateTime.now
59
+ Caboose::Setting.create(:name => 'rets_update_running', :value => date.strftime('%F %T'))
60
+ return date
61
+ end
62
+
63
+ def unlock_task
64
+ Caboose::Setting.where(:name => 'rets_update_running').first.destroy
65
+ end
66
+
67
+ def unlock_task_if_last_updated(d)
68
+ setting = Caboose::Setting.where(:name => 'rets_update_running').first
69
+ unlock_task if setting && d.strftime('%F %T') == setting.value
70
+ end
71
+
72
+ #=============================================================================
18
73
  def create_agents(c)
19
74
  c.drop_table :rets_agents if c.table_exists?('rets_agents')
20
75
  c.create_table :rets_agents do |t|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-rets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry