made the functions lazy

master
Abhinav Sarkar 2010-07-25 00:12:39 +05:30
parent ad523ca0e8
commit 64ee5361b5
1 changed files with 30 additions and 26 deletions

View File

@ -90,13 +90,13 @@
(defn- get-data [params] (defn- get-data [params]
(let [url (create-url params) (let [url (create-url params)
data (-> url get-url read-json keywordize-keys)] data (-> url get-url read-json keywordize-keys)]
(if (-> data :error nil?) (if (-> data :error nil?)
data data
(throw (IllegalArgumentException. (-> data :message str)))))) (throw (IllegalArgumentException. (-> data :message str))))))
(defn- create-get-obj-fn [fixed-params parse-fn] (defn- create-get-obj-fn [fixed-params parse-fn]
(fn [more-params] (fn [more-params]
(parse-fn (get-data (merge fixed-params more-params))))) (parse-fn #(get-data (merge fixed-params more-params)))))
(defn- create-get-obj-field-fn [create-obj-fn extract-obj-id-fields-fn] (defn- create-get-obj-field-fn [create-obj-fn extract-obj-id-fields-fn]
(fn [obj field-kw] (fn [obj field-kw]
@ -106,13 +106,14 @@
field-val)))) field-val))))
(defn- create-parse-one-or-more-fn [parse-one-fn extractor-fn] (defn- create-parse-one-or-more-fn [parse-one-fn extractor-fn]
(fn [data] (fn [data-fn]
(let [one-or-more (extractor-fn data)] (lazy-seq
(do (let [data (data-fn) one-or-more (extractor-fn data)]
(debug (str "parsing: " data)) (do
(if (map? one-or-more) (debug (str "parsing: " data))
(vector (parse-one-fn one-or-more)) (if (map? one-or-more)
(vec (map parse-one-fn one-or-more))))))) (vector (parse-one-fn one-or-more))
(vec (map parse-one-fn one-or-more))))))))
(defn- create-parse-string-or-list-fn [obj-from-name-fn extractor-fn] (defn- create-parse-string-or-list-fn [obj-from-name-fn extractor-fn]
(fn [data] (fn [data]
@ -229,13 +230,14 @@
;;;;;;;;;; artist.getinfo ;;;;;;;;;; ;;;;;;;;;; artist.getinfo ;;;;;;;;;;
(defn- parse-artist-getinfo [data] (defn- parse-artist-getinfo [data-fn]
(do (let [data (data-fn)]
(debug (str "parse-artist-getinfo: " data)) (do
(-> data :artist parse-artist))) (debug (str "parse-artist-getinfo: " data))
(-> data :artist parse-artist))))
(def #^{:private true} (def #^{:private true} get-artist
get-artist (create-get-obj-fn {:method "artist.getinfo"} parse-artist-getinfo)) (create-get-obj-fn {:method "artist.getinfo"} parse-artist-getinfo))
(defmulti artist (defmulti artist
(fn [artist-or-mbid & _] (fn [artist-or-mbid & _]
@ -417,15 +419,17 @@
(declare get-artist-pastevents) (declare get-artist-pastevents)
(defn- parse-artist-pastevents [data] (defn- parse-artist-pastevents [data-fn]
(let [pages (-> data :events attr-kw :totalPages safe-parse-int) (lazy-seq
page (-> data :events attr-kw :page safe-parse-int) (let [data (data-fn)
artist-name (-> data :events attr-kw :artist)] pages (-> data :events attr-kw :totalPages safe-parse-int)
(if (= page pages) page (-> data :events attr-kw :page safe-parse-int)
(parse-artist-events data) artist-name (-> data :events attr-kw :artist)]
(lazy-cat (if (= page pages)
(parse-artist-events data) (parse-artist-events data-fn)
(get-artist-pastevents {:artist artist-name :page (inc page)}))))) (lazy-cat
(parse-artist-events data-fn)
(get-artist-pastevents {:artist artist-name :page (inc page)}))))))
(defn- get-artist-pastevents (defn- get-artist-pastevents
([params] ([params]