feat(shields): Use simpleicons to get icon.

This commit is contained in:
Lucàs
2024-01-09 15:16:43 +01:00
parent b2c6d4c070
commit 3e04dcfeca
8 changed files with 136 additions and 67 deletions
+26 -16
View File
@@ -4,20 +4,15 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="b25cc8d3-396f-4036-b751-5d061242b2fc" name="Changes" comment="Use only Python">
<change afterPath="$PROJECT_DIR$/src/shield/shield_builder.py" afterDir="false" />
<list default="true" id="b25cc8d3-396f-4036-b751-5d061242b2fc" name="Changes" comment="Add Builder for shields">
<change afterPath="$PROJECT_DIR$/src/shield/skill_shield.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/shield/social_shield.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/assets/banner.svg" beforeDir="false" afterPath="$PROJECT_DIR$/assets/banner.svg" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/config.yaml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/config.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/config.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/requirements" beforeDir="false" afterPath="$PROJECT_DIR$/requirements" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/model/skill.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/model/skill.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/model/skill_list.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/model/skill_list.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/model/social.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/model/social.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/model/social_list.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/model/social_list.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/template.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/template.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/template.md" beforeDir="false" afterPath="$PROJECT_DIR$/template.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/shield/shield_builder.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/shield/shield_builder.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -66,6 +61,8 @@
"Python.main.executor": "Run",
"Python.shield_builder.executor": "Run",
"Python.skill.executor": "Run",
"Python.skill_shield.executor": "Run",
"Python.skill_shield_builder.executor": "Run",
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
@@ -73,7 +70,7 @@
"javascript.nodejs.core.library.configured.version": "20.6.1",
"javascript.nodejs.core.library.typings.version": "20.6.5",
"last_directory_selection": "/Users/lucas/Documents/GitHub/LucasVbr/model",
"last_opened_file_path": "/Users/lucas/Documents/GitHub/LucasVbr/models",
"last_opened_file_path": "/Users/lucas/Documents/GitHub/LucasVbr/src/shield",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
@@ -86,6 +83,7 @@
}]]></component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/src/shield" />
<recent name="$PROJECT_DIR$/models" />
<recent name="$PROJECT_DIR$/src" />
<recent name="$PROJECT_DIR$/components" />
@@ -193,7 +191,8 @@
<workItem from="1691244360881" duration="1235000" />
<workItem from="1703610497268" duration="12323000" />
<workItem from="1704274694444" duration="8000" />
<workItem from="1704364154441" duration="11806000" />
<workItem from="1704364154441" duration="13259000" />
<workItem from="1704806823609" duration="2836000" />
</task>
<task id="LOCAL-00001" summary="Add OpenClassRooms link">
<created>1660658552230</created>
@@ -245,7 +244,15 @@
<option name="project" value="LOCAL" />
<updated>1703624982444</updated>
</task>
<option name="localTasksCounter" value="8" />
<task id="LOCAL-00008" summary="Add Builder for shields">
<option name="closed" value="true" />
<created>1704379399992</created>
<option name="number" value="00008" />
<option name="presentableId" value="LOCAL-00008" />
<option name="project" value="LOCAL" />
<updated>1704379399992</updated>
</task>
<option name="localTasksCounter" value="9" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
@@ -269,16 +276,19 @@
<MESSAGE value="Add package.json and typescript configuration files" />
<MESSAGE value="Add ts-node and some skills" />
<MESSAGE value="Use only Python" />
<option name="LAST_COMMIT_MESSAGE" value="Use only Python" />
<MESSAGE value="Add Builder for shields" />
<option name="LAST_COMMIT_MESSAGE" value="Add Builder for shields" />
</component>
<component name="XSLT-Support.FileAssociations.UIState">
<expand />
<select />
</component>
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/LucasVbr$skill.coverage" NAME="skill Coverage Results" MODIFIED="1704375618832" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/src/model" />
<SUITE FILE_PATH="coverage/LucasVbr$skill.coverage" NAME="skill Coverage Results" MODIFIED="1704808529789" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/src/model" />
<SUITE FILE_PATH="coverage/LucasVbr$download_skill_badges.coverage" NAME="download_skill_badges Coverage Results" MODIFIED="1704375392377" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/src" />
<SUITE FILE_PATH="coverage/LucasVbr$shield_builder.coverage" NAME="shield_builder Coverage Results" MODIFIED="1704374403309" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/src/shield" />
<SUITE FILE_PATH="coverage/LucasVbr$main.coverage" NAME="main Coverage Results" MODIFIED="1704379050479" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/LucasVbr$skill_shield_builder.coverage" NAME="skill_shield_builder Coverage Results" MODIFIED="1704808074648" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/src/shield" />
<SUITE FILE_PATH="coverage/LucasVbr$main.coverage" NAME="main Coverage Results" MODIFIED="1704809040131" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/LucasVbr$skill_shield.coverage" NAME="skill_shield Coverage Results" MODIFIED="1704808482386" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/src/shield" />
</component>
</project>
+32 -32
View File
@@ -12,41 +12,41 @@ I'm a passionate developer from 🇫🇷 **Pau, France**.
## 🔗 Social Links
![Linkedin](https://img.shields.io/static/v1?message=Linkedin&style=for-the-badge&logo=Linkedin&logoColor=white&label=+&color=black&link=https%3A%2F%2Fwww.linkedin.com%2Fin%2Flucasvbr)
![FreeCodeCamp](https://img.shields.io/static/v1?message=FreeCodeCamp&style=for-the-badge&logo=FreeCodeCamp&logoColor=white&label=+&color=black&link=https%3A%2F%2Fwww.freecodecamp.org%2FLucasVbr)
![OpenClassRooms](https://img.shields.io/static/v1?message=OpenClassRooms&style=for-the-badge&logo=OpenClassRooms&logoColor=white&label=+&color=black&link=https%3A%2F%2Fopenclassrooms.com%2Ffr%2Fmembers%2F97j9zltv6225)
![Exercism](https://img.shields.io/static/v1?message=Exercism&style=for-the-badge&logo=Exercism&logoColor=white&label=+&color=black&link=https%3A%2F%2Fexercism.org%2Fprofiles%2FLucasVbr)
![Linkedin](https://img.shields.io/static/v1?message=LinkedIn&style=for-the-badge&logo=linkedin&logoColor=white&label=+&color=0A66C2&link=https%3A%2F%2Fwww.linkedin.com%2Fin%2Flucasvbr)
![FreeCodeCamp](https://img.shields.io/static/v1?message=freeCodeCamp&style=for-the-badge&logo=freecodecamp&logoColor=white&label=+&color=0A0A23&link=https%3A%2F%2Fwww.freecodecamp.org%2FLucasVbr)
![OpenClassRooms](https://img.shields.io/static/v1?message=OpenClassRooms&style=for-the-badge&logoColor=white&label=+&color=black&link=https%3A%2F%2Fopenclassrooms.com%2Ffr%2Fmembers%2F97j9zltv6225)
![Exercism](https://img.shields.io/static/v1?message=Exercism&style=for-the-badge&logo=exercism&logoColor=white&label=+&color=009CAB&link=https%3A%2F%2Fexercism.org%2Fprofiles%2FLucasVbr)
## 🛠 Skills
![Android](https://img.shields.io/static/v1?message=Android&logo=Android&logoColor=white&label=+&color=black)
![Angular](https://img.shields.io/static/v1?message=Angular&logo=Angular&logoColor=white&label=+&color=black)
![Bootstrap](https://img.shields.io/static/v1?message=Bootstrap&logo=Bootstrap&logoColor=white&label=+&color=black)
![Bulma](https://img.shields.io/static/v1?message=Bulma&logo=Bulma&logoColor=white&label=+&color=black)
![C](https://img.shields.io/static/v1?message=C&logo=C&logoColor=white&label=+&color=black)
![CSS3](https://img.shields.io/static/v1?message=CSS3&logo=CSS3&logoColor=white&label=+&color=black)
![Deno](https://img.shields.io/static/v1?message=Deno&logo=Deno&logoColor=white&label=+&color=black)
![Docker](https://img.shields.io/static/v1?message=Docker&logo=Docker&logoColor=white&label=+&color=black)
![Express](https://img.shields.io/static/v1?message=Express&logo=Express&logoColor=white&label=+&color=black)
![Figma](https://img.shields.io/static/v1?message=Figma&logo=Figma&logoColor=white&label=+&color=black)
![GNU Bash](https://img.shields.io/static/v1?message=GNU_Bash&logo=GNU+Bash&logoColor=white&label=+&color=black)
![Git](https://img.shields.io/static/v1?message=Git&logo=Git&logoColor=white&label=+&color=black)
![HTML5](https://img.shields.io/static/v1?message=HTML5&logo=HTML5&logoColor=white&label=+&color=black)
![JavaScript](https://img.shields.io/static/v1?message=JavaScript&logo=JavaScript&logoColor=white&label=+&color=black)
![MariaDB](https://img.shields.io/static/v1?message=MariaDB&logo=MariaDB&logoColor=white&label=+&color=black)
![MongoDB](https://img.shields.io/static/v1?message=MongoDB&logo=MongoDB&logoColor=white&label=+&color=black)
![MySQL](https://img.shields.io/static/v1?message=MySQL&logo=MySQL&logoColor=white&label=+&color=black)
![Node.js](https://img.shields.io/static/v1?message=Node.js&logo=Node.js&logoColor=white&label=+&color=black)
![Nunjucks](https://img.shields.io/static/v1?message=Nunjucks&logo=Nunjucks&logoColor=white&label=+&color=black)
![OCaml](https://img.shields.io/static/v1?message=OCaml&logo=OCaml&logoColor=white&label=+&color=black)
![PHP](https://img.shields.io/static/v1?message=PHP&logo=PHP&logoColor=white&label=+&color=black)
![PostgreSQL](https://img.shields.io/static/v1?message=PostgreSQL&logo=PostgreSQL&logoColor=white&label=+&color=black)
![Pug](https://img.shields.io/static/v1?message=Pug&logo=Pug&logoColor=white&label=+&color=black)
![Python](https://img.shields.io/static/v1?message=Python&logo=Python&logoColor=white&label=+&color=black)
![React](https://img.shields.io/static/v1?message=React&logo=React&logoColor=white&label=+&color=black)
![SQLite](https://img.shields.io/static/v1?message=SQLite&logo=SQLite&logoColor=white&label=+&color=black)
![Symfony](https://img.shields.io/static/v1?message=Symfony&logo=Symfony&logoColor=white&label=+&color=black)
![TypeScript](https://img.shields.io/static/v1?message=TypeScript&logo=TypeScript&logoColor=white&label=+&color=black)
![Android](https://img.shields.io/static/v1?message=Android&logo=android&logoColor=white&label=+&color=3DDC84)
![Angular](https://img.shields.io/static/v1?message=Angular&logo=angular&logoColor=white&label=+&color=DD0031)
![Bootstrap](https://img.shields.io/static/v1?message=Bootstrap&logo=bootstrap&logoColor=white&label=+&color=7952B3)
![Bulma](https://img.shields.io/static/v1?message=Bulma&logo=bulma&logoColor=white&label=+&color=00D1B2)
![C](https://img.shields.io/static/v1?message=C&logo=c&logoColor=white&label=+&color=A8B9CC)
![CSS3](https://img.shields.io/static/v1?message=CSS3&logo=css3&logoColor=white&label=+&color=1572B6)
![Deno](https://img.shields.io/static/v1?message=Deno&logo=deno&logoColor=white&label=+&color=000000)
![Docker](https://img.shields.io/static/v1?message=Docker&logo=docker&logoColor=white&label=+&color=2496ED)
![Express](https://img.shields.io/static/v1?message=Express&logo=express&logoColor=white&label=+&color=000000)
![Figma](https://img.shields.io/static/v1?message=Figma&logo=figma&logoColor=white&label=+&color=F24E1E)
![GNU Bash](https://img.shields.io/static/v1?message=GNU_Bash&logo=gnubash&logoColor=white&label=+&color=4EAA25)
![Git](https://img.shields.io/static/v1?message=Git&logo=git&logoColor=white&label=+&color=F05032)
![HTML5](https://img.shields.io/static/v1?message=HTML5&logo=html5&logoColor=white&label=+&color=E34F26)
![JavaScript](https://img.shields.io/static/v1?message=JavaScript&logo=javascript&logoColor=white&label=+&color=F7DF1E)
![MariaDB](https://img.shields.io/static/v1?message=MariaDB&logo=mariadb&logoColor=white&label=+&color=003545)
![MongoDB](https://img.shields.io/static/v1?message=MongoDB&logo=mongodb&logoColor=white&label=+&color=47A248)
![MySQL](https://img.shields.io/static/v1?message=MySQL&logo=mysql&logoColor=white&label=+&color=4479A1)
![Node.js](https://img.shields.io/static/v1?message=Node.js&logo=nodedotjs&logoColor=white&label=+&color=339933)
![Nunjucks](https://img.shields.io/static/v1?message=Nunjucks&logo=nunjucks&logoColor=white&label=+&color=1C4913)
![OCaml](https://img.shields.io/static/v1?message=OCaml&logo=ocaml&logoColor=white&label=+&color=EC6813)
![PHP](https://img.shields.io/static/v1?message=PHP&logo=php&logoColor=white&label=+&color=777BB4)
![PostgreSQL](https://img.shields.io/static/v1?message=PostgreSQL&logo=postgresql&logoColor=white&label=+&color=4169E1)
![Pug](https://img.shields.io/static/v1?message=Pug&logo=pug&logoColor=white&label=+&color=A86454)
![Python](https://img.shields.io/static/v1?message=Python&logo=python&logoColor=white&label=+&color=3776AB)
![React](https://img.shields.io/static/v1?message=React&logo=react&logoColor=white&label=+&color=61DAFB)
![SQLite](https://img.shields.io/static/v1?message=SQLite&logo=sqlite&logoColor=white&label=+&color=003B57)
![Symfony](https://img.shields.io/static/v1?message=Symfony&logo=symfony&logoColor=white&label=+&color=000000)
![TypeScript](https://img.shields.io/static/v1?message=TypeScript&logo=typescript&logoColor=white&label=+&color=3178C6)
---
+1
View File
@@ -1,3 +1,4 @@
pyyaml
json
requests
simpleicons
+2 -7
View File
@@ -1,4 +1,4 @@
from src.shield.shield_builder import ShieldBuilder
from src.shield.skill_shield import SkillShield
class Skill:
@@ -7,12 +7,7 @@ class Skill:
def __init__(self, name: str):
self.alt = name
self.src = (
ShieldBuilder()
.set_message(name)
.set_logo(name)
.build()
)
self.src = SkillShield(name).__str__()
def __str__(self) -> str:
return f"![{self.alt}]({self.src})"
+2 -9
View File
@@ -1,4 +1,4 @@
from src.shield.shield_builder import ShieldBuilder
from src.shield.social_shield import SocialShield
class Social:
@@ -7,14 +7,7 @@ class Social:
def __init__(self, name: str, url: str):
self.name = name
self.img = (
ShieldBuilder()
.set_message(name)
.set_logo(name)
.set_link(url)
.set_style("for-the-badge")
.build()
)
self.img = SocialShield(name, url).__str__()
def __str__(self) -> str:
return f"![{self.name}]({self.img})"
+2 -2
View File
@@ -1,5 +1,5 @@
from urllib.parse import urlunsplit, urlencode
from simpleicons.all import icons
class ShieldBuilder:
BASE_URL = "https://img.shields.io/static/v1"
@@ -36,7 +36,7 @@ class ShieldBuilder:
return self
def set_logo(self, logo: str):
self.logo = logo
self.logo = icons.get(logo).slug if logo in icons else None
return self
def set_logo_color(self, logo_color: str):
+33
View File
@@ -0,0 +1,33 @@
from simpleicons.all import icons
from src.shield.shield_builder import ShieldBuilder
class SkillShield:
def __init__(self, name: str = None):
self.builder = ShieldBuilder()
self.skill = self.set_skill(name) if name is not None else None
def get_skill(self):
return self.skill
def set_skill(self, name: str):
self.skill = icons.get(name)
if self.skill is not None:
(self.builder.set_message(self.skill.title)
.set_logo(self.skill.slug)
.set_color(self.skill.hex)
)
else:
self.builder.set_message(name)
def get_builder(self):
return self.builder
def __repr__(self):
self.__str__()
def __str__(self):
return self.builder.build()
+37
View File
@@ -0,0 +1,37 @@
from simpleicons.all import icons
from src.shield.shield_builder import ShieldBuilder
class SocialShield:
def __init__(self, name: str = None, url: str = None):
self.builder = ShieldBuilder().set_style("for-the-badge")
self.name = name
self.url = url
self.social = self.set_social(name, url) if name is not None and url is not None else None
def get_social(self):
return self.social
def set_social(self, name: str, url: str):
self.social = icons.get(name)
if self.social is not None:
(self.builder.set_message(self.social.title)
.set_logo(self.social.slug)
.set_color(self.social.hex)
)
else:
self.builder.set_message(name)
self.builder.set_link(url)
def get_builder(self):
return self.builder
def __repr__(self):
self.__str__()
def __str__(self):
return self.builder.build()