+
+
diff --git a/app.yaml b/app.yaml
index 5b75406c..3e09de3b 100644
--- a/app.yaml
+++ b/app.yaml
@@ -1,6 +1,6 @@
# ffd-retief-hrd fanfictiondownloader
application: fanfictiondownloader
-version: 4-4-5
+version: 4-4-7
runtime: python27
api_version: 1
threadsafe: true
@@ -35,8 +35,8 @@ handlers:
- url: /.*
script: main.app
-builtins:
-- datastore_admin: on
+#builtins:
+#- datastore_admin: on
libraries:
- name: django
diff --git a/fanficdownloader/story.py b/fanficdownloader/story.py
index c8f06a04..5e94164f 100644
--- a/fanficdownloader/story.py
+++ b/fanficdownloader/story.py
@@ -218,7 +218,7 @@ class Story:
value = re.sub(p,v,value)
return value
- def getMetadata(self, key, removeallentities=False):
+ def getMetadata(self, key, removeallentities=False, doreplacements=True):
value = None
if self.getLists().has_key(key):
value = ', '.join(self.getList(key))
@@ -232,21 +232,22 @@ class Story:
if key == "datePublished" or key == "dateUpdated":
value = value.strftime("%Y-%m-%d")
- value=self.doReplacments(value)
+ if doreplacements:
+ value=self.doReplacments(value)
if removeallentities and value != None:
return removeAllEntities(value)
else:
return value
- def getAllMetadata(self, removeallentities=False):
+ def getAllMetadata(self, removeallentities=False, doreplacements=True):
'''
All single value *and* list value metadata as strings.
'''
allmetadata = {}
for k in self.metadata.keys():
- allmetadata[k] = self.getMetadata(k, removeallentities)
+ allmetadata[k] = self.getMetadata(k, removeallentities, doreplacements)
for l in self.listables.keys():
- allmetadata[l] = self.getMetadata(l, removeallentities)
+ allmetadata[l] = self.getMetadata(l, removeallentities, doreplacements)
return allmetadata
diff --git a/ffstorage.py b/ffstorage.py
index 92e29d04..bad9b4a4 100644
--- a/ffstorage.py
+++ b/ffstorage.py
@@ -13,8 +13,23 @@
# limitations under the License.
#
+import pickle, copy
from google.appengine.ext import db
+class ObjectProperty(db.Property):
+ data_type = db.Blob
+
+ def get_value_for_datastore(self, model_instance):
+ value = self.__get__(model_instance, model_instance.__class__)
+ pickled_val = pickle.dumps(value,protocol=pickle.HIGHEST_PROTOCOL)
+ if value is not None: return db.Blob(pickled_val)
+
+ def make_value_from_datastore(self, value):
+ if value is not None: return pickle.loads(value)
+
+ def default_value(self):
+ return copy.copy(self.default)
+
class DownloadMeta(db.Model):
user = db.UserProperty()
url = db.StringProperty()
@@ -37,3 +52,12 @@ class DownloadData(db.Model):
class UserConfig(db.Model):
user = db.UserProperty()
config = db.BlobProperty()
+
+class SavedMeta(db.Model):
+ url = db.StringProperty()
+ title = db.StringProperty()
+ author = db.StringProperty()
+ date = db.DateTimeProperty(auto_now_add=True)
+ count = db.IntegerProperty()
+ meta = ObjectProperty()
+
diff --git a/index.html b/index.html
index eb193e75..43ec8f2b 100644
--- a/index.html
+++ b/index.html
@@ -54,9 +54,11 @@
much easier.
-
New Site Added
+
New Feature Added
- Support for archive.skyehawke.com has been added. Thanks to Ida Leter for implementing this.
+ You can now see a list of downloaded fanfics by all
+ users by most popular
+ or most recent.
Questions? Check out our
@@ -66,7 +68,7 @@
If you have any problems with this application, please
report them in
the FanFictionDownLoader Google Group. The
- Previous Version is also available for you to use if necessary.
+ Previous Version is also available for you to use if necessary.