Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
D
Darwcss
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
Darwcss
Commits
c89fc1dd
Kaydet (Commit)
c89fc1dd
authored
Ara 29, 2018
tarafından
Batuhan Osman TASKAYA
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
replace casting with __render__ protocol + tests
üst
37736e73
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
125 additions
and
32 deletions
+125
-32
darwcss.py
darwcss/darwcss.py
+25
-32
test_color.py
tests/test_color.py
+17
-0
test_css.py
tests/test_css.py
+46
-0
test_numeric.py
tests/test_numeric.py
+13
-0
test_render.py
tests/test_render.py
+24
-0
No files found.
darwcss/darwcss.py
Dosyayı görüntüle @
c89fc1dd
...
...
@@ -5,21 +5,33 @@ from inspect import currentframe
from
textwrap
import
indent
from
colorsys
import
rgb_to_hls
,
rgb_to_hsv
,
rgb_to_yiq
class
AutoAddSelectorNotFoundInScope
(
Exception
):
pass
def
render
(
obj
):
if
hasattr
(
obj
,
'__render__'
):
return
obj
.
__render__
()
elif
obj
is
None
:
return
"none"
# None requires specific serialization.
else
:
return
f
"{obj}"
# Serialize to string
@dataclass
class
ColorValue
:
red
:
int
green
:
int
blue
:
int
typ
:
str
=
"rgb"
def
__render__
(
self
):
return
f
"rgb({self.red}, {self.green}, {self.blue})"
if
self
.
typ
==
"rgb"
else
f
"#{self.red}{self.green}{self.blue}"
@dataclass
class
NumericValue
:
value
:
Union
[
float
,
int
]
unit
:
str
def
__render__
(
self
):
return
f
"{self.value}{self.unit}"
@dataclass
class
Style
:
name
:
str
...
...
@@ -27,13 +39,17 @@ class Style:
important
:
bool
=
False
def
__post_init__
(
self
):
self
.
value
=
CSS
.
cast
(
self
.
value
)
f
=
currentframe
()
.
f_back
.
f_back
.
f_globals
if
f
.
get
(
"DARWCSS_AUTO"
,
False
):
self
.
value
=
render
(
self
.
value
)
f
=
currentframe
()
.
f_back
.
f_back
l
,
g
=
f
.
f_locals
,
f
.
f_globals
if
l
.
get
(
"DARWCSS_AUTO"
,
g
.
get
(
"DARWCSS_AUTO"
,
False
)):
try
:
f
[
f
.
get
(
"DARWCSS_SELECTOR"
,
'selector'
)]
.
append
(
self
)
selector_name
=
l
.
get
(
"DARWCSS_SELECTOR"
,
g
.
get
(
"DARWCSS_SELECTOR"
,
"selector"
))
selector
=
l
[
selector_name
]
except
KeyError
as
exc
:
raise
AutoAddSelectorNotFoundInScope
from
exc
raise
NameError
(
f
"Selector can not found in local namespace."
)
from
exc
else
:
selector
.
append
(
self
)
@dataclass
class
Selector
:
...
...
@@ -62,28 +78,5 @@ class CSS:
yield
selector
.
styles
finally
:
self
.
selectors
.
append
(
selector
)
@staticmethod
def
cast
(
value
):
if
isinstance
(
value
,
str
):
return
value
elif
isinstance
(
value
,
float
)
or
isinstance
(
value
,
int
):
return
f
"{value}"
# casts value to string with fstring's performance instead of str() call
elif
isinstance
(
value
,
NumericValue
):
return
f
"{value.value}{value.unit}"
elif
isinstance
(
value
,
ColorValue
):
if
value
.
typ
==
"rgb"
:
return
f
"rgb({value.red}, {value.green}, {value.blue})"
elif
value
.
typ
==
"hsl"
:
return
f
"hsl({value.red}, {value.green}
%
, {value.blue}
%
)"
elif
value
.
typ
==
"hex"
:
return
f
"#{value.red}{value.green}{value.blue}"
else
:
return
"black"
else
:
return
"none"
__call__
=
render
tests/test_color.py
0 → 100644
Dosyayı görüntüle @
c89fc1dd
import
unittest
from
darwcss.darwcss
import
ColorValue
,
render
class
TestColorValue
(
unittest
.
TestCase
):
def
test_output_rgb
(
self
):
red
=
ColorValue
(
255
,
0
,
0
)
blue
=
ColorValue
(
0
,
0
,
255
,
"rgb"
)
self
.
assertEqual
(
render
(
red
),
"rgb(255, 0, 0)"
)
self
.
assertEqual
(
render
(
blue
),
"rgb(0, 0, 255)"
)
def
test_output_hex
(
self
):
purple
=
ColorValue
(
"fa"
,
"ff"
,
"ca"
,
"hex"
)
self
.
assertEqual
(
render
(
purple
),
"#faffca"
)
if
__name__
==
'__main__'
:
unittest
.
main
()
tests/test_css.py
0 → 100644
Dosyayı görüntüle @
c89fc1dd
import
unittest
from
darwcss.darwcss
import
CSS
,
Style
class
TestCSS
(
unittest
.
TestCase
):
rendered_css
=
'.home{
\n
a: b;
\n
c: d;
\n
}
\n
'
def
test_css_with
(
self
):
css
=
CSS
()
with
css
.
selector
(
'.home'
)
as
selector
:
selector
.
append
(
Style
(
'a'
,
'b'
))
selector
.
append
(
Style
(
'c'
,
'd'
))
self
.
assertEqual
(
css
.
render
(),
self
.
rendered_css
)
def
test_css_auto_add
(
self
):
css
=
CSS
()
DARWCSS_AUTO
=
True
with
css
.
selector
(
'.home'
)
as
selector
:
Style
(
'a'
,
'b'
)
Style
(
'c'
,
'd'
)
self
.
assertEqual
(
css
.
render
(),
self
.
rendered_css
)
def
test_css_auto_add_different_selector
(
self
):
css
=
CSS
()
DARWCSS_AUTO
=
True
DARWCSS_SELECTOR
=
'test'
with
css
.
selector
(
'.home'
)
as
test
:
Style
(
'a'
,
'b'
)
Style
(
'c'
,
'd'
)
self
.
assertEqual
(
css
.
render
(),
self
.
rendered_css
)
def
test_css_auto_add_different_selector_name_error
(
self
):
css
=
CSS
()
DARWCSS_AUTO
=
True
DARWCSS_SELECTOR
=
'test'
with
css
.
selector
(
'.home'
)
as
selector
:
with
self
.
assertRaises
(
NameError
):
Style
(
'a'
,
'b'
)
if
__name__
==
'__main__'
:
unittest
.
main
()
tests/test_numeric.py
0 → 100644
Dosyayı görüntüle @
c89fc1dd
import
unittest
from
darwcss.darwcss
import
NumericValue
,
render
class
TestNumericValue
(
unittest
.
TestCase
):
def
test_numeric_render
(
self
):
t
=
NumericValue
(
5
,
"px"
)
self
.
assertEqual
(
render
(
t
),
"5px"
)
x
=
NumericValue
(
30
,
"
%
"
)
self
.
assertEqual
(
render
(
x
),
"30
%
"
)
if
__name__
==
'__main__'
:
unittest
.
main
()
tests/test_render.py
0 → 100644
Dosyayı görüntüle @
c89fc1dd
import
unittest
from
darwcss.darwcss
import
render
class
TestRender
(
unittest
.
TestCase
):
def
test_render_string
(
self
):
self
.
assertEqual
(
render
(
"merhaba"
),
"merhaba"
)
self
.
assertEqual
(
render
(
"T3est"
),
"T3est"
)
def
test_render_none
(
self
):
self
.
assertEqual
(
render
(
None
),
"none"
)
def
test_render_renderable
(
self
):
class
RenderableObject
:
def
__render__
(
self
)
->
str
:
return
"ABC"
self
.
assertEqual
(
render
(
RenderableObject
()),
"ABC"
)
def
test_render_string_converter
(
self
):
self
.
assertEqual
(
render
(
32
),
"32"
)
if
__name__
==
'__main__'
:
unittest
.
main
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment