From 01353c66d82f83954fc721bf0477753e46277cf8 Mon Sep 17 00:00:00 2001 From: Wolfgang Fahl Date: Sun, 19 Mar 2023 13:35:39 +0100 Subject: [PATCH] fixes #6 and fixes #7 --- ceurspt/__init__.py | 2 +- ceurspt/ceurws.py | 44 ++++++++++- ceurspt/webserver.py | 25 ++++++- pyproject.toml | 4 +- static/CEUR-WS-logo-blue.png | Bin 0 -> 22727 bytes static/CEUR-WS-logo-xmas.png | Bin 0 -> 17047 bytes static/CEUR-WS-logo.png | Bin 0 -> 21611 bytes static/cc-by_100x35.png | Bin 0 -> 3664 bytes static/ceur-ws.css | 135 ++++++++++++++++++++++++++++++++++ static/ceurws-bg.png | Bin 0 -> 9896 bytes static/ceurws-bullet-6x12.png | Bin 0 -> 202 bytes tests/test_app.py | 13 +++- tests/test_ceurws.py | 25 ++++++- 13 files changed, 238 insertions(+), 10 deletions(-) create mode 100644 static/CEUR-WS-logo-blue.png create mode 100644 static/CEUR-WS-logo-xmas.png create mode 100644 static/CEUR-WS-logo.png create mode 100644 static/cc-by_100x35.png create mode 100644 static/ceur-ws.css create mode 100644 static/ceurws-bg.png create mode 100644 static/ceurws-bullet-6x12.png diff --git a/ceurspt/__init__.py b/ceurspt/__init__.py index de9c5f9..be94488 100644 --- a/ceurspt/__init__.py +++ b/ceurspt/__init__.py @@ -1 +1 @@ -__version__="0.0.2" \ No newline at end of file +__version__="0.0.3" \ No newline at end of file diff --git a/ceurspt/ceurws.py b/ceurspt/ceurws.py index 088f850..078c638 100644 --- a/ceurspt/ceurws.py +++ b/ceurspt/ceurws.py @@ -5,20 +5,61 @@ ''' import ceurspt.ceurws_base import os +import re +from bs4 import BeautifulSoup + +class Paper(ceurspt.ceurws_base.Paper): + """ + a CEUR-WS Paper with it's behavior + """ + + def getPdf(self): + """ + get the PDF file for this paper + """ + volume=self.volume + pdf=f"{volume.vm.base_path}/Vol-{volume.number}/paper{self.paper_number}.pdf" + return pdf class Volume(ceurspt.ceurws_base.Volume): """ a CEUR-WS Volume with it's behavior """ - def getHtml(self)->str: + def getHtml(self,fixLinks:bool=True)->str: """ get my HTML content + + Args: + fixLinks(bool): if True fix the links """ index_path=f"{self.vol_dir}/index.html" with open(index_path, 'r') as index_html: content = index_html.read() + if fixLinks: + soup = BeautifulSoup(content, 'html.parser') + for a in soup.findAll(['link','a']): + ohref=a['href'] + # .replace("google", "mysite") + href=ohref.replace("http://ceur-ws.org/","/") + href=href.replace("../ceur-ws.css","/ceur-ws.css") + href=re.sub(r'paper([0-9]+).pdf', fr"/Vol-{self.number}/paper\g<1>.pdf", href) + pass + a['href']=href + content=soup.prettify( formatter="html" ) return content + + def getPaper(self,paper_number:int): + """ + get the paper with the given number + + Args: + paper_number(int): the number of the paper + """ + paper=Paper() + paper.paper_number=paper_number + paper.volume=self + return paper class VolumeManager(): """ @@ -46,6 +87,7 @@ def getVolume(self,number:int)->Volume: vol_dir=f"{self.base_path}/Vol-{number}" if os.path.isdir(vol_dir): vol=Volume(number=number) + vol.number=int(vol.number) vol.vm=self vol.vol_dir=vol_dir return vol diff --git a/ceurspt/webserver.py b/ceurspt/webserver.py index bd08821..21b60a8 100644 --- a/ceurspt/webserver.py +++ b/ceurspt/webserver.py @@ -4,7 +4,8 @@ @author: wf """ from fastapi import FastAPI -from fastapi.responses import HTMLResponse, RedirectResponse +from fastapi.responses import FileResponse, HTMLResponse, RedirectResponse +from fastapi.staticfiles import StaticFiles from ceurspt.ceurws import VolumeManager import dataclasses @@ -13,14 +14,32 @@ class WebServer: the webserver """ - def __init__(self,vm:VolumeManager): + def __init__(self,vm:VolumeManager,static_directory:str="static"): """ constructor + + Args: + vm(VolumeManager): the volume manager to use + static_directory(str): the directory for static html files to use """ self.app = FastAPI() + #https://fastapi.tiangolo.com/tutorial/static-files/ + self.app.mount("/static", StaticFiles(directory=static_directory), name="static") self.vm=vm + @self.app.get("/Vol-{number:int}/paper{paper_number:int}.pdf") + async def paperPdf(number:int,paper_number:int): + """ + get the PDF for the given paper + """ + vol=self.vm.getVolume(number) + paper=vol.getPaper(paper_number) + pdf=paper.getPdf() + return FileResponse(pdf) + + + @self.app.get("/Vol-{number:int}.json") async def volumeJson(number: int): """ @@ -40,7 +59,7 @@ async def volumeHtml(number:int): """ vol=self.vm.getVolume(number) if vol: - content=vol.getHtml() + content=vol.getHtml(fixLinks=True) return HTMLResponse(content=content, status_code=200) else: return HTMLResponse(content=f"unknown volume number {number}",status_code=404) diff --git a/pyproject.toml b/pyproject.toml index a73703c..84a85fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,9 @@ dependencies = [ # https://pypi.org/project/uvicorn/ "uvicorn", # https://pypi.org/project/linkml-runtime/ - "linkml-runtime" + "linkml-runtime", + # https://pypi.org/project/beautifulsoup4/ + "beautifulsoup4" ] requires-python = ">=3.8" diff --git a/static/CEUR-WS-logo-blue.png b/static/CEUR-WS-logo-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa0cdb933dc9ea2d5e7960b7886ef3bfcf0f2b2 GIT binary patch literal 22727 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

`CTHTSo;JDyS%odnYewb%Q$!S9 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 G5}E)%Vw|)9 literal 0 HcmV?d00001 diff --git a/static/CEUR-WS-logo.png b/static/CEUR-WS-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fbbe50530072491908bd90a4b0e268ba7aaded57 GIT binary patch literal 21611 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

5EP(4pH#(i%> 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 i*nZ7`+)7{omj4IwQlLZixM7_D0000) */ +/* Modified: 16-Oct-2013/M.Jeusfeld (use grey for blue) */ +/* Modified: 11-Dec-2013/M.Jeusfeld (CEURWSLOGO div) */ +/* Modified: 24-Mar-2015/M.Jeusfeld (paper directories) */ +/* Modified: 16-Jul-2015/C.Lange (more accessible link colors) */ +/* Modified: 08-Feb-2016/M.Jeusfeld (distinguish AUX from CEURTITLES) */ +/* Modified: 05-Oct-2019/M.Jeusfeld (CEURCCBY tag) */ +/* Modified: 30-Oct-2019/M.Jeusfeld (write before Volnr disabled) */ +/* Modified: 03-Dec-2019/M.Jeusfeld (print bg images) */ +/* Modified: 07-Nov-2022/M.Jeusfeld (use https) */ + + +body { +font-family: arial, sans-serif; +font-size: medium; +background-image: url(/static/ceurws-bg.png); +margin-left: +32px; +margin-right: +8px; +} + +/* 2015-04-21/MJ: for mobile-friendly layout */ +@-ms-viewport{ + width: device-width; + initial-scale: 1.0; +} + +@media print { + body > header address { + display:none; + } + body > header #document-license { + width:19em; + clear:right; + float:right; + margin-top:1em !important; + margin-right:0; + } + #content { + page-break-before:always; + } +} + +A:link {color: #404080; text-decoration: none;} /* display of links */ +A:visited {color: #404080; text-decoration: none;} /* visited links */ +A:hover {color: #000080; text-decoration: none;} /* links under the cursor */ +:target {background-color:#FFFFFF;} /* background for current fragment */ + +H1 {color:#000000; font-family:arial, cursive, sans-serif;} + +P,TABLE,TR,TD {font-family:arial,sans-serif;} + +UL {list-style-type: square; list-style-image: url(/ceurws-bullet-6x12.png);} + +LI {margin-bottom:7px;} /* separates paper elements */ + +PRE {color:#228120} + +.CEURPAGES {float:right; padding: 2px; font-size:smaller;} +.AUXPAGES {float:right; padding: 2px; font-size:smaller;} + +.CEURTOC {width:90%; page-break-before:always;} /* table of contents a bit narrower than the total page width */ + +.CEURAUTHOR {font-style:italic;} +.CEURAUTHORS {font-style:italic;} +.AUXAUTHOR {font-style:normal;} +.AUXAUTHORS {font-style:normal;} + +.CEURTITLE {font-weight:normal;} +.AUXTITLE {font-weight:normal;} +.CEURTITLE:hover {color: #006040;} /* proper CEURTITLEs get highlighted */ + +.CEURVOLNR {font-weight:bold; color:#404040; font-size:large;} + +/* write "CEUR-WS.org/" with background color before the VOLNR */ +/* will show up when printing the page */ +/* .CEURVOLNR:before{content:"CEUR-WS.org/"; color:#F5F4EF; font-size:large;} */ + +.CEURURN {font-weight:bold; color:#404040;} + +/* for paper directories */ +.CEURVOLURL {font-weight:bold; color:#000080;} +.CEURPAPERID {font-weight:bold; color:#404040;} + +.CEURABSTRACT {/* border-style: solid; border-width: 1px; padding: 5px 10px 5px 10px; */ + word-wrap: break-word; margin-left: +42px; margin-right: +68px; } + +.unobtrusive {color: #777777; font-size: smaller;} /* unobtrusive text; for copyright notes */ + +.copyright {font-size: x-small;} /* even smaller text in copyright notes; x-small replaces <font size="-1"> when base size is medium */ + + +#CEURWSLOGO { + background-image: url('/static/CEUR-WS-logo.png'); + height: 100px; + width: 390px; + color-adjust: exact !important; /*Firefox*/ +} +#CEURWSLOGO:hover { + background-image: url('/static/CEUR-WS-logo-blue.png'); +/* background-image: url('/static/CEUR-WS-logo-xmas.png'); */ +} + + +#CEURCCBY { + background-image: url('/static/cc-by_100x35.png'); + width: 100px; + height: 35px; + color-adjust: exact !important; /*Firefox*/ +} diff --git a/static/ceurws-bg.png b/static/ceurws-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..3635753a9b67cd806e2a22ea4b2a696775135011 GIT binary patch literal 9896 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 literal 0 HcmV?d00001 diff --git a/static/ceurws-bullet-6x12.png b/static/ceurws-bullet-6x12.png new file mode 100644 index 0000000000000000000000000000000000000000..62db6426e9016b89129e01366c762d4d0617703d GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz0U{m4&*%Xu#^NA%Cx&(BWL|<~lf2zs82*Fc zg1yTp14TFsJR*x37`TN&n2}-D90{Nxdx@v7EBhUGW?pNn-?tZB1`0`*xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~M)yx;TbNTu%P;|Gz!6*?}Vs%nzm{%(SmR mSN}@Fbr*~B*FTNHObnXY9B&RCa'Response': @@ -65,7 +66,7 @@ def test_read_volume(self): debug=self.debug #debug=True for ext,expected,equal in [ - (".json",{'number': 3262.0, 'title':None},True), + (".json",{'number': 3262, 'title':None},True), ("","CEURVERSION=2020-0",False), (".html","CEURVERSION=2020-0",False) ]: @@ -81,4 +82,12 @@ def test_read_volume(self): self.assertEqual(expected,result) else: self.assertTrue(expected in result) + + def test_read_paper(self): + """ + test reading the pdf for a paper + """ + response = self.checkResponse(f"/Vol-3262/paper1.pdf",200) + self.assertEqual(2509257,response.num_bytes_downloaded) + pass \ No newline at end of file diff --git a/tests/test_ceurws.py b/tests/test_ceurws.py index 88cbb57..a56ee68 100644 --- a/tests/test_ceurws.py +++ b/tests/test_ceurws.py @@ -3,17 +3,38 @@ @author: wf ''' -from ceurspt.ceurws import Volume +from ceurspt.ceurws import Volume,VolumeManager from tests.basetest import Basetest +from pathlib import Path class Test_CEURWS(Basetest): """ Test the ceur-ws concepts """ + def setUp(self, debug=False, profile=True): + Basetest.setUp(self, debug=debug, profile=profile) + script_path=Path(__file__) + base_path=f"{script_path.parent.parent}/ceur-ws" + self.vm=VolumeManager(base_path=base_path) + def test_volume(self): """ test instantiating a volume """ vol=Volume() - print(vol) + debug=self.debug + if debug: + print(vol) + + def test_fix_links(self): + """ + test fixing the links + """ + vol=self.vm.getVolume(3262) + html=vol.getHtml() + debug=self.debug + debug=True + if debug: + print(html) +