Пример #1
0
def addJSONLinksByUser(data, userId):
    #FIXME: change insertion algorithm for sql queries that inserting data
    #as zip, json or ...
    #curTime = time.time()
    query = {"linksQuery":StringHolder("INSERT INTO link (id, user_id, url, url_hash, title, description, type_name, modified_at) VALUES\n"),
             "updateLinkSubQuery":{"id":StringHolder(""),
                                   "title":StringHolder(""),
                                   "description":StringHolder(""),
                                   "type_name":StringHolder(""),
                                   "modified_at":StringHolder("")},
             "tagsQuery":StringHolder("INSERT INTO tag (id, user_id, name) VALUES\n"),
             "mapsQuery":StringHolder("INSERT INTO link_tag_map (tag_id, link_id) VALUES\n"),
             "mdQuery":StringHolder("INSERT INTO meta_data (link_id, l_key, value) VALUES\n")}
    
    tags = []
    savedTags = tagQM.getTagNames(userId)
    savedLinks = linkQM.getLinkUrlsAndIds(userId)
    parseData(userId, data, tags, query, savedLinks, savedTags)
    
    #print "calculating time: " + str(utils.timeDifference(curTime)) + " ms"
    #curTime = time.time()
    
    conn = db.connect()
    cursor = conn.cursor()
    if not query["linksQuery"].value.endswith("VALUES\n"):
        cursor.execute(query["linksQuery"].value[:-2])
    if not query["mdQuery"].value.endswith("VALUES\n"):
        cursor.execute(query["mdQuery"].value[:-2])
    if not query["tagsQuery"].value.endswith("VALUES\n"):
        cursor.execute(query["tagsQuery"].value[:-2])
    #FIXME : check if link refer to another tag
    if not query["mapsQuery"].value.endswith("VALUES\n"):
        cursor.execute(query["mapsQuery"].value[:-2])
    if query["updateLinkSubQuery"]["id"].value != "":
        cursor.execute(buildUpdateQuery(query["updateLinkSubQuery"]))
    
    conn.commit()
    cursor.close()
    #print "database request time: " + str(utils.timeDifference(curTime)) + " ms"   
    return