Skip to content

Commit

Permalink
Merge pull request #92 from digital-land/2283-resolve-missing-bytes-a…
Browse files Browse the repository at this point in the history
…nd-start-date-in-resourcecsv-data-implementation

Resolve missing bytes in resource.csv
  • Loading branch information
Staberinde authored Apr 14, 2022
2 parents e048172 + 767c24e commit b1615b4
Show file tree
Hide file tree
Showing 10 changed files with 31 additions and 22 deletions.
29 changes: 19 additions & 10 deletions digital_land/collection.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import logging
import os
import re
from datetime import datetime
from pathlib import Path
Expand Down Expand Up @@ -84,23 +83,33 @@ def check_item_path(self, item, path):

# a register of resources constructed from the log register
class ResourceLogStore(CSVStore):
def load(self, log, source, directory=collection_directory):
def load(
self, log: LogStore, source: CSVStore, directory: str = collection_directory
):
"""
Rebuild resource.csv file from the log store
This does not depend in any way on the current state of resource.csv on the file system
We cannot assume that all resources are present on the local file system as we also want to keep records
of resources we have not collected within the current collector execution due to their end_date elapsing
:param log:
:type log: LogStore
:param source:
:type source: CSVStore
:param directory:
:type directory: str
"""
resources = {}
today = datetime.utcnow().isoformat()[:10]

for entry in log.entries:
if "resource" in entry:
resource = entry["resource"]
if resource not in resources:
path = resource_path(resource, directory=directory)
try:
size = os.path.getsize(path)
except (FileNotFoundError):
logging.warning("missing %s" % (path))
size = ""

