changeset 12:ba73d8ba81dc default tip

refactor
author drewp@bigasterisk.com
date Mon, 18 Mar 2024 16:51:44 -0700
parents 0bc06da6bf74
children
files examples/serve_inline_graph_test.py src/rdferry/patch/patch.py src/rdferry/patchablegraph.py src/rdferry/server.py
diffstat 4 files changed, 46 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/examples/serve_inline_graph_test.py	Mon Mar 18 16:42:21 2024 -0700
+++ b/examples/serve_inline_graph_test.py	Mon Mar 18 16:51:44 2024 -0700
@@ -1,8 +1,12 @@
+import logging
 from pathlib import Path
-import logging
+
 import pytest
 
-from examples._run_server_child import RunHttpServerChildProcess, assert_event_stream_starts_with
+from examples._run_server_child import (
+    RunHttpServerChildProcess,
+    assert_event_stream_starts_with,
+)
 
 log = logging.getLogger('test')
 logging.basicConfig(level=logging.INFO)
--- a/src/rdferry/patch/patch.py	Mon Mar 18 16:42:21 2024 -0700
+++ b/src/rdferry/patch/patch.py	Mon Mar 18 16:51:44 2024 -0700
@@ -1,7 +1,7 @@
 from dataclasses import dataclass, field
 from typing import Collection
 
-from rdflib import ConjunctiveGraph
+from rdflib import ConjunctiveGraph, Graph, URIRef
 
 from rdflib.graph import _QuadType as Quad
 
@@ -28,3 +28,16 @@
         g.addN(quads)
         return g
 
+
+def quadsWithGraphContexts(quads):
+    for s, p, o, c in quads:
+        if isinstance(c, URIRef):
+            c = Graph(identifier=c)
+        if not isinstance(c, Graph):
+            raise TypeError("bad quad context type in %r" % ((s, p, o, c), ))
+        yield s, p, o, c
+
+
+def addWholeGraphPatch(graph: ConjunctiveGraph) -> Patch:
+    """a patch that adds every quad in the graph"""
+    return Patch(adds=list(quadsWithGraphContexts(graph.quads())))
--- a/src/rdferry/patchablegraph.py	Mon Mar 18 16:42:21 2024 -0700
+++ b/src/rdferry/patchablegraph.py	Mon Mar 18 16:51:44 2024 -0700
@@ -1,14 +1,15 @@
 import asyncio
 import itertools
-import json
+import logging
+import weakref
 from typing import NewType
-import weakref
+
+from prometheus_client import Counter, Gauge, Summary
+from rdflib import ConjunctiveGraph
+
+from rdferry.patch.patch import Patch, addWholeGraphPatch
 from rdferry.patch_quads import patchQuads
 from rdferry.rdflib_issues.contains_with_context_398 import inGraph
-from rdflib import ConjunctiveGraph, Graph, URIRef
-import logging
-from rdferry.patch.patch import Patch
-from prometheus_client import Counter, Gauge, Summary
 
 log = logging.getLogger('patchablegraph')
 STATEMENT_COUNT = Gauge('statement_count',
@@ -84,23 +85,10 @@
         OBSERVERS_CURRENT.labels(graph=self.label).set(len(
             self._subscriptions))  # minus one?
 
-def clearEvent() -> SseEvent:
-    return SseEvent(('clear', 'ferry1'))
-
-
 
 
-def quadsWithGraphContexts(quads):
-    for s, p, o, c in quads:
-        if isinstance(c, URIRef):
-            c = Graph(identifier=c)
-        if not isinstance(c, Graph):
-            raise TypeError("bad quad context type in %r" % ((s, p, o, c), ))
-        yield s, p, o, c
-
-def addWholeGraphPatch(graph: ConjunctiveGraph) -> Patch:
-    """a patch that adds every quad in the graph"""
-    return Patch(adds=list(quadsWithGraphContexts(graph.quads())))
+def clearEvent() -> SseEvent:
+    return SseEvent(('clear', 'ferry1'))
 
 
 def patchEvent(p: Patch) -> SseEvent:
--- a/src/rdferry/server.py	Mon Mar 18 16:42:21 2024 -0700
+++ b/src/rdferry/server.py	Mon Mar 18 16:51:44 2024 -0700
@@ -3,13 +3,15 @@
 from typing import Awaitable, Callable
 
 import uvicorn
+from prometheus_client import Summary
+from sse_starlette import ServerSentEvent
+from sse_starlette.sse import EventSourceResponse
 from starlette.applications import Starlette
 from starlette.requests import Request
 from starlette.responses import PlainTextResponse, Response
-from sse_starlette.sse import EventSourceResponse
+
 from rdferry.patchablegraph import PatchableGraph
-from sse_starlette import ServerSentEvent
-from prometheus_client import Summary
+
 log = logging.getLogger('serv')
 SEND_SIMPLE_GRAPH = Summary('send_simple_graph',
                             'calls to _writeGraphResponse')
@@ -32,23 +34,8 @@
 
     def add_graph_routes(self, path: str, graph: PatchableGraph):
         """Adds {path} and {path}/events"""
-        self.add_route(path, partial(self._on_graph_request, graph))
-        self.add_route(path + '/events',
-                       self._graph_events_request_handler(graph))
-
-    def _on_graph_request(self, graph: PatchableGraph,
-                          request: Request) -> PlainTextResponse:
-        format = request.headers.get('Accept', '*/*')
-        if format == '*/*':
-            format = 'application/trig'
-        return PlainTextResponse(content=graph._graph.serialize(format=format),
-                                 media_type=format)
-
-    def _graph_events_request_handler(
-        self,
-        graph: PatchableGraph,
-    ) -> Callable[[Request], EventSourceResponse]:
-        return _GraphEvents(graph)
+        self.add_route(path, partial(_simple_graph_response, graph))
+        self.add_route(path + '/events', _graphEvents(graph))
 
     def serve(self):
         if not self.root_route_is_set:
@@ -56,7 +43,16 @@
         uvicorn.run(self.app, host="0.0.0.0", port=8005)
 
 
-def _GraphEvents(
+def _simple_graph_response(graph: PatchableGraph,
+                           request: Request) -> PlainTextResponse:
+    format = request.headers.get('Accept', '*/*')
+    if format == '*/*':
+        format = 'application/trig'
+    return PlainTextResponse(content=graph._graph.serialize(format=format),
+                             media_type=format)
+
+
+def _graphEvents(
         masterGraph: PatchableGraph
 ) -> Callable[[Request], EventSourceResponse]: