# Path: duckpond/apps/service/app.py
# def authenticate(f):
#    def wrapper(*args, **kwargs):
# def before_request():
# 
# Path: duckpond/data/sparql.py
# class SPARQL:
# 
#    def __init__(self):
#       self.statement = io.StringIO()
# 
#    def start(self,prefixes):
#       for key in prefixes:
#          self.statement.write('prefix {}: {}\n'.format(key,uri(prefixes[key])))
#       return self
# 
#    def construct(self,names):
#       self.statement.write('construct {')
#       for name in names:
#          write_var(self.statement,name)
#          self.statement.write(' ')
#       self.statement.write('}\n')
#       return self
# 
#    def select(self,names):
#       self.statement.write('select ')
#       for name in names:
#          write_var(self.statement,name)
#          self.statement.write(' ')
#       self.statement.write('\n')
#       return self
# 
#    def fromGraphs(self,graphs):
#       for graph in graphs:
#          self.statement.write('from {0}\n'.format(uri(graph)))
#       return self
# 
#    def fromNameGraphs(self,graphs):
#       for graph in graphs:
#          self.statement.write('from named {0}\n'.format(uri(graph)))
#       return self
# 
#    def withGraph(self,graph):
#       self.statement.write("with {0}\n".format(uri(graph)))
#       return self
# 
#    def where(self,*expressions):
#       self.statement.write('where {')
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def group(self,*expressions):
#       self.statement.write('{')
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def insert(self,*expressions):
#       self.statement.write('insert data {')
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def delete(self,*expressions):
#       self.statement.write('delete data {')
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def anyGraph(self,*expressions):
#       self.statement.write('graph ?g {')
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def forGraph(self,graph,*expressions):
#       self.statement.write('graph {0} {'.format(uri(graph)))
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def newline(self):
#       self.statement.write('\n')
#       return self;
# 
#    def orderBy(self,*expressions):
#       self.statement.write('order by ')
#       first = True
#       for expression in expressions:
#          if not first:
#             self.statement.write(',')
#          self.statement.write(str(expression))
#       self.statement.write('\n')
#       return self
# 
#    def groupBy(self,expression):
#       self.statement.write('group by ')
#       self.statement.write(expression)
#       self.statement.write('\n')
#       return self
# 
#    def __str__(self):
#       return self.statement.getvalue()


import io,json
import requests
import urllib
import uuid
from datetime import datetime
from pytz import timezone
from enum import Enum
from flask import render_template, redirect, request, url_for, escape, flash, g, abort, make_response, Response, stream_with_context
from .app import app
from duckpond.data.sparql import SPARQL
         }
         if item[7] is not None:
            ld['datePublished'] = literal(item[7])
         items.append(ld)
      return jsonld_response(json.dumps(items))

   # POST creates an entity
   if request.method == 'POST':
      if 'writer' not in request.roles:
         abort(401)

      # Parse the incoming JSON-LD data
      force = request.headers['Content-Type'].startswith('application/ld+json')
      data = request.get_json(force=force)
      if data is None:
         abort(400)
      if 'name' not in data or \
         'genre' not in data or \
         '@type' not in data:
         abort(400)

      # Check to see if the name/genre already exists
      q = SPARQL() \
            .start({ 'schema' : 'http://schema.org/'}) \
            .select(['url']) \
            .where('?s schema:genre {}; schema:name {}; schema:url ?url'.format(value(data['genre']),value(data['name'])))
      existing = service.query(q)
      if len(existing['values'])>0:
         url = uri(existing['values'][0][0])
         id = url[url.rfind('/',0,-1)+1:-1]

# Path: duckpond/apps/service/app.py
# def authenticate(f):
#    def wrapper(*args, **kwargs):
# def before_request():
# 
# Path: duckpond/data/sparql.py
# class SPARQL:
# 
#    def __init__(self):
#       self.statement = io.StringIO()
# 
#    def start(self,prefixes):
#       for key in prefixes:
#          self.statement.write('prefix {}: {}\n'.format(key,uri(prefixes[key])))
#       return self
# 
#    def construct(self,names):
#       self.statement.write('construct {')
#       for name in names:
#          write_var(self.statement,name)
#          self.statement.write(' ')
#       self.statement.write('}\n')
#       return self
# 
#    def select(self,names):
#       self.statement.write('select ')
#       for name in names:
#          write_var(self.statement,name)
#          self.statement.write(' ')
#       self.statement.write('\n')
#       return self
# 
#    def fromGraphs(self,graphs):
#       for graph in graphs:
#          self.statement.write('from {0}\n'.format(uri(graph)))
#       return self
# 
#    def fromNameGraphs(self,graphs):
#       for graph in graphs:
#          self.statement.write('from named {0}\n'.format(uri(graph)))
#       return self
# 
#    def withGraph(self,graph):
#       self.statement.write("with {0}\n".format(uri(graph)))
#       return self
# 
#    def where(self,*expressions):
#       self.statement.write('where {')
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def group(self,*expressions):
#       self.statement.write('{')
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def insert(self,*expressions):
#       self.statement.write('insert data {')
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def delete(self,*expressions):
#       self.statement.write('delete data {')
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def anyGraph(self,*expressions):
#       self.statement.write('graph ?g {')
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def forGraph(self,graph,*expressions):
#       self.statement.write('graph {0} {'.format(uri(graph)))
#       for expression in expressions:
#          self.statement.write(str(expression))
#          self.statement.write('\n')
#       self.statement.write('}\n')
#       return self
# 
#    def newline(self):
#       self.statement.write('\n')
#       return self;
# 
#    def orderBy(self,*expressions):
#       self.statement.write('order by ')
#       first = True
#       for expression in expressions:
#          if not first:
#             self.statement.write(',')
#          self.statement.write(str(expression))
#       self.statement.write('\n')
#       return self
# 
#    def groupBy(self,expression):
#       self.statement.write('group by ')
#       self.statement.write(expression)
#       self.statement.write('\n')
#       return self
# 
#    def __str__(self):
#       return self.statement.getvalue()


# Path: duckpond/apps/service/api.py
import io,json
import requests
import urllib
import uuid
from datetime import datetime
from pytz import timezone
from enum import Enum
from flask import render_template, redirect, request, url_for, escape, flash, g, abort, make_response, Response, stream_with_context
from .app import app
from duckpond.data.sparql import SPARQL

         }
         if item[7] is not None:
            ld['datePublished'] = literal(item[7])
         items.append(ld)
      return jsonld_response(json.dumps(items))

   # POST creates an entity
   if request.method == 'POST':
      if 'writer' not in request.roles:
         abort(401)

      # Parse the incoming JSON-LD data
      force = request.headers['Content-Type'].startswith('application/ld+json')
      data = request.get_json(force=force)
      if data is None:
         abort(400)
      if 'name' not in data or \
         'genre' not in data or \
         '@type' not in data:
         abort(400)

      # Check to see if the name/genre already exists
      q = SPARQL() \
            .start({ 'schema' : 'http://schema.org/'}) \
            .select(['url']) \
            .where('?s schema:genre {}; schema:name {}; schema:url ?url'.format(value(data['genre']),value(data['name'])))
      existing = service.query(q)
      if len(existing['values'])>0:
         url = uri(existing['values'][0][0])
         id = url[url.rfind('/',0,-1)+1:-1]

         location = app.config['LOCATION_TEMPLATE'].format(**{'id' : id})