Compare commits
3 commits
9cd2345c80
...
ccd7001726
| Author | SHA1 | Date | |
|---|---|---|---|
| ccd7001726 | |||
| 13589ab819 | |||
| b035c86b31 |
1 changed files with 36 additions and 28 deletions
|
|
@ -11,7 +11,7 @@ from sass import CompileError
|
|||
from sassutils.builder import Manifest
|
||||
from importlib.metadata import version as _get_version
|
||||
|
||||
from .codecs import quote_css_string
|
||||
from .codecs import quote_css_string, want_bytes, want_bytes
|
||||
from .validators import must_be
|
||||
from .asgi import _MiddlewareFactory, ASGIApp, ASGIReceive, ASGIScope, ASGISend
|
||||
from . import __version__ as _suou_version
|
||||
|
|
@ -83,6 +83,36 @@ class SassAsyncMiddleware(_MiddlewareFactory):
|
|||
break
|
||||
except CompileError as e:
|
||||
logger.error(str(e))
|
||||
resp_body = '\n'.join([
|
||||
'/*',
|
||||
str(e),
|
||||
'***',
|
||||
f'libsass {_libsass_version} + suou {_suou_version} {datetime.datetime.now().isoformat()}',
|
||||
'*/',
|
||||
'',
|
||||
'body::before {',
|
||||
f' content: {quote_css_string(str(e))};',
|
||||
' color: maroon;',
|
||||
' background-color: white;',
|
||||
' white-space: pre-wrap;',
|
||||
' display: block;',
|
||||
' font-family: monospace;',
|
||||
' user-select: text;'
|
||||
'}'
|
||||
]).encode('utf-8')
|
||||
|
||||
await send({
|
||||
'type': 'http.response.start',
|
||||
'status': self.error_status,
|
||||
'headers': [
|
||||
(b'Content-Type', b'text/css; charset=utf-8'),
|
||||
(b'Content-Length', want_bytes(f'{len(resp_body)}'))
|
||||
]
|
||||
})
|
||||
await send({
|
||||
'type': 'http.response.body',
|
||||
'body': resp_body
|
||||
})
|
||||
await send({
|
||||
'type': 'http.response.start',
|
||||
'status': self.error_status,
|
||||
|
|
@ -90,26 +120,6 @@ class SassAsyncMiddleware(_MiddlewareFactory):
|
|||
(b'Content-Type', b'text/css; charset=utf-8'),
|
||||
]
|
||||
})
|
||||
await send({
|
||||
'type': 'http.response.body',
|
||||
'body': '\n'.join([
|
||||
'/*',
|
||||
str(e),
|
||||
'***',
|
||||
f'libsass {_libsass_version} + suou {_suou_version} {datetime.datetime.now().isoformat()}',
|
||||
'*/',
|
||||
'',
|
||||
'body::before {',
|
||||
f' content: {quote_css_string(str(e))};',
|
||||
' color: maroon;',
|
||||
' background-color: white;',
|
||||
' white-space: pre-wrap;',
|
||||
' display: block;',
|
||||
' font-family: monospace;',
|
||||
' user-select: text;'
|
||||
'}'
|
||||
]).encode('utf-8')
|
||||
})
|
||||
|
||||
async def _read_file(path):
|
||||
with open(path, 'rb') as f:
|
||||
|
|
@ -120,22 +130,20 @@ class SassAsyncMiddleware(_MiddlewareFactory):
|
|||
else:
|
||||
break
|
||||
|
||||
resp_body = b''
|
||||
async for chunk in _read_file(os.path.join(package_dir, result)):
|
||||
resp_body += chunk
|
||||
await send({
|
||||
'type': 'http.response.body',
|
||||
'body': chunk
|
||||
})
|
||||
|
||||
await send({
|
||||
'type': 'http.response.start',
|
||||
'status': 200,
|
||||
'headers': [
|
||||
(b'Content-Type', b'text/css; charset=utf-8'),
|
||||
(b'Content-Length', want_bytes(f'{len(resp_body)}'))
|
||||
]
|
||||
})
|
||||
|
||||
await send({
|
||||
'type': 'http.response.body',
|
||||
'body': resp_body
|
||||
})
|
||||
|
||||
await self.app(scope, receive, send)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue