├── .dockerignore ├── .github └── workflows │ └── build.yml ├── .gitignore ├── CHANGELOG.md ├── CITATION.cff ├── Dockerfile ├── LICENSE ├── README.md ├── Taskfile.yml ├── assets ├── LICENSE.txt ├── quitstore.png ├── quitstore.svg └── quitstore_allpath.svg ├── config.example.ttl ├── config.yml ├── doap.ttl ├── poetry.lock ├── pyproject.toml ├── quit.spec ├── quit ├── __init__.py ├── application.py ├── cache.py ├── conf.py ├── core.py ├── exceptions.py ├── git.py ├── graphs.py ├── helpers.py ├── merge.py ├── namespace.py ├── plugins │ ├── __init__.py │ └── serializers │ │ ├── __init__.py │ │ └── results │ │ ├── __init__.py │ │ └── htmlresults.py ├── provenance.py ├── run.py ├── tools │ ├── __init__.py │ ├── algebra.py │ ├── evaluate.py │ ├── processor.py │ └── update.py ├── utils.py └── web │ ├── __init__.py │ ├── app.py │ ├── extras │ ├── __init__.py │ └── commits_graph.py │ ├── modules │ ├── __init__.py │ ├── application.py │ ├── debug.py │ ├── endpoint.py │ └── git.py │ ├── service.py │ ├── static │ ├── css │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap.min.css │ │ ├── bootstrap.min.css.map │ │ ├── codemirror.css │ │ ├── font-awesome.min.css │ │ ├── quit.css │ │ ├── yasqe.min.css │ │ └── yasr.min.css │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ ├── fontawesome-webfont.woff2 │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ ├── glyphicons-halflings-regular.woff2 │ │ ├── roboto-condensed-v14-latin-regular.eot │ │ ├── roboto-condensed-v14-latin-regular.svg │ │ ├── roboto-condensed-v14-latin-regular.ttf │ │ ├── roboto-condensed-v14-latin-regular.woff │ │ └── roboto-condensed-v14-latin-regular.woff2 │ ├── js │ │ ├── bootstrap.min.js │ │ ├── jquery-3.2.1.min.js │ │ ├── jquery.commits-graph.js │ │ ├── jquery.commits-graph.min.js │ │ ├── yasqe.min.js │ │ ├── yasqe.min.js.map │ │ ├── yasr.min.js │ │ └── yasr.min.js.map │ └── octicons │ │ ├── data.json │ │ ├── octicons-master.sketch │ │ ├── octicons.css │ │ └── svg │ │ ├── alert.svg │ │ ├── arrow-down.svg │ │ ├── arrow-left.svg │ │ ├── arrow-right.svg │ │ ├── arrow-small-down.svg │ │ ├── arrow-small-left.svg │ │ ├── arrow-small-right.svg │ │ ├── arrow-small-up.svg │ │ ├── arrow-up.svg │ │ ├── beaker.svg │ │ ├── bell.svg │ │ ├── bold.svg │ │ ├── book.svg │ │ ├── bookmark.svg │ │ ├── briefcase.svg │ │ ├── broadcast.svg │ │ ├── browser.svg │ │ ├── bug.svg │ │ ├── calendar.svg │ │ ├── check.svg │ │ ├── checklist.svg │ │ ├── chevron-down.svg │ │ ├── chevron-left.svg │ │ ├── chevron-right.svg │ │ ├── chevron-up.svg │ │ ├── circle-slash.svg │ │ ├── circuit-board.svg │ │ ├── clippy.svg │ │ ├── clock.svg │ │ ├── cloud-download.svg │ │ ├── cloud-upload.svg │ │ ├── code.svg │ │ ├── comment-discussion.svg │ │ ├── comment.svg │ │ ├── credit-card.svg │ │ ├── dash.svg │ │ ├── dashboard.svg │ │ ├── database.svg │ │ ├── desktop-download.svg │ │ ├── device-camera-video.svg │ │ ├── device-camera.svg │ │ ├── device-desktop.svg │ │ ├── device-mobile.svg │ │ ├── diff-added.svg │ │ ├── diff-ignored.svg │ │ ├── diff-modified.svg │ │ ├── diff-removed.svg │ │ ├── diff-renamed.svg │ │ ├── diff.svg │ │ ├── ellipsis.svg │ │ ├── eye.svg │ │ ├── file-binary.svg │ │ ├── file-code.svg │ │ ├── file-directory.svg │ │ ├── file-media.svg │ │ ├── file-pdf.svg │ │ ├── file-submodule.svg │ │ ├── file-symlink-directory.svg │ │ ├── file-symlink-file.svg │ │ ├── file-text.svg │ │ ├── file-zip.svg │ │ ├── file.svg │ │ ├── flame.svg │ │ ├── fold.svg │ │ ├── gear.svg │ │ ├── gift.svg │ │ ├── gist-secret.svg │ │ ├── gist.svg │ │ ├── git-branch.svg │ │ ├── git-commit.svg │ │ ├── git-compare.svg │ │ ├── git-merge-white.svg │ │ ├── git-merge.svg │ │ ├── git-pull-request.svg │ │ ├── globe.svg │ │ ├── grabber.svg │ │ ├── graph.svg │ │ ├── heart.svg │ │ ├── history.svg │ │ ├── home.svg │ │ ├── horizontal-rule.svg │ │ ├── hubot.svg │ │ ├── inbox.svg │ │ ├── info.svg │ │ ├── issue-closed.svg │ │ ├── issue-opened.svg │ │ ├── issue-reopened.svg │ │ ├── italic.svg │ │ ├── jersey.svg │ │ ├── kebab-horizontal.svg │ │ ├── kebab-vertical.svg │ │ ├── key.svg │ │ ├── keyboard.svg │ │ ├── law.svg │ │ ├── light-bulb.svg │ │ ├── link-external.svg │ │ ├── link.svg │ │ ├── list-ordered.svg │ │ ├── list-unordered.svg │ │ ├── location.svg │ │ ├── lock.svg │ │ ├── logo-gist.svg │ │ ├── logo-github.svg │ │ ├── mail-read.svg │ │ ├── mail-reply.svg │ │ ├── mail.svg │ │ ├── mark-github.svg │ │ ├── markdown.svg │ │ ├── megaphone.svg │ │ ├── mention.svg │ │ ├── milestone.svg │ │ ├── mirror.svg │ │ ├── mortar-board.svg │ │ ├── mute.svg │ │ ├── no-newline.svg │ │ ├── note.svg │ │ ├── octoface.svg │ │ ├── organization.svg │ │ ├── package.svg │ │ ├── paintcan.svg │ │ ├── pencil.svg │ │ ├── person.svg │ │ ├── pin.svg │ │ ├── plug.svg │ │ ├── plus-small.svg │ │ ├── plus.svg │ │ ├── primitive-dot.svg │ │ ├── primitive-square.svg │ │ ├── project.svg │ │ ├── pulse.svg │ │ ├── question.svg │ │ ├── quote.svg │ │ ├── radio-tower.svg │ │ ├── reply.svg │ │ ├── repo-clone.svg │ │ ├── repo-force-push.svg │ │ ├── repo-forked.svg │ │ ├── repo-pull.svg │ │ ├── repo-push.svg │ │ ├── repo.svg │ │ ├── rocket.svg │ │ ├── rss.svg │ │ ├── ruby.svg │ │ ├── screen-full.svg │ │ ├── screen-normal.svg │ │ ├── search.svg │ │ ├── server.svg │ │ ├── settings.svg │ │ ├── shield.svg │ │ ├── sign-in.svg │ │ ├── sign-out.svg │ │ ├── smiley.svg │ │ ├── squirrel.svg │ │ ├── star.svg │ │ ├── stop.svg │ │ ├── sync.svg │ │ ├── tag.svg │ │ ├── tasklist.svg │ │ ├── telescope.svg │ │ ├── terminal.svg │ │ ├── text-size.svg │ │ ├── three-bars.svg │ │ ├── thumbsdown.svg │ │ ├── thumbsup.svg │ │ ├── tools.svg │ │ ├── trashcan.svg │ │ ├── triangle-down.svg │ │ ├── triangle-left.svg │ │ ├── triangle-right.svg │ │ ├── triangle-up.svg │ │ ├── unfold.svg │ │ ├── unmute.svg │ │ ├── unverified.svg │ │ ├── verified.svg │ │ ├── versions.svg │ │ ├── watch.svg │ │ ├── x.svg │ │ └── zap.svg │ └── templates │ ├── 404.html │ ├── base.html │ ├── blame.html │ ├── branch.html │ ├── commits.html │ ├── config_error.html │ ├── default.html │ ├── merge.html │ ├── message.html │ ├── results.html │ └── sparql.html ├── requirements.txt.windows.patch ├── scripts └── install-libgit2.sh ├── setup.py ├── tests ├── assets │ └── sshkey │ │ ├── README.md │ │ ├── id_rsa │ │ └── id_rsa.pub ├── context.py ├── helpers.py ├── script.py ├── test_app.py ├── test_cache.py ├── test_conf.py ├── test_core.py ├── test_endpoint.py ├── test_git.py ├── test_graphs.py ├── test_helpers.py ├── test_namespace.py └── test_provenance.py └── vocab ├── config-shapes.ttl ├── provenance-shapes.ttl └── vocab.ttl /.dockerignore: -------------------------------------------------------------------------------- 1 | ** 2 | !dist/** 3 | !docker/** 4 | !quit/** 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | build 3 | dist 4 | quit_store.egg-info/ 5 | .coverage 6 | log 7 | .vscode 8 | -------------------------------------------------------------------------------- /CITATION.cff: -------------------------------------------------------------------------------- 1 | cff-version: 1.2.0 2 | message: "If you use this software, please cite it as below." 3 | authors: 4 | - family-names: "Arndt" 5 | given-names: "Natanael" 6 | orcid: "https://orcid.org/0000-0002-8130-8677" 7 | - family-names: "Radtke" 8 | given-names: "Norman" 9 | orcid: "https://orcid.org/0000-0001-9155-8920" 10 | - family-names: "Naumann" 11 | given-names: "Patrick" 12 | title: "QuitStore" 13 | version: 0.26.0 14 | date-released: 2022-02-02 15 | url: "https://github.com/AKSW/QuitStore" 16 | preferred-citation: 17 | type: article 18 | authors: 19 | - family-names: "Arndt" 20 | given-names: "Natanael" 21 | orcid: "https://orcid.org/0000-0002-8130-8677" 22 | - family-names: "Naumann" 23 | given-names: "Patrick" 24 | - family-names: "Radtke" 25 | given-names: "Norman" 26 | orcid: "https://orcid.org/0000-0001-9155-8920" 27 | - family-names: "Martin" 28 | given-names: "Michael" 29 | orcid: "https://orcid.org/0000-0003-0762-8688" 30 | - family-names: "Marx" 31 | given-names: "Edgard" 32 | orcid: "https://orcid.org/0000-0002-3111-9405" 33 | doi: 10.1016/j.websem.2018.08.002 34 | journal: "Journal of Web Semantics" 35 | month: 2 36 | start: 29 # First page number 37 | end: 47 # Last page number 38 | title: "Decentralized Collaborative Knowledge Management using Git" 39 | volume: 54 40 | year: 2019 41 | -------------------------------------------------------------------------------- /Taskfile.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | tasks: 4 | check:style: 5 | desc: Check Conding style 6 | cmds: 7 | - poetry run pylama 8 | 9 | install: 10 | desc: Install all poetry dependencies 11 | cmds: 12 | - poetry install 13 | 14 | build: 15 | desc: Build the whl package 16 | cmds: 17 | - poetry build 18 | 19 | build:docker: 20 | desc: Build the docker image 21 | deps: 22 | - task: build 23 | cmds: 24 | - docker buildx build --build-context dist=./dist -t aksw/quitstore . 25 | 26 | test: 27 | desc: Run the quit store tests 28 | cmds: 29 | - poetry run pytest --cov=quit --cov-report=term-missing 30 | -------------------------------------------------------------------------------- /assets/quitstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/assets/quitstore.png -------------------------------------------------------------------------------- /config.example.ttl: -------------------------------------------------------------------------------- 1 | @prefix conf: . 2 | @prefix quit: . 3 | @prefix rdfs: . 4 | @prefix xsd: . 5 | 6 | conf:exampleStore a quit:QuitStore ; 7 | quit:allowNewGraphs 1 ; 8 | quit:pathOfGitRepo "../store.default" ; 9 | quit:defaultBranch "master" ; 10 | quit:globalFile "global.nt" . 11 | 12 | conf:exampleDBpedia a quit:Graph ; 13 | quit:graphUri ; 14 | quit:isVersioned 1 ; 15 | quit:graphFile "dbpedia.nt" . 16 | 17 | conf:exampleGraph a quit:Graph ; 18 | quit:graphUri ; 19 | quit:isVersioned 1 ; 20 | quit:graphFile "default.nt" . 21 | 22 | conf:default a ; 23 | quit:graphUri ; 24 | quit:isVersioned 1 ; 25 | quit:graphFile "radtke.nt" . 26 | 27 | conf:default1 a ; 28 | quit:graphUri ; 29 | quit:isVersioned 1 ; 30 | quit:graphFile "arndt.nt" . 31 | 32 | conf:aksw a ; 33 | quit:prefix "aksw" ; 34 | quit:namespace . 35 | quit:graphFile "default.nt" . 36 | -------------------------------------------------------------------------------- /config.yml: -------------------------------------------------------------------------------- 1 | apikeys: 2 | norman: 123456789 3 | graphdir: graphs/ 4 | buildingraphs: 5 | versioning: 6 | graphuri: http://leds.aksw.org/versioning/ 7 | filename: versioning.nt 8 | graphs: 9 | default: 10 | graphuri: http://example.com/ 11 | repository: graphs/default 12 | filename: default.nt 13 | versioning: True 14 | # swdf2: 15 | # graphuri: http://swdf.org/ 16 | # repository: ../add-delete-git/ 17 | # filename: swdf2.nt 18 | # versioning: False 19 | # dbpedia: 20 | # originFor: swdf2 21 | # graphuri: http://dbpedia.org/ 22 | # repository: downloads/dbpedia/ 23 | # filename: dbpedia2.nt 24 | # versioning: False 25 | -------------------------------------------------------------------------------- /doap.ttl: -------------------------------------------------------------------------------- 1 | @prefix rdf: . 2 | @prefix rdfs: . 3 | @prefix foaf: . 4 | @prefix aksw: . 5 | @prefix doap: . 6 | 7 | [] 8 | doap:created "2016-02-22" ; 9 | doap:description """ 10 | The Quit Store (stands for Quads in Git) provides a workspace for distributed collaborative Linked Data knowledge engineering. 11 | You are able to read and write RDF Datasets (aka. multiple Named Graphs) through a standard SPARQL 1.1 Query and Update interface. 12 | To collaborate you can create multiple branches of the Dataset and share your repository with your collaborators as you know it from Git. 13 | """@en ; 14 | doap:homepage ; 15 | doap:license ; 16 | doap:maintainer aksw:NormanRadtke, aksw:NatanaelArndt ; 17 | doap:name "Quit Store" ; 18 | doap:release [ 19 | doap:created "2019-08-30" ; 20 | doap:name "unstable" ; 21 | doap:revision "2019-08-30.4" ; 22 | a doap:Version 23 | ] ; 24 | doap:repository [ 25 | doap:browse ; 26 | doap:location ; 27 | a doap:GitRepository 28 | ] ; 29 | doap:shortdesc "Quads in Git - Distributed Version Control for RDF Knowledge Bases"@en , 30 | "Quads in Git - Verteilte Versionsverwaltung für RDF Wissensdatenbanken"@de ; 31 | a doap:Project . 32 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "quit" 3 | version = "0.25.4" 4 | description = "Quads in Git - Distributed Version Control for RDF Knowledge Bases" 5 | authors = ["Norman Radtke ","Natanael Arndt "] 6 | license = "GPL-3.0-or-later" 7 | readme = "README.md" 8 | 9 | [tool.poetry.dependencies] 10 | python = ">=3.7,<3.13" 11 | rdflib = "^6.0.2" 12 | Flask = "^2.0.2" 13 | Flask-Cors = "^3.0.10" 14 | pygit2 = ">=1.1.0" 15 | sortedcontainers = "^2.4.0" 16 | uritools = "^3.0.2" 17 | uWSGI = "^2.0.25" 18 | Jinja2 = "^3.0.0, <3.1.0" 19 | 20 | [tool.poetry.group.dev.dependencies] 21 | pylama = {extras = ["toml"], version = "^8.4.1"} 22 | pytest = "^7.2.2" 23 | pytest-cov = "^4.0.0" 24 | coveralls = "^3.3.1" 25 | pyinstaller = "^5.9.0" 26 | 27 | [build-system] 28 | requires = ["poetry-core>=1.0.0"] 29 | build-backend = "poetry.core.masonry.api" 30 | 31 | [tool.poetry.scripts] 32 | quitstore = "quit.run:run" 33 | 34 | [tool.pylama] 35 | format = "pylint" 36 | skip = "tests/*,quit/tools/*" 37 | ignore = "E402" 38 | max_line_length = 100 39 | -------------------------------------------------------------------------------- /quit.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python -*- 2 | 3 | block_cipher = None 4 | 5 | a = Analysis(['quit/run.py'], 6 | pathex=['.'], 7 | binaries=[], 8 | datas=[('quit/web/templates/*', 'quit/web/templates/'), ('quit/web/static/css/*', 'quit/web/static/css'), ('quit/web/static/fonts/*', 'quit/web/static/fonts'), ('quit/web/static/js/*.js', 'quit/web/static/js'), ('quit/web/static/octicons/*', 'quit/web/static/octicons'), ('quit/web/static/octicons/svg/*', 'quit/web/static/octicons/svg')], 9 | hiddenimports=['quit.tools.processor', 'quit.plugins.serializers.results.htmlresults', '_cffi_backend'], 10 | hookspath=[], 11 | runtime_hooks=[], 12 | excludes=[], 13 | win_no_prefer_redirects=False, 14 | win_private_assemblies=False, 15 | cipher=block_cipher) 16 | pyz = PYZ(a.pure, a.zipped_data, 17 | cipher=block_cipher) 18 | exe = EXE(pyz, 19 | a.scripts, 20 | a.binaries, 21 | a.zipfiles, 22 | a.datas, 23 | name='run', 24 | debug=False, 25 | strip=False, 26 | upx=True, 27 | runtime_tmpdir=None, 28 | console=True ) 29 | -------------------------------------------------------------------------------- /quit/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/__init__.py -------------------------------------------------------------------------------- /quit/namespace.py: -------------------------------------------------------------------------------- 1 | from rdflib.namespace import Namespace, RDF, RDFS, FOAF, DC, VOID, XSD 2 | 3 | __all__ = ('RDF', 'RDFS', 'FOAF', 'DC', 'VOID', 'XSD', 'PROV', 'QUIT', 'is_a') 4 | 5 | # missing namespaces 6 | PROV = Namespace('http://www.w3.org/ns/prov#') 7 | QUITD = Namespace('http://quit.aksw.org/vocab/') 8 | 9 | QUIT = Namespace('http://quit.aksw.org/vocab/') 10 | 11 | # simplified properties 12 | is_a = RDF.type 13 | 14 | 15 | class Vocabulary: 16 | Activity = PROV['Activity'] 17 | ImportActivity = QUIT['Import'] 18 | TransformActivity = QUIT['Transformation'] 19 | 20 | DataSource = QUIT['dataSource'] 21 | Query = QUIT['query'] 22 | Hex = QUIT['hex'] 23 | 24 | StartedAtATime = PROV['startedAtTime'] 25 | EndedAtTime = PROV['endedAtTime'] 26 | Comment = RDFS['comment'] 27 | 28 | WasAssociatedWith = PROV['wasAssociatedWith'] 29 | 30 | Role = PROV['role'] 31 | 32 | Agent = PROV['Agent'] 33 | AgentLabel = RDFS.label 34 | AgentMail = FOAF.mbox 35 | 36 | Association = PROV['Association'] 37 | QualifiedAssociation = PROV['qualifiedAssociation'] 38 | AssociationAgent = PROV['agent'] 39 | AssociationRole = PROV['role'] 40 | 41 | PreceedingCommit = QUIT["preceedingCommit"] 42 | 43 | DiffUpdates = QUIT['updates'] 44 | DiffGraph = QUIT['graph'] 45 | DiffAddition = QUIT['addition'] 46 | DiffRemoval = QUIT['removal'] 47 | 48 | SpecializationOf = PROV['specializationOf'] 49 | WasGeneratedBy = PROV['wasGeneratedBy'] 50 | -------------------------------------------------------------------------------- /quit/plugins/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/plugins/__init__.py -------------------------------------------------------------------------------- /quit/plugins/serializers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/plugins/serializers/__init__.py -------------------------------------------------------------------------------- /quit/plugins/serializers/results/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/plugins/serializers/results/__init__.py -------------------------------------------------------------------------------- /quit/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import os 3 | import sys 4 | 5 | sys.path.append(os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))) 6 | 7 | import logging 8 | from quit.application import getDefaults, parseEnv, parseArgs 9 | from quit.web.app import create_app 10 | from werkzeug.middleware.dispatcher import DispatcherMiddleware 11 | 12 | logger = logging.getLogger('quit.run') 13 | 14 | sys.setrecursionlimit(2 ** 15) 15 | 16 | defaults = getDefaults() 17 | env = parseEnv() 18 | args = parseArgs(sys.argv[1:]) 19 | args = {**defaults, **env, **args} 20 | application = create_app(args) 21 | 22 | # Set the basepath 23 | if args['basepath']: 24 | logger.info("Configure DispatcherMiddleware for basepath \"{}\"".format(args['basepath'])) 25 | 26 | def simple(env, resp): 27 | """A simple WSGI application. 28 | 29 | See also: http://werkzeug.pocoo.org/docs/0.14/middlewares/ 30 | """ 31 | resp('200 OK', [('Content-Type', 'text/plain')]) 32 | 33 | application.wsgi_app = DispatcherMiddleware( 34 | simple, {args['basepath']: application.wsgi_app}) 35 | 36 | 37 | def run(): 38 | application.run(debug=args['flask_debug'], 39 | use_reloader=False, 40 | host=args['host'], 41 | port=args['port']) 42 | 43 | 44 | if __name__ == "__main__": 45 | run() 46 | -------------------------------------------------------------------------------- /quit/tools/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/tools/__init__.py -------------------------------------------------------------------------------- /quit/tools/processor.py: -------------------------------------------------------------------------------- 1 | from rdflib.query import Processor, Result, UpdateProcessor 2 | from rdflib.plugins.sparql.sparql import Query 3 | from rdflib.plugins.sparql.parser import parseQuery, parseUpdate 4 | 5 | from quit.tools.algebra import translateQuery, translateUpdate 6 | from quit.tools.evaluate import evalQuery 7 | from quit.tools.update import evalUpdate 8 | 9 | class SPARQLUpdateProcessor(UpdateProcessor): 10 | def __init__(self, graph): 11 | self.graph = graph 12 | 13 | def update(self, strOrQuery, initBindings={}, initNs={}): 14 | if isinstance(strOrQuery, str): 15 | strOrQuery=translateUpdate(parseUpdate(strOrQuery), initNs=initNs) 16 | 17 | return evalUpdate(self.graph, strOrQuery, initBindings) 18 | 19 | 20 | class SPARQLProcessor(Processor): 21 | 22 | def __init__(self, graph): 23 | self.graph = graph 24 | 25 | def query( 26 | self, strOrQuery, initBindings={}, 27 | initNs={}, base=None, DEBUG=False): 28 | """ 29 | Evaluate a query with the given initial bindings, and initial 30 | namespaces. The given base is used to resolve relative URIs in 31 | the query and will be overridden by any BASE given in the query. 32 | """ 33 | 34 | if not isinstance(strOrQuery, Query): 35 | parsetree = parseQuery(strOrQuery) 36 | query = translateQuery(parsetree, base, initNs) 37 | else: 38 | query = strOrQuery 39 | 40 | return evalQuery(self.graph, query, initBindings, base) -------------------------------------------------------------------------------- /quit/web/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/__init__.py -------------------------------------------------------------------------------- /quit/web/extras/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/extras/__init__.py -------------------------------------------------------------------------------- /quit/web/modules/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/modules/__init__.py -------------------------------------------------------------------------------- /quit/web/service.py: -------------------------------------------------------------------------------- 1 | from ..exceptions import ServiceException 2 | 3 | _services = {} 4 | 5 | 6 | class Service(object): 7 | """ 8 | A Service object for sparql 9 | """ 10 | 11 | def __init__(self, name, graph): 12 | self.name = name 13 | self.graph = graph 14 | 15 | 16 | def register(name, graph): 17 | s = Service(name, graph) 18 | _services[name] = s 19 | 20 | 21 | def get(name): 22 | try: 23 | s = _services[name] 24 | except KeyError: 25 | raise ServiceException("No service registered for %s" % name) 26 | return s.graph 27 | -------------------------------------------------------------------------------- /quit/web/static/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /quit/web/static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /quit/web/static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /quit/web/static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /quit/web/static/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /quit/web/static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /quit/web/static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /quit/web/static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /quit/web/static/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /quit/web/static/fonts/roboto-condensed-v14-latin-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/roboto-condensed-v14-latin-regular.eot -------------------------------------------------------------------------------- /quit/web/static/fonts/roboto-condensed-v14-latin-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/roboto-condensed-v14-latin-regular.ttf -------------------------------------------------------------------------------- /quit/web/static/fonts/roboto-condensed-v14-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/roboto-condensed-v14-latin-regular.woff -------------------------------------------------------------------------------- /quit/web/static/fonts/roboto-condensed-v14-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/fonts/roboto-condensed-v14-latin-regular.woff2 -------------------------------------------------------------------------------- /quit/web/static/octicons/octicons-master.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AKSW/QuitStore/7567c25da58f9a5f793723dea8b1cdfa6db6afe5/quit/web/static/octicons/octicons-master.sketch -------------------------------------------------------------------------------- /quit/web/static/octicons/octicons.css: -------------------------------------------------------------------------------- 1 | .octicon { 2 | display: inline-block; 3 | vertical-align: text-top; 4 | fill: currentColor; 5 | } 6 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/alert.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | alert 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrow-down 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/arrow-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrow-left 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrow-right 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/arrow-small-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrow-small-down 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/arrow-small-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrow-small-left 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/arrow-small-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrow-small-right 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/arrow-small-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrow-small-up 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/arrow-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrow-up 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/beaker.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | beaker 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/bell.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bell 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/bold.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bold 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/book.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | book 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/bookmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bookmark 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/briefcase.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | briefcase 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/broadcast.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | broadcast 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/browser.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | browser 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/bug.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bug 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | calendar 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | check 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/checklist.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | checklist 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/chevron-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | chevron-down 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/chevron-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | chevron-left 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/chevron-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | chevron-right 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/chevron-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | chevron-up 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/circle-slash.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | circle-slash 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/circuit-board.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | circuit-board 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/clippy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | clippy 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/clock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | clock 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/cloud-download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | cloud-download 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/cloud-upload.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | cloud-upload 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/code.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | code 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/comment-discussion.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | comment-discussion 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/comment.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | comment 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/credit-card.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | credit-card 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/dash.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | dash 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/dashboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | dashboard 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/database.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | database 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/desktop-download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | desktop-download 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/device-camera-video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | device-camera-video 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/device-camera.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | device-camera 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/device-desktop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | device-desktop 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/device-mobile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | device-mobile 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/diff-added.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | diff-added 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/diff-ignored.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | diff-ignored 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/diff-modified.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | diff-modified 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/diff-removed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | diff-removed 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/diff-renamed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | diff-renamed 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/diff.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | diff 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/ellipsis.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ellipsis 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/eye.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | eye 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/file-binary.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | file-binary 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/file-code.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | file-code 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/file-directory.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | file-directory 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/file-media.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | file-media 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/file-submodule.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | file-submodule 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/file-symlink-directory.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | file-symlink-directory 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/file-symlink-file.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | file-symlink-file 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/file-text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/file-zip.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | file-zip 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/file.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | file 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/flame.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | flame 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/fold.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | fold 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/gear.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | gear 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/gift.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | gift 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/gist-secret.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | gist-secret 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/gist.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | gist 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/git-branch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | git-branch 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/git-commit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | git-commit 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/git-compare.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | git-compare 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/git-merge-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | git-merge 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/git-merge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | git-merge 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/git-pull-request.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | git-pull-request 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/grabber.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | grabber 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/graph.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | graph 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/heart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | heart 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/history.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | history 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | home 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/horizontal-rule.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | horizontal-rule 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/hubot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | hubot 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/inbox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | inbox 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | info 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/issue-closed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | issue-closed 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/issue-opened.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | issue-opened 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/issue-reopened.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | issue-reopened 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/italic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | italic 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/jersey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jersey 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/kebab-horizontal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | kebab-horizontal 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/kebab-vertical.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | kebab-vertical 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/key.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | key 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/keyboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | keyboard 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/law.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | law 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/light-bulb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | light-bulb 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/link-external.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | link-external 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | link 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/list-unordered.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | list-unordered 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/location.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | location 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/lock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | lock 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/mail-read.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mail-read 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/mail-reply.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mail-reply 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/mail.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mail 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/mark-github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mark-github 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/markdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | markdown 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/megaphone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | megaphone 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/mention.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mention 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/milestone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | milestone 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/mirror.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mirror 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/mortar-board.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mortar-board 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/mute.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mute 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/no-newline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | no-newline 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/note.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | note 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/octoface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | octoface 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/organization.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | organization 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/package.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | package 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/paintcan.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | paintcan 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/pencil.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | pencil 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/person.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | person 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/pin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | pin 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/plug.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | plug 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/plus-small.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | plus-small 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | plus 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/primitive-dot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | primitive-dot 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/primitive-square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | primitive-square 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/project.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | project 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/pulse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | pulse 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/question.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | question 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/quote.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | quote 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/reply.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | reply 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/repo-clone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | repo-clone 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/repo-force-push.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | repo-force-push 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/repo-forked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | repo-forked 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/repo-pull.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | repo-pull 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/repo-push.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | repo-push 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/repo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | repo 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/rocket.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | rocket 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/rss.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | rss 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/ruby.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ruby 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/screen-full.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | screen-full 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/screen-normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | screen-normal 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | search 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/server.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | server 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/settings.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | settings 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/shield.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | shield 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/sign-in.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | sign-in 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/sign-out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | sign-out 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/smiley.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | smiley 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/squirrel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | squirrel 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | star 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/stop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | stop 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/sync.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | sync 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/tag.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tag 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/tasklist.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tasklist 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/telescope.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | telescope 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/terminal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | terminal 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/text-size.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | text-size 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/three-bars.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | three-bars 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/thumbsdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | thumbsdown 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/thumbsup.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | thumbsup 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/tools.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tools 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/trashcan.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | trashcan 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/triangle-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | triangle-down 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/triangle-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | triangle-left 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/triangle-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | triangle-right 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/triangle-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | triangle-up 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/unfold.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | unfold 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/unmute.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | unmute 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/verified.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | verified 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/versions.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | versions 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/watch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | watch 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | x 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/static/octicons/svg/zap.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | zap 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /quit/web/templates/404.html: -------------------------------------------------------------------------------- 1 | {% extends "default.html" %} 2 | 3 | {% block quit_content %} 4 | 5 | 404 - Not Found 6 | 7 | {% endblock %} -------------------------------------------------------------------------------- /quit/web/templates/base.html: -------------------------------------------------------------------------------- 1 | {% block doc -%} 2 | 3 | 4 | {%- block html %} 5 | 6 | {%- block head %} 7 | {% block title %}{{title|default}}{% endblock title %} 8 | 9 | 10 | {%- block metas %} 11 | 12 | {%- endblock metas %} 13 | 14 | {%- block styles %} 15 | 16 | 17 | 18 | 19 | 20 | {%- endblock styles %} 21 | 24 | {%- endblock head %} 25 | 26 | 27 | {% block body -%} 28 | {% block navbar %} 29 | {%- endblock navbar %} 30 | {% block content -%} 31 | {%- endblock content %} 32 | 33 | {% block scripts %} 34 | 35 | 36 | 43 | {%- endblock scripts %} 44 | {%- endblock body %} 45 | 46 | {%- endblock html %} 47 | 48 | {% endblock doc -%} 49 | -------------------------------------------------------------------------------- /quit/web/templates/blame.html: -------------------------------------------------------------------------------- 1 | {% extends "default.html" %} 2 | 3 | {% block headline %}
Blame
{% endblock %} 4 | 5 | {%- block styles %} 6 | {{super()}} 7 | {%- endblock styles %} 8 | 9 | {% block quit_content %} 10 | {{ render_branches_dropdown(current_ref, available_branches, available_tags)|safe }} 11 | {% if results|length > 0 %} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | {% for row in results %} 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | {% endfor %} 37 | 38 |
AuthorCommitSubjectPredicateObjectGraphDate
{{ row.commit.author.name }}{{ row.commit.short_id }}{{ row.blame['s']|term_to_string }}{{ row.blame['p']|term_to_string }}{{ row.blame['o']|term_to_string }}{{ row.blame['context']|term_to_string }}{{ git_timestamp(row.commit.author.time, row.commit.author.offset) }}
39 | {% else %} 40 | No results found 41 | {% endif %} 42 | 43 | {% endblock %} 44 | 45 | {% block scripts %} 46 | {{super()}} 47 | {% endblock %} 48 | -------------------------------------------------------------------------------- /quit/web/templates/config_error.html: -------------------------------------------------------------------------------- 1 | {% extends "default.html" %} 2 | 3 | {% block quit_content %} 4 | 5 | Your current configuration doesn't allow this action. 6 | 7 | {% endblock %} -------------------------------------------------------------------------------- /quit/web/templates/message.html: -------------------------------------------------------------------------------- 1 | {% extends "default.html" %} 2 | 3 | {% block quit_content %} 4 | 5 | {{ message }} 6 | 7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /quit/web/templates/results.html: -------------------------------------------------------------------------------- 1 | {% extends "default.html" %} 2 | 3 | {% block quit_content %} 4 | 5 | {% if results|length > 0 %} 6 | {{ results }} 7 | {% else %} 8 | No results found 9 | {% endif %} 10 | 11 | {% endblock %} -------------------------------------------------------------------------------- /requirements.txt.windows.patch: -------------------------------------------------------------------------------- 1 | diff --git a/requirements.txt b/requirements.txt 2 | index fccdc79..f465b85 100644 3 | --- a/requirements.txt 4 | +++ b/requirements.txt 5 | @@ -5,6 +5,3 @@ pygit2>=1.1.0 6 | sortedcontainers 7 | uritools 8 | git+https://github.com/RDFLib/rdflib-jsonld@master 9 | - 10 | -uwsgi 11 | -pylava 12 | -------------------------------------------------------------------------------- /scripts/install-libgit2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | wget https://github.com/libgit2/libgit2/releases/download/v1.1.0/libgit2-1.1.0.tar.gz 4 | tar xzf libgit2-1.1.0.tar.gz 5 | cd libgit2-1.1.0/ 6 | cmake . 7 | make 8 | make install 9 | cd .. 10 | rm -r libgit2-1.1.0 11 | -------------------------------------------------------------------------------- /tests/assets/sshkey/README.md: -------------------------------------------------------------------------------- 1 | This is not my key, it is just for purpose of testing. You should not trust machines or people having this key! 2 | -------------------------------------------------------------------------------- /tests/assets/sshkey/id_rsa: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAn0+LElClgL7PreBnpP0tLhLR8rkoh39iirZ4sR6JkzjErcWD 3 | JwjtgDnfyUV2bapFUw5FXzXhayelYaxkC1M5Dyt8UscWD43mwM+3d20YFV08U4y3 4 | Wmei1XDZN5c53KTzcXZUl97L4JJfyOR+Oada3cNAknJgX74EW/lQVdHglhWYev2d 5 | EVKbnRzI5EO5DJbVWSqNoBoZJTCmt+mf0h3aTIngQoH4Y2iv86lVZN0LMa2BeAdZ 6 | toCiSPDPzOt+LVUKzAodmSGIlZx2fWZe4B9H3vF/JS+agyOpGkIghw/HnUF05M2E 7 | 6nRqdG5Ca+Q6vzDppShrXWd93zjG08DgibNwAwIDAQABAoIBAB37bGMABoXaY1+H 8 | 8jmc5FnddOHHcxc9JCCTAtfitWWds3Y4y9wW1Avj2HgauJUfDHj7IJcwnsH57igZ 9 | t6JiAUUXnAhAK6i1vg3fidnSEExFBct7mi5LftvIpzjNHzilWqOp73W9moUjRx+Z 10 | 0R+snW9LBeYJ3JVoP43HuBTOsQPNtKFxxA3dPMVOwwl90ENZ5nERaD60dnZ9zvx+ 11 | YYAuJTIHLTSUjL1fszUYX0YAXIXZoVBh+2pj1nLsOWDw+tpUEc0NJTUMllqo3DaU 12 | F9vKIXzX198U00nJv5DPUyBpD8aqj7rxQrM3DpjaLf+YhXL4AvWdSDkR4ET5AVDy 13 | rU6Zu4ECgYEAztnM6+e243512A2H/162CLoiBbo8EMkBroW2aHbizhRr5aiwgdse 14 | YHv9Q7JVysIKP589OePT5Y5GzOubCUrVJENkFOeXW8YAaLsjdMjh4I1A3LCj1YNa 15 | sIvWA7p1NZBCWfAVQNGQ7uGdi1QhW8WDJ4cYB89MQySHCsbtGQufzaMCgYEAxSoA 16 | zGbPgxk5TWdXRevvH/9NFIkocCjz84piFSOyKBHWA6fFZbjOzWVqeUKfHBv9RWAB 17 | oQow2aWP+ji6xW5U+aWv00O0h2d5X6wWh6DkNfvGiadiAGOZHzEWJNuggLRniheG 18 | 9UHoIshj5YHPzQLya13coLGjUStUVAYaQpahOiECgYAayKz2JuzRjEBqF2ZytKrR 19 | eniJUVIRwlVLadjyseIwWQiXlj40slC+oY9rwp3FQVbeYholctCvOrsEMcXDcEMl 20 | DOzaoBpDMeI/rWur5Y8J6oBpkx3Dudx2W8T8eppOsz1ENAgsenZP2Dr0HZKsNWkE 21 | J0P/TuJLF2G9DYEJ6y1oDQKBgQCpR2LgG/VWjbWRK4TW17a7Nisr0ocRpVeuZcXI 22 | eJlhpc6l3MmyiHWmC8jay8RoEe/mPIOpjGJcu7VeFI7nK89xeDv5m0vIZaLj7ZB6 23 | aj0FzGGtljSiOOEi0rY8dwTa/AlZmtGYiTmRg5OhXU7YqgsQ+8mNfnbGHfmNGqA5 24 | Q7KxgQKBgEOSfC073kSTHzVHA2WO8kvuxyQYOsYXTwr468CTCIxoGP+xQ3LdN5Hk 25 | BKa/1swu0XjH7uGowtKo/LKItTJxGhj/CljxHB2FVTMFiaKlFQiONy1d5+QYQOvq 26 | pqjJ6TAfn8Nys3GJGtESClZxlHrV4s8yrDiE0CtIrcjbhwW83MZz 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /tests/assets/sshkey/id_rsa.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCfT4sSUKWAvs+t4Gek/S0uEtHyuSiHf2KKtnixHomTOMStxYMnCO2AOd/JRXZtqkVTDkVfNeFrJ6VhrGQLUzkPK3xSxxYPjebAz7d3bRgVXTxTjLdaZ6LVcNk3lzncpPNxdlSX3svgkl/I5H45p1rdw0CScmBfvgRb+VBV0eCWFZh6/Z0RUpudHMjkQ7kMltVZKo2gGhklMKa36Z/SHdpMieBCgfhjaK/zqVVk3QsxrYF4B1m2gKJI8M/M634tVQrMCh2ZIYiVnHZ9Zl7gH0fe8X8lL5qDI6kaQiCHD8edQXTkzYTqdGp0bkJr5Dq/MOmlKGtdZ33fOMbTwOCJs3AD quitstore@testenv 2 | -------------------------------------------------------------------------------- /tests/context.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) 5 | 6 | import quit 7 | -------------------------------------------------------------------------------- /tests/script.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from context import GitRepo 4 | from os import unlink 5 | from pygit2 import init_repository, Repository 6 | from tempfile import TemporaryDirectory, NamedTemporaryFile 7 | 8 | dir = TemporaryDirectory() 9 | init_repository(dir.name) 10 | repo = GitRepo(dir.name) 11 | file = NamedTemporaryFile(dir=dir.name) 12 | file.write(b'Test\n') 13 | testrepo = Repository(dir.name) 14 | testrepo = None 15 | repo.addfile(file.name) 16 | testrepo = Repository(dir.name) 17 | index = testrepo.index 18 | index.read() 19 | 20 | repo = GitRepo(dir.name) 21 | 22 | testrepo = Repository(dir.name) 23 | # print('Commitloglänge', len(testrepo.walk(testrepo.head.target)), 0) 24 | testrepo = None 25 | 26 | # Commit 1 27 | repo.commit() 28 | testrepo = Repository(dir.name) 29 | all_refs = testrepo.listall_references() 30 | print('Refs', all_refs) 31 | commits = testrepo.walk(testrepo.head.target) 32 | print('Commitloglänge', len(list(testrepo.walk(testrepo.head.target))), 1) 33 | testrepo = None 34 | 35 | # Commit 2 36 | testrepo = Repository(dir.name) 37 | # print('Commitloglänge', len(testrepo.walk(testrepo.head.target)), 0) 38 | testrepo = None 39 | 40 | file.write(b'Test2\n') 41 | file.write(b'Test3\n') 42 | f = open(file.name, 'w') 43 | f.write('Test2') 44 | f.write('Test3') 45 | f.close 46 | print('Refs', all_refs) 47 | print('Should not be clear', repo.isstagingareaclean()) 48 | file.read() 49 | repo.update() 50 | print('Refs', all_refs) 51 | print('Should be Clear', repo.isstagingareaclean()) 52 | repo.commit() 53 | testrepo = Repository(dir.name) 54 | all_refs = testrepo.listall_references() 55 | print('Clear', repo.isstagingareaclean()) 56 | commits = testrepo.walk(testrepo.head.target) 57 | testrepo = None 58 | # self.assertEqual(len(testrepo.walk(testrepo.head.target)), 1) 59 | -------------------------------------------------------------------------------- /tests/test_cache.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import unittest 4 | from context import quit 5 | from quit.cache import Cache, FileReference 6 | from os import path, environ 7 | from pygit2 import init_repository, Repository, clone_repository 8 | from pygit2 import GIT_SORT_TOPOLOGICAL, GIT_SORT_REVERSE, Signature 9 | from tempfile import TemporaryDirectory, NamedTemporaryFile 10 | 11 | 12 | class CacheTests(unittest.TestCase): 13 | def setUp(self): 14 | pass 15 | 16 | def tearDown(self): 17 | pass 18 | 19 | def testCacheCapacity(self): 20 | cache = Cache(capacity=1) 21 | cache.set("key1", "value1") 22 | cache.set("key2", "value2") 23 | 24 | with self.assertRaises(KeyError): 25 | cache.get("key1") 26 | 27 | self.assertEqual(cache.get("key2"), "value2") 28 | self.assertEqual(cache.size, 1) 29 | 30 | def testRemoveEntry(self): 31 | cache = Cache() 32 | cache.set("key", "value") 33 | self.assertEqual(cache.size, 1) 34 | cache.remove("key") 35 | self.assertEqual(cache.size, 0) 36 | 37 | def testSetEntry(self): 38 | cache = Cache() 39 | cache.set("key", "value") 40 | self.assertEqual(cache.get("key"), "value") 41 | self.assertEqual(cache.size, 1) 42 | 43 | def testOverwriteEntry(self): 44 | cache = Cache() 45 | cache.set("key", "value") 46 | cache.set("key", "value2") 47 | self.assertEqual(cache.get("key"), "value2") 48 | self.assertEqual(cache.size, 1) 49 | 50 | 51 | class FileReferenceTests(unittest.TestCase): 52 | def setUp(self): 53 | pass 54 | 55 | def tearDown(self): 56 | pass 57 | 58 | 59 | def main(): 60 | unittest.main() 61 | 62 | 63 | if __name__ == '__main__': 64 | main() 65 | -------------------------------------------------------------------------------- /tests/test_namespace.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import unittest 4 | from context import quit 5 | import quit.namespace 6 | from os import path, environ 7 | from pygit2 import init_repository, Repository, clone_repository 8 | from pygit2 import GIT_SORT_TOPOLOGICAL, GIT_SORT_REVERSE, Signature 9 | from tempfile import TemporaryDirectory, NamedTemporaryFile 10 | 11 | 12 | class VocabularyTests(unittest.TestCase): 13 | def setUp(self): 14 | pass 15 | 16 | def tearDown(self): 17 | pass 18 | 19 | 20 | def main(): 21 | unittest.main() 22 | 23 | 24 | if __name__ == '__main__': 25 | main() 26 | -------------------------------------------------------------------------------- /tests/test_provenance.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import unittest 4 | from context import quit 5 | from quit.provenance import Blame 6 | from os import path, environ 7 | from pygit2 import init_repository, Repository, clone_repository 8 | from pygit2 import GIT_SORT_TOPOLOGICAL, GIT_SORT_REVERSE, Signature 9 | from tempfile import TemporaryDirectory, NamedTemporaryFile 10 | 11 | 12 | class BlameTests(unittest.TestCase): 13 | def setUp(self): 14 | pass 15 | 16 | def tearDown(self): 17 | pass 18 | 19 | 20 | def main(): 21 | unittest.main() 22 | 23 | 24 | if __name__ == '__main__': 25 | unittest.main() 26 | -------------------------------------------------------------------------------- /vocab/config-shapes.ttl: -------------------------------------------------------------------------------- 1 | @prefix quit: . 2 | @prefix qshapes: . 3 | @prefix rdf: . 4 | @prefix rdfs: . 5 | @prefix xsd: . 6 | @prefix sh: . 7 | 8 | qshapes:StoreShape 9 | a sh:NodeShape ; 10 | sh:targetClass quit:QuitStore ; 11 | sh:property [ 12 | sh:path quit:storeFromDir ; 13 | sh:datatype xsd:boolean ; 14 | ] ; 15 | sh:property [ 16 | sh:path quit:allowNewGraphs ; 17 | sh:datatype xsd:boolean ; 18 | ] ; 19 | sh:property [ 20 | sh:path quit:pathOfGitRepo ; 21 | sh:datatype xsd:string ; 22 | ] ; 23 | sh:property [ 24 | sh:path quit:defaultBranch ; 25 | sh:datatype xsd:string ; 26 | ] ; 27 | sh:property [ 28 | sh:path quit:globalFile ; 29 | sh:datatype xsd:string ; 30 | ] ; 31 | sh:property [ 32 | sh:path quit:linkToGitRemote ; 33 | ] ; 34 | sh:closed false ; 35 | sh:ignoredProperties ( rdf:type ) . 36 | 37 | 38 | qshapes:GraphShape 39 | a sh:NodeShape ; 40 | sh:targetClass quit:Graph ; 41 | sh:property [ 42 | sh:path quit:graphUri ; 43 | sh:nodeKind sh:IRI ; 44 | ] ; 45 | sh:property [ 46 | sh:path quit:graphFile ; 47 | sh:datatype xsd:string ; 48 | ] ; 49 | sh:property [ 50 | sh:path quit:isVersioned ; 51 | sh:datatype xsd:boolean ; 52 | ] ; 53 | sh:closed false ; 54 | sh:ignoredProperties ( rdf:type ) . 55 | 56 | 57 | qshapes:GraphShape 58 | a sh:NodeShape ; 59 | sh:targetClass quit:Binding ; 60 | sh:property [ 61 | sh:path quit:prefix ; 62 | sh:datatype xsd:string ; 63 | ] ; 64 | sh:property [ 65 | sh:path quit:namespace ; 66 | sh:nodeKind sh:IRI ; 67 | ] ; 68 | sh:closed false ; 69 | sh:ignoredProperties ( rdf:type ) . 70 | -------------------------------------------------------------------------------- /vocab/provenance-shapes.ttl: -------------------------------------------------------------------------------- 1 | @prefix quit: . 2 | @prefix qshapes: . 3 | @prefix prov: . 4 | @prefix rdf: . 5 | @prefix rdfs: . 6 | @prefix xsd: . 7 | @prefix sh: . 8 | 9 | qshapes:CommitShape 10 | a sh:NodeShape ; 11 | sh:targetClass prov:Activity ; 12 | sh:property [ 13 | sh:path quit:preceedingCommit ; 14 | ] ; 15 | sh:property [ 16 | sh:path rdfs:comment ; 17 | sh:datatype xsd:string ; 18 | ] ; 19 | sh:property [ 20 | sh:path quit:hex ; 21 | sh:datatype xsd:string ; 22 | ] ; 23 | sh:property [ 24 | sh:path prov:startedAtTime ; 25 | sh:datatype xsd:datetime ; 26 | ] ; 27 | sh:property [ 28 | sh:path prov:endedAtTime ; 29 | sh:datatype xsd:datetime ; 30 | ] ; 31 | sh:property [ 32 | sh:path prov:qualifiedAssociation ; 33 | sh:nodeKind sh:BlankNodeOrIRI ; 34 | ] ; 35 | sh:property [ 36 | sh:path prov:wasAssociatedWith ; 37 | sh:nodeKind sh:BlankNodeOrIRI ; 38 | ] ; 39 | sh:closed false ; 40 | sh:ignoredProperties ( rdf:type ) . 41 | 42 | 43 | qshapes:TransformationShape 44 | a sh:NodeShape ; 45 | sh:targetClass quit:Transformation ; 46 | sh:property [ 47 | sh:path quit:query ; 48 | sh:datatype xsd:string ; 49 | ] ; 50 | sh:closed false ; 51 | sh:ignoredProperties ( rdf:type ) . 52 | 53 | 54 | qshapes:ImportShape 55 | a sh:NodeShape ; 56 | sh:targetClass quit:Import ; 57 | sh:property [ 58 | sh:path quit:dataSource ; 59 | sh:datatype xsd:string ; 60 | ] ; 61 | sh:closed false ; 62 | sh:ignoredProperties ( rdf:type ) . 63 | --------------------------------------------------------------------------------