resources[resource] = {
"bytes": size,
"bytes": entry["bytes"],
"endpoints": {},
"start-date": entry["entry-date"],
"end-date": entry["entry-date"],
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"elapsed":"0.111","endpoint-url":"https://raw.githubusercontent.com/digital-land/listed-building-collection/main/data/Southwark/Grade%20II.zip","entry-date":"2021-12-08T00:45:14.095210","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"Digital Land"},"resource":"efbdafb929921097a6e002188e281047bb4d512d40a8f88ade26cbb44118f0e3","response-headers":{"Accept-Ranges":"bytes","Access-Control-Allow-Origin":"*","Cache-Control":"max-age=300","Connection":"keep-alive","Content-Length":"226497","Content-Security-Policy":"default-src 'none'; style-src 'unsafe-inline'; sandbox","Content-Type":"application/zip","Date":"Wed, 08 Dec 2021 00:45:20 GMT","ETag":"W/\"ff43775d753d2e6150aa6b8f3609ae10437ead61564d56b18fb52fe82bd16a43\"","Expires":"Wed, 08 Dec 2021 00:50:20 GMT","Source-Age":"0","Strict-Transport-Security":"max-age=31536000","Vary":"Authorization,Accept-Encoding,Origin","Via":"1.1 varnish","X-Cache":"MISS","X-Cache-Hits":"0","X-Content-Type-Options":"nosniff","X-Fastly-Request-ID":"1a561c2428ab80a5f84b086e86929150d3a996ef","X-Frame-Options":"deny","X-GitHub-Request-Id":"767C:0AA0:498F62:72FEBC:61B00020","X-Served-By":"cache-bwi5037-BWI","X-Timer":"S1638924321.651268,VS0,VE89","X-XSS-Protection":"1; mode=block"},"ssl-verify":true,"status":"200"}
{"bytes":226497,"elapsed":"0.111","endpoint-url":"https://raw.githubusercontent.com/digital-land/listed-building-collection/main/data/Southwark/Grade%20II.zip","entry-date":"2021-12-08T00:45:14.095210","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"Digital Land"},"resource":"efbdafb929921097a6e002188e281047bb4d512d40a8f88ade26cbb44118f0e3","response-headers":{"Accept-Ranges":"bytes","Access-Control-Allow-Origin":"*","Cache-Control":"max-age=300","Connection":"keep-alive","Content-Length":"226497","Content-Security-Policy":"default-src 'none'; style-src 'unsafe-inline'; sandbox","Content-Type":"application/zip","Date":"Wed, 08 Dec 2021 00:45:20 GMT","ETag":"W/\"ff43775d753d2e6150aa6b8f3609ae10437ead61564d56b18fb52fe82bd16a43\"","Expires":"Wed, 08 Dec 2021 00:50:20 GMT","Source-Age":"0","Strict-Transport-Security":"max-age=31536000","Vary":"Authorization,Accept-Encoding,Origin","Via":"1.1 varnish","X-Cache":"MISS","X-Cache-Hits":"0","X-Content-Type-Options":"nosniff","X-Fastly-Request-ID":"1a561c2428ab80a5f84b086e86929150d3a996ef","X-Frame-Options":"deny","X-GitHub-Request-Id":"767C:0AA0:498F62:72FEBC:61B00020","X-Served-By":"cache-bwi5037-BWI","X-Timer":"S1638924321.651268,VS0,VE89","X-XSS-Protection":"1; mode=block"},"ssl-verify":true,"status":"200"}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"elapsed":"0.703","endpoint-url":"https://opendata.arcgis.com/datasets/a0ea54c61b1f4bdfbe9605324cf70c81_0.geojson","entry-date":"2021-11-23T22:56:40.329925","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"Digital Land"},"resource":"72337bced0ee7e6f7ec339822e3ec1a55dbd02729a1df3747308ebdd49905868","response-headers":{"Cache-Control":"must-revalidate","Connection":"keep-alive","Content-Disposition":"attachment; filename=\"Listed_Buildings.geojson\"","Content-Encoding":"gzip","Content-Length":"488502","Content-Type":"application/json","Date":"Tue, 23 Nov 2021 22:56:41 GMT","ETag":"\"f1cc6c4a7ab1eff2cab90ffda4d4fc04\"","Last-Modified":"Tue, 23 Nov 2021 18:52:07 GMT","Server":"openresty","Vary":"Accept-Encoding","x-amz-meta-cachetime":"3439"},"ssl-verify":true,"status":"200"}
{"bytes":1730355,"elapsed":"0.703","endpoint-url":"https://opendata.arcgis.com/datasets/a0ea54c61b1f4bdfbe9605324cf70c81_0.geojson","entry-date":"2021-11-23T22:56:40.329925","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"Digital Land"},"resource":"72337bced0ee7e6f7ec339822e3ec1a55dbd02729a1df3747308ebdd49905868","response-headers":{"Cache-Control":"must-revalidate","Connection":"keep-alive","Content-Disposition":"attachment; filename=\"Listed_Buildings.geojson\"","Content-Encoding":"gzip","Content-Length":"488502","Content-Type":"application/json","Date":"Tue, 23 Nov 2021 22:56:41 GMT","ETag":"\"f1cc6c4a7ab1eff2cab90ffda4d4fc04\"","Last-Modified":"Tue, 23 Nov 2021 18:52:07 GMT","Server":"openresty","Vary":"Accept-Encoding","x-amz-meta-cachetime":"3439"},"ssl-verify":true,"status":"200"}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"elapsed":"0.099","endpoint-url":"https://raw.githubusercontent.com/digital-land/listed-building-collection/main/data/Southwark/Grade%20I%20Star.zip","entry-date":"2021-12-08T00:45:14.095210","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"Digital Land"},"resource":"e3a22838b44a3c1e594eee33788728a6366caef066690e5fb9fd91e46e74bac1","response-headers":{"Accept-Ranges":"bytes","Access-Control-Allow-Origin":"*","Cache-Control":"max-age=300","Connection":"keep-alive","Content-Length":"11714","Content-Security-Policy":"default-src 'none'; style-src 'unsafe-inline'; sandbox","Content-Type":"application/zip","Date":"Wed, 08 Dec 2021 00:45:20 GMT","ETag":"W/\"543bfb3611ce7dd0a394cc870097ecf3781e3bf26c8ac8cad5d681796a3a1d62\"","Expires":"Wed, 08 Dec 2021 00:50:20 GMT","Source-Age":"0","Strict-Transport-Security":"max-age=31536000","Vary":"Authorization,Accept-Encoding,Origin","Via":"1.1 varnish","X-Cache":"MISS","X-Cache-Hits":"0","X-Content-Type-Options":"nosniff","X-Fastly-Request-ID":"6ac2a726531519ddb1f819ad7cb25b3c4185d1b9","X-Frame-Options":"deny","X-GitHub-Request-Id":"2A9C:14BB:A537D6:D63B1E:61B00020","X-Served-By":"cache-bwi5037-BWI","X-Timer":"S1638924321.764149,VS0,VE89","X-XSS-Protection":"1; mode=block"},"ssl-verify":true,"status":"200"}
{"bytes":11714,"elapsed":"0.099","endpoint-url":"https://raw.githubusercontent.com/digital-land/listed-building-collection/main/data/Southwark/Grade%20I%20Star.zip","entry-date":"2021-12-08T00:45:14.095210","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"Digital Land"},"resource":"e3a22838b44a3c1e594eee33788728a6366caef066690e5fb9fd91e46e74bac1","response-headers":{"Accept-Ranges":"bytes","Access-Control-Allow-Origin":"*","Cache-Control":"max-age=300","Connection":"keep-alive","Content-Length":"11714","Content-Security-Policy":"default-src 'none'; style-src 'unsafe-inline'; sandbox","Content-Type":"application/zip","Date":"Wed, 08 Dec 2021 00:45:20 GMT","ETag":"W/\"543bfb3611ce7dd0a394cc870097ecf3781e3bf26c8ac8cad5d681796a3a1d62\"","Expires":"Wed, 08 Dec 2021 00:50:20 GMT","Source-Age":"0","Strict-Transport-Security":"max-age=31536000","Vary":"Authorization,Accept-Encoding,Origin","Via":"1.1 varnish","X-Cache":"MISS","X-Cache-Hits":"0","X-Content-Type-Options":"nosniff","X-Fastly-Request-ID":"6ac2a726531519ddb1f819ad7cb25b3c4185d1b9","X-Frame-Options":"deny","X-GitHub-Request-Id":"2A9C:14BB:A537D6:D63B1E:61B00020","X-Served-By":"cache-bwi5037-BWI","X-Timer":"S1638924321.764149,VS0,VE89","X-XSS-Protection":"1; mode=block"},"ssl-verify":true,"status":"200"}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"elapsed":"2.558","endpoint-url":"https://mapping.canterbury.gov.uk/arcgis/rest/services/External/Planning_Constraints_New/MapServer/7/query?where=1%3D1&text=&objectIds=&time=&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=&parameterValues=&rangeValues=&f=geojson","entry-date":"2021-12-23T00:44:27.872361","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"DLUHC Digital Land"},"resource":"b9f01065469eb19645c1f00acb149289d2f050e5a6407a8fc8db199ed37c923a","response-headers":{"Cache-Control":"max-age=0,must-revalidate","Content-Encoding":"gzip","Content-Type":"text/plain","Date":"Thu, 23 Dec 2021 00:46:36 GMT","ETag":"fa52e9e7","Referrer-Policy":"same-origin","Server":"Microsoft-IIS/8.5","Transfer-Encoding":"chunked","Vary":"Origin","X-Frame-Options":"SAMEORIGIN","X-Powered-By":"ARR/2.5","X-XSS-Protection":"1"},"ssl-verify":true,"status":"200"}
{"bytes":931093,"elapsed":"2.558","endpoint-url":"https://mapping.canterbury.gov.uk/arcgis/rest/services/External/Planning_Constraints_New/MapServer/7/query?where=1%3D1&text=&objectIds=&time=&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=&parameterValues=&rangeValues=&f=geojson","entry-date":"2021-12-23T00:44:27.872361","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"DLUHC Digital Land"},"resource":"b9f01065469eb19645c1f00acb149289d2f050e5a6407a8fc8db199ed37c923a","response-headers":{"Cache-Control":"max-age=0,must-revalidate","Content-Encoding":"gzip","Content-Type":"text/plain","Date":"Thu, 23 Dec 2021 00:46:36 GMT","ETag":"fa52e9e7","Referrer-Policy":"same-origin","Server":"Microsoft-IIS/8.5","Transfer-Encoding":"chunked","Vary":"Origin","X-Frame-Options":"SAMEORIGIN","X-Powered-By":"ARR/2.5","X-XSS-Protection":"1"},"ssl-verify":true,"status":"200"}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"elapsed":"0.781","endpoint-url":"https://mapping.canterbury.gov.uk/arcgis/rest/services/External/Planning_Constraints_New/MapServer/8/query?where=1%3D1&text=&objectIds=&time=&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=&parameterValues=&rangeValues=&f=geojson","entry-date":"2021-12-23T00:44:27.872361","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"DLUHC Digital Land"},"resource":"d658eefe9069c1559281ef97c120c45d859f4135cdca3d78ee628f96d8ecdfd0","response-headers":{"Cache-Control":"max-age=0,must-revalidate","Content-Encoding":"gzip","Content-Length":"130967","Content-Type":"text/plain","Date":"Thu, 23 Dec 2021 00:46:38 GMT","ETag":"97d7e34b","Referrer-Policy":"same-origin","Server":"Microsoft-IIS/8.5","Vary":"Origin","X-Frame-Options":"SAMEORIGIN","X-Powered-By":"ARR/2.5","X-XSS-Protection":"1"},"ssl-verify":true,"status":"200"}
{"bytes":431332,"elapsed":"1.386","endpoint-url":"https://mapping.canterbury.gov.uk/arcgis/rest/services/External/Planning_Constraints_New/MapServer/8/query?where=1%3D1&text=&objectIds=&time=&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=&parameterValues=&rangeValues=&f=geojson","entry-date":"2021-12-27T00:45:12.485643","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"DLUHC Digital Land"},"resource":"d658eefe9069c1559281ef97c120c45d859f4135cdca3d78ee628f96d8ecdfd0","response-headers":{"Cache-Control":"max-age=0,must-revalidate","Content-Encoding":"gzip","Content-Length":"130967","Content-Type":"text/plain","Date":"Mon, 27 Dec 2021 00:47:26 GMT","ETag":"97d7e34b","Referrer-Policy":"same-origin","Server":"Microsoft-IIS/8.5","Vary":"Origin","X-Frame-Options":"SAMEORIGIN","X-Powered-By":"ARR/2.5","X-XSS-Protection":"1"},"ssl-verify":true,"status":"200"}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"elapsed":"0.088","endpoint-url":"https://raw.githubusercontent.com/digital-land/listed-building-collection/main/data/Southwark/Grade%20I.zip","entry-date":"2021-12-08T00:45:14.095210","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"Digital Land"},"resource":"9d20207f8f2f674fda09b9632bd5d1495a635fcb762827b46c96522a45624bff","response-headers":{"Accept-Ranges":"bytes","Access-Control-Allow-Origin":"*","Cache-Control":"max-age=300","Connection":"keep-alive","Content-Length":"5730","Content-Security-Policy":"default-src 'none'; style-src 'unsafe-inline'; sandbox","Content-Type":"application/zip","Date":"Wed, 08 Dec 2021 00:45:20 GMT","ETag":"W/\"bf1301f1467786bdbd5f5397b9365dcdca020ac2611cc68d25ca6f7fc6840847\"","Expires":"Wed, 08 Dec 2021 00:50:20 GMT","Source-Age":"0","Strict-Transport-Security":"max-age=31536000","Vary":"Authorization,Accept-Encoding,Origin","Via":"1.1 varnish","X-Cache":"MISS","X-Cache-Hits":"0","X-Content-Type-Options":"nosniff","X-Fastly-Request-ID":"a21a5d8d93672577b36e9b6ff25e688c654fd93e","X-Frame-Options":"deny","X-GitHub-Request-Id":"40F0:6E85:62BD83:8F8C8E:61B00020","X-Served-By":"cache-bwi5037-BWI","X-Timer":"S1638924321.561770,VS0,VE79","X-XSS-Protection":"1; mode=block"},"ssl-verify":true,"status":"200"}
{"bytes":5730,"elapsed":"0.088","endpoint-url":"https://raw.githubusercontent.com/digital-land/listed-building-collection/main/data/Southwark/Grade%20I.zip","entry-date":"2021-12-08T00:45:14.095210","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"Digital Land"},"resource":"9d20207f8f2f674fda09b9632bd5d1495a635fcb762827b46c96522a45624bff","response-headers":{"Accept-Ranges":"bytes","Access-Control-Allow-Origin":"*","Cache-Control":"max-age=300","Connection":"keep-alive","Content-Length":"5730","Content-Security-Policy":"default-src 'none'; style-src 'unsafe-inline'; sandbox","Content-Type":"application/zip","Date":"Wed, 08 Dec 2021 00:45:20 GMT","ETag":"W/\"bf1301f1467786bdbd5f5397b9365dcdca020ac2611cc68d25ca6f7fc6840847\"","Expires":"Wed, 08 Dec 2021 00:50:20 GMT","Source-Age":"0","Strict-Transport-Security":"max-age=31536000","Vary":"Authorization,Accept-Encoding,Origin","Via":"1.1 varnish","X-Cache":"MISS","X-Cache-Hits":"0","X-Content-Type-Options":"nosniff","X-Fastly-Request-ID":"a21a5d8d93672577b36e9b6ff25e688c654fd93e","X-Frame-Options":"deny","X-GitHub-Request-Id":"40F0:6E85:62BD83:8F8C8E:61B00020","X-Served-By":"cache-bwi5037-BWI","X-Timer":"S1638924321.561770,VS0,VE79","X-XSS-Protection":"1; mode=block"},"ssl-verify":true,"status":"200"}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"elapsed":"0.145","endpoint-url":"https://raw.githubusercontent.com/digital-land/listed-building-collection/main/data/listed-building-grade.csv","entry-date":"2021-11-22T16:26:21.327494","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"Digital Land"},"resource":"47e8c774370b10c803da048f4f1d98cfb028d25e01408314c92f0ac74cbee12b","response-headers":{"Accept-Ranges":"bytes","Access-Control-Allow-Origin":"*","Cache-Control":"max-age=300","Connection":"keep-alive","Content-Encoding":"gzip","Content-Length":"121","Content-Security-Policy":"default-src 'none'; style-src 'unsafe-inline'; sandbox","Content-Type":"text/plain; charset=utf-8","Date":"Mon, 22 Nov 2021 16:26:21 GMT","ETag":"W/\"e4813d621307a0de143f149bacbf67dc90cfd8727c2d6f162fa78711572e47a2\"","Expires":"Mon, 22 Nov 2021 16:31:21 GMT","Source-Age":"0","Strict-Transport-Security":"max-age=31536000","Vary":"Authorization,Accept-Encoding,Origin","Via":"1.1 varnish","X-Cache":"MISS","X-Cache-Hits":"0","X-Content-Type-Options":"nosniff","X-Fastly-Request-ID":"47e7edc1292e3e4de3c646ab9f98efa3c53f53da","X-Frame-Options":"deny","X-GitHub-Request-Id":"5C10:3CF0:838A87:AD95D7:619BC4AD","X-Served-By":"cache-bwi5079-BWI","X-Timer":"S1637598382.617088,VS0,VE81","X-XSS-Protection":"1; mode=block"},"ssl-verify":true,"status":"200"}
{"bytes":152,"elapsed":"0.145","endpoint-url":"https://raw.githubusercontent.com/digital-land/listed-building-collection/main/data/listed-building-grade.csv","entry-date":"2021-11-22T16:26:21.327494","request-headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","User-Agent":"Digital Land"},"resource":"47e8c774370b10c803da048f4f1d98cfb028d25e01408314c92f0ac74cbee12b","response-headers":{"Accept-Ranges":"bytes","Access-Control-Allow-Origin":"*","Cache-Control":"max-age=300","Connection":"keep-alive","Content-Encoding":"gzip","Content-Length":"121","Content-Security-Policy":"default-src 'none'; style-src 'unsafe-inline'; sandbox","Content-Type":"text/plain; charset=utf-8","Date":"Mon, 22 Nov 2021 16:26:21 GMT","ETag":"W/\"e4813d621307a0de143f149bacbf67dc90cfd8727c2d6f162fa78711572e47a2\"","Expires":"Mon, 22 Nov 2021 16:31:21 GMT","Source-Age":"0","Strict-Transport-Security":"max-age=31536000","Vary":"Authorization,Accept-Encoding,Origin","Via":"1.1 varnish","X-Cache":"MISS","X-Cache-Hits":"0","X-Content-Type-Options":"nosniff","X-Fastly-Request-ID":"47e7edc1292e3e4de3c646ab9f98efa3c53f53da","X-Frame-Options":"deny","X-GitHub-Request-Id":"5C10:3CF0:838A87:AD95D7:619BC4AD","X-Served-By":"cache-bwi5079-BWI","X-Timer":"S1637598382.617088,VS0,VE81","X-XSS-Protection":"1; mode=block"},"ssl-verify":true,"status":"200"}
Loading

0 comments on commit b1615b4

Please sign in to comment.