summaryrefslogtreecommitdiff
path: root/split.py
diff options
context:
space:
mode:
authornitromaster101@gmail.com <nitromaster101@gmail.com@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2>2009-07-22 18:45:54 +0000
committernitromaster101@gmail.com <nitromaster101@gmail.com@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2>2009-07-22 18:45:54 +0000
commitbc7d69f0956d1a66ffc9d3f4b645f6419e847331 (patch)
treea3b99784e9c3016b972e13bba07c90128fd6de32 /split.py
parent605b7096f3fbbe7cf000d7464e480d66fee3aa42 (diff)
cleanup, incorporate changes from code review, and move merge and split stuff into freebase.experimental
git-svn-id: http://freebase-python.googlecode.com/svn/trunk@201 5914aa95-5b3a-0410-a3b5-7b719e7fe9b2
Diffstat (limited to 'split.py')
-rw-r--r--split.py122
1 files changed, 0 insertions, 122 deletions
diff --git a/split.py b/split.py
deleted file mode 100644
index a8d0310..0000000
--- a/split.py
+++ /dev/null
@@ -1,122 +0,0 @@
-import freebase, freebase.schema
-from freebase.api.session import LITERAL_TYPE_IDS
-
-from copy import deepcopy
-
-## TODO: CLONE TYPES
-
-class AttributionNode(object):
- def __init__(self, s):
- self._dict = {}
- self.s = s
-
- def get(self, user):
- if self._dict.has_key(user):
- return self._dict[user]
-
- # create attribution node
- attribution_id = self.s.mqlwrite({"create" : "unconditional",
- "type": "/type/attribution",
- "id" : None })["id"]
- self._dict[user] = attribution_id
- return self._dict[user]
-
- def set(self, user, attribution_id):
- self._dict[user] = attribution_id
-
-
-s = freebase.api.HTTPMetawebSession("http://sandbox-freebase.com")
-
-# let's determine the split locations
-topic_id = "/en/the_beatles"
-
-a = AttributionNode(s)
-
-# get all types
-type_query = {"id" : topic_id, "type" : [{"id" : None}]}
-types = set([type_id["id"] for type_id in s.mqlread(type_query)["type"]])
-
-split = set(["/music/artist"])
-keep = types.difference(split)
-
-properties_expected = {}
-type_to_properties = {}
-
-for type_id in split:
- expected_type_property_query = { "id" : type_id,
- "type" : "/type/type",
- "properties" : [{
- "id" : None,
- "expected_type" : None
- }]}
- r = s.mqlread(expected_type_property_query)
- all_properties = []
- if r:
- for prop in r["properties"]:
- prop_id = prop["id"]
- prop_expected_type = prop["expected_type"]
- properties_expected[prop_id] = prop_expected_type
- all_properties.append(prop)
- type_to_properties[type_id] = all_properties
-
-# split
-
-## create new object with new types and correct attribution
-newname = s.mqlread({"id" : topic_id, "name" : None})["name"]
-#attribution = s.mqlread({"id" : topic_id, "attribution" : None})["attribution"]
-user_id = s.user_info()["id"]
-attribution = a.get(user_id)
-
-new_object_id = s.create_object(newname, included_types=list(split),
- create="unconditional",
- attribution=attribution)["id"]
-
-# import data from old
-# if expected_type is primitive (in LITERAL_TYPE_IDS), then we look for value.
-# Else, we look for id
-
-mega_query = { "id" : topic_id }
-for prop_id in properties_expected.iterkeys():
- mega_query.update({prop_id:[{}]})
-
-res = s.mqlread(mega_query)
-
-property_values = {}
-for prop, value in res.iteritems():
- if prop in properties_expected.iterkeys():
- # if value is primitive
- if properties_expected[prop] in LITERAL_TYPE_IDS:
- property_values[prop] = [{"value" : b["value"]}
- for b in res[prop]]
- else:
- property_values[prop] = [{"id" : b["id"]}
- for b in res[prop]]
-
-master_write_query = { "id" : new_object_id }
-master_delete_query = { "id" : topic_id }
-for prop, val in property_values.iteritems():
- if val:
- [v.update(connect="replace") for v in val]
- master_write_query.update({prop:val})
- deleteval = deepcopy(val)
- [dv.update(connect="delete") for dv in deleteval]
- master_delete_query.update({prop:deleteval})
-
-# before we write, we have to delete all the old information
-# this is because we don't can't have two similar guys connecting
-# to the same cvt
-
-# remove types (and properties from old)
-# delete types
-# (we can't get rid of included_types easily... not sure who depends on whom)
-delete_types_query = { "id" : topic_id,
- "type":[{"id" : type_id, "connect" : "delete"}
- for type_id in split]}
-s.mqlwrite(delete_types_query)
-
-# delete properties
-s.mqlwrite(master_delete_query)
-
-# add the data to the new guy
-s.mqlwrite(master_write_query)
-print "new object was", new_object_id