Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import json
- import uuid
- import hashlib
- from SPARQLWrapper import SPARQLWrapper, JSON, CSV
- from collections import Counter
- def get_preferences():
- fuseki_client = SPARQLWrapper("http://ec2-54-93-236-36.eu-central-1.compute.amazonaws.com:3030/v2/")
- query = """
- PREFIX users: <http://www.semanticweb.org/ontologies/users#>
- PREFIX preferences: <http://www.semanticweb.org/milut/ontologies/preferences#>
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
- PREFIX owl: <http://www.w3.org/2002/07/owl#>
- PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
- SELECT ?label ?user_id ?views
- WHERE {
- ?db rdf:type preferences:Preference .
- ?db preferences:database_id ?db_id .
- ?db_id rdfs:label ?label .
- ?db preferences:views_count ?views .
- optional {
- ?db preferences:users ?user .
- ?user users:user_id ?user_id .
- }
- }
- """
- fuseki_client.setQuery(query)
- fuseki_client.method = "POST"
- fuseki_client.setReturnFormat(CSV)
- results = fuseki_client.query().convert()
- prefs = {}
- for line in results.decode('utf-8').strip().split('\r\n')[1:]:
- label, uid, views = line.split(',')
- if label not in prefs:
- prefs[label] = {
- 'views': views,
- 'user_ids': []
- }
- if len(uid) > 0:
- prefs[label]['user_ids'].append(uid)
- return prefs
- def get_db_labels():
- return [
- "Oracle",
- "ApacheJena",
- "Cassandra",
- "Cloudant",
- "DB2",
- "DynamoDB",
- "HBase",
- "Hive",
- "Hypertable",
- "Memchached",
- "MySQL",
- "Neo4j",
- "MapR-DB",
- "RavenDB",
- "Redis",
- "RiakKV",
- "SQLite",
- "Stardog",
- "Titan",
- "MongoDB"
- ]
- def insert_preference(label, views_count=0):
- supported_dbs = get_db_labels()
- pref = get_preference(label)
- if label not in supported_dbs or pref is not None:
- return False
- fuseki_client = SPARQLWrapper("http://ec2-54-93-236-36.eu-central-1.compute.amazonaws.com:3030/v2/update")
- query = """
- PREFIX owl: <http://www.w3.org/2002/07/owl#>
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
- PREFIX users: <http://www.semanticweb.org/ontologies/users#>
- PREFIX preferences: <http://www.semanticweb.org/milut/ontologies/preferences#>
- PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
- INSERT {
- preferences:%s rdf:type preferences:Preference ;
- preferences:database_id ?x ;
- preferences:views_count %d
- } WHERE {
- ?x rdfs:label "%s"
- }
- """ % (label, views_count, label)
- fuseki_client.setQuery(query)
- fuseki_client.queryType = "INSERT"
- fuseki_client.method = "POST"
- fuseki_client.query()
- return True
- def delete_preference(label):
- if label not in get_db_labels():
- return False
- fuseki_client = SPARQLWrapper("http://ec2-54-93-236-36.eu-central-1.compute.amazonaws.com:3030/v2/update")
- query = """
- PREFIX users: <http://www.semanticweb.org/ontologies/users#>
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
- PREFIX owl: <http://www.w3.org/2002/07/owl#>
- PREFIX preferences: <http://www.semanticweb.org/milut/ontologies/preferences#>
- DELETE WHERE {
- preferences:%s a preferences:Preference ;
- ?property ?value
- }
- """ % label
- fuseki_client.setQuery(query)
- fuseki_client.queryType = "DELETE"
- fuseki_client.method = "POST"
- fuseki_client.query()
- return True
- def get_preference(label):
- if label not in get_db_labels():
- return None
- fuseki_client = SPARQLWrapper("http://ec2-54-93-236-36.eu-central-1.compute.amazonaws.com:3030/v2/")
- query = """
- PREFIX preferences: <http://www.semanticweb.org/milut/ontologies/preferences#>
- PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
- PREFIX users: <http://www.semanticweb.org/ontologies/users#>
- SELECT ?prefid ?dbid ?ctr ?uid
- WHERE {
- ?prefid a preferences:Preference ;
- preferences:database_id ?dbid ;
- preferences:views_count ?ctr .
- optional {
- ?prefid preferences:users ?user .
- ?user users:user_id ?uid .
- }
- ?dbid rdfs:label "%s" .
- }
- """ % label
- fuseki_client.setQuery(query)
- fuseki_client.method = "POST"
- fuseki_client.setReturnFormat(CSV)
- results = fuseki_client.query().convert()
- pref = {}
- for idx, line in enumerate(results.decode('utf-8').strip().split('\r\n')[1:]):
- pref_url, db_url, ctr, uid = line.split(',')
- if idx == 0:
- pref['preference'] = pref_url
- pref['database'] = db_url
- pref['views_count'] = ctr
- pref['user_ids'] = [uid] if len(uid) > 0 else []
- else:
- pref['user_ids'].append(uid)
- if len(pref) == 0:
- return None
- return pref
- def add_user_preference(preference_label, user_id):
- insert_preference(preference_label)
- fuseki_client = SPARQLWrapper("http://ec2-54-93-236-36.eu-central-1.compute.amazonaws.com:3030/v2/update")
- query = """
- PREFIX users: <http://www.semanticweb.org/ontologies/users#>
- PREFIX preferences: <http://www.semanticweb.org/milut/ontologies/preferences#>
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
- PREFIX owl: <http://www.w3.org/2002/07/owl#>
- PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
- INSERT {
- preferences:%s preferences:users ?s .
- }
- WHERE {
- ?s rdf:type users:User .
- ?s users:user_id "%s" .
- }
- """ % (preference_label, user_id)
- fuseki_client.setQuery(query)
- fuseki_client.queryType = "INSERT"
- fuseki_client.method = "POST"
- fuseki_client.query()
- return True
- def remove_user_preference(preference_label, user_id):
- if preference_label not in get_db_labels():
- return False
- fuseki_client = SPARQLWrapper("http://ec2-54-93-236-36.eu-central-1.compute.amazonaws.com:3030/v2/update")
- query = """
- PREFIX users: <http://www.semanticweb.org/ontologies/users#>
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
- PREFIX owl: <http://www.w3.org/2002/07/owl#>
- PREFIX preferences: <http://www.semanticweb.org/milut/ontologies/preferences#>
- DELETE {
- preferences:%s preferences:users ?x
- }
- WHERE {
- ?x users:user_id "%s"
- }
- """ % (preference_label, user_id)
- fuseki_client.setQuery(query)
- fuseki_client.queryType = "DELETE"
- fuseki_client.method = "POST"
- fuseki_client.query()
- return True
- def update_preference(label, views_count):
- if label not in get_db_labels():
- return False
- fuseki_client = SPARQLWrapper("http://ec2-54-93-236-36.eu-central-1.compute.amazonaws.com:3030/v2/")
- query = """
- PREFIX users: <http://www.semanticweb.org/ontologies/users#>
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
- PREFIX owl: <http://www.w3.org/2002/07/owl#>
- PREFIX preferences: <http://www.semanticweb.org/milut/ontologies/preferences#>
- DELETE WHERE {
- preferences:%s preferences:views_count ?x
- }
- """ % label
- fuseki_client.setQuery(query)
- fuseki_client.queryType = "DELETE"
- fuseki_client.method = "POST"
- fuseki_client.query()
- query = """
- PREFIX users: <http://www.semanticweb.org/ontologies/users#>
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
- PREFIX owl: <http://www.w3.org/2002/07/owl#>
- PREFIX preferences: <http://www.semanticweb.org/milut/ontologies/preferences#>
- INSERT DATA {
- preferences:%s preferences:views_count %d
- }
- """ % (label, views_count)
- fuseki_client.setQuery(query)
- fuseki_client.queryType = "INSERT"
- fuseki_client.method = "POST"
- fuseki_client.query()
- return True
- def get_stats1(prefs):
- ctr = {}
- for key in prefs:
- ctr[key] = int(prefs[key].get('views'))
- sum_all = sum(ctr.values())
- for key in ctr:
- ctr[key] = int(10000 * ctr[key] / sum_all) / 100
- result = {}
- for k, v in sorted(list(ctr.items()), key=lambda x: x[1], reverse=True)[:4]:
- result[k] = v
- result['Others'] = int((100 - sum(result.values())) * 100) / 100
- return result
- def get_ststs2():
- all_preferences = get_preferences
- labels = get_db_labels()
- print(labels.keys())
- prefs = {}
- # for label in labels:
- # programming_languages = get_programming_languages(label)
- # if programming_languages is None:
- # continue
- # for language in programming_languages:
- # language_str = language[0]
- # if not language_str in prefs:
- # prefs[language_str] = 1
- # else:
- # prefs[language_str] += 1
- #
- #
- # sum_all = sum(prefs.values())
- #
- # for key in prefs:
- # prefs[key] = int(10000 * prefs[key] / sum_all) / 100
- #
- # result = {}
- # for k, v in sorted(list(prefs.items()), key=lambda x: x[1], reverse=True)[:4]:
- # result[k] = v
- #
- # result['Others'] = int((100 - sum(result.values())) * 100) / 100
- #
- #
- # return result
- def get_programming_languages(label):
- fuseki_client = SPARQLWrapper("http://ec2-54-93-236-36.eu-central-1.compute.amazonaws.com:3030/dbs")
- query = """
- PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
- PREFIX db:<http://www.semanticweb.org/ontologies/databases/tbox/>
- SELECT ?name
- WHERE {
- ?x a db:DatabaseManagementSystem .
- ?x rdfs:label "%s"@en ;
- db:supportsProgrammingLanguage ?prg .
- ?prg rdfs:label ?name . }
- """ %label
- fuseki_client.setQuery(query)
- fuseki_client.method = "POST"
- fuseki_client.setReturnFormat(CSV)
- results = fuseki_client.query().convert()
- pref = []
- for idx, line in enumerate(results.decode('utf-8').strip().split('\r\n')[1:]):
- name = line.split(',')
- pref.append(name)
- if len(pref) == 0:
- return None
- return pref
- # def get_stats2(prefs):
- def tests():
- print(get_preferences())
- pass
- # print(get_preferences())
- # print(delete_preference("MongoDb"))
- # print(get_preference('HBase'))
- # print(insert_preference('Redis', 8))
- # print(add_user_preference('Oracle', '38325f1f-3176-40b0-a3bf-2b653c9f3c8d'))
- # print(remove_user_preference('Oracle', '38325f1f-3176-40b0-a3bf-2b653c9f3c8d'))
- # print(update_preference('Cassandra', 25))
- # print(get_stats1())
- tests()
- def lambda_handler(event, context):
- prefs = get_preferences()
- stats1 = get_stats1(prefs)
- # stats2 = get_stats2(prefs)
- return {
- "statusCode": 200,
- "headers" : {"Access-Control-Allow-Origin":"*"},
- "body": json.dumps(stats1, indent = 2)}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement