mirror of
https://github.com/LucasVbr/LucasVbr.git
synced 2026-05-16 17:11:50 +00:00
Use only Python
This commit is contained in:
@@ -1,18 +0,0 @@
|
||||
import ImageComponent from '../components/ImageComponent.ts';
|
||||
import type BannerModel from '../models/BannerModel.ts';
|
||||
import BannerUrlBuilder from './url_builder/BannerUrlBuilder.ts';
|
||||
|
||||
export default class Banner {
|
||||
|
||||
constructor(private model: BannerModel) {
|
||||
};
|
||||
|
||||
toString(): string {
|
||||
const url = new BannerUrlBuilder()
|
||||
.setParameters({...this.model})
|
||||
.build()
|
||||
;
|
||||
|
||||
return ImageComponent(this.model.text1, url);
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
import Skill from './Skill.ts';
|
||||
import Banner from './Banner.ts';
|
||||
import Link from './Link.ts';
|
||||
|
||||
export default function makeContext(viewConfig) {
|
||||
return {
|
||||
...viewConfig,
|
||||
banner: new Banner(viewConfig.banner).toString(),
|
||||
links: viewConfig.links.map(link => (new Link(link)).toString()),
|
||||
skills: viewConfig.skills.map(skill => (new Skill(skill)).toString()),
|
||||
}
|
||||
}
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
import BadgeUrlBuilder from './url_builder/BadgeUrlBuilder.ts';
|
||||
import ImageComponent from '../components/ImageComponent.ts';
|
||||
import LinkModel from '../models/LinkModel.ts';
|
||||
import LinkComponent from '../components/LinkComponent.ts';
|
||||
|
||||
export default class Link {
|
||||
|
||||
constructor(private model: LinkModel) {}
|
||||
|
||||
handleLabel() {
|
||||
const {label: badge} = this.model;
|
||||
const defaultLogo = badge.message.toLowerCase().replace(/\s+/g, '')
|
||||
|
||||
const url = new BadgeUrlBuilder()
|
||||
.setParameters({
|
||||
...badge,
|
||||
style: "for-the-badge",
|
||||
logo: badge.logo ?? defaultLogo,
|
||||
color: badge.color ?? '000',
|
||||
},
|
||||
)
|
||||
.build()
|
||||
;
|
||||
|
||||
return ImageComponent(badge.message, url);
|
||||
}
|
||||
|
||||
toString(): string {
|
||||
const label = this.handleLabel().toString()
|
||||
return LinkComponent(label, this.model.url).toString()
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
import BadgeUrlBuilder from './url_builder/BadgeUrlBuilder.ts';
|
||||
import ImageComponent from '../components/ImageComponent.ts';
|
||||
import type SkillModel from '../models/SkillModel.ts';
|
||||
|
||||
export default class Skill {
|
||||
|
||||
constructor(private model: SkillModel) {};
|
||||
|
||||
toString(): string {
|
||||
const defaultLogo = this.model.message.toLowerCase().replace(/\s+/g, '');
|
||||
|
||||
const url = new BadgeUrlBuilder()
|
||||
.setParameters({
|
||||
...this.model,
|
||||
color: this.model.color ?? '000',
|
||||
logo: this.model.logo ?? defaultLogo
|
||||
},
|
||||
)
|
||||
.build()
|
||||
;
|
||||
|
||||
return ImageComponent(this.model.message, url);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
import yaml
|
||||
|
||||
from src.model.skill_list import SkillList
|
||||
import requests
|
||||
|
||||
from src.model.social_list import SocialList
|
||||
|
||||
|
||||
def load_data(config_file_path: str) -> dict:
|
||||
"""Load data from config file and return a dict"""
|
||||
config_data_builder = ConfigDataBuilder(config_file_path)
|
||||
return (config_data_builder
|
||||
.load_config_file()
|
||||
.load_user_info()
|
||||
.load_skill_section()
|
||||
.load_social_section()
|
||||
.build())
|
||||
|
||||
|
||||
class ConfigDataBuilder:
|
||||
|
||||
def __init__(self, config_file_path: str):
|
||||
"""
|
||||
Initialize ConfigDataBuilder
|
||||
|
||||
:param config_file_path: Path to config file
|
||||
"""
|
||||
self.config_file_path = config_file_path
|
||||
self.config_data = None
|
||||
|
||||
def load_config_file(self) -> 'ConfigDataBuilder':
|
||||
"""
|
||||
Load config file and return ConfigDataBuilder
|
||||
|
||||
:return: ConfigDataBuilder
|
||||
"""
|
||||
with open(self.config_file_path, 'r') as config_file:
|
||||
self.config_data = yaml.safe_load(config_file)
|
||||
return self
|
||||
|
||||
def load_user_info(self) -> 'ConfigDataBuilder':
|
||||
"""
|
||||
Load user info from GitHub API and return ConfigDataBuilder
|
||||
|
||||
:return: ConfigDataBuilder
|
||||
"""
|
||||
user = self.config_data["user"]
|
||||
response = requests.get(f"https://api.github.com/users/{user}")
|
||||
|
||||
if response.status_code != 200:
|
||||
raise Exception("User not found")
|
||||
|
||||
self.config_data["user"] = response.json()
|
||||
return self
|
||||
|
||||
def load_social_section(self) -> 'ConfigDataBuilder':
|
||||
"""
|
||||
Load social section and return ConfigDataBuilder
|
||||
|
||||
:return: ConfigDataBuilder
|
||||
"""
|
||||
self.config_data["socials"] = str(SocialList(self.config_data["socials"]))
|
||||
return self
|
||||
|
||||
def load_skill_section(self) -> 'ConfigDataBuilder':
|
||||
"""
|
||||
Load skill section and return ConfigDataBuilder
|
||||
|
||||
:return: ConfigDataBuilder
|
||||
"""
|
||||
self.config_data["skills"] = str(SkillList(self.config_data["skills"]))
|
||||
return self
|
||||
|
||||
def build(self) -> dict:
|
||||
"""
|
||||
Return config data
|
||||
|
||||
:return: dict
|
||||
"""
|
||||
return self.config_data
|
||||
@@ -0,0 +1,10 @@
|
||||
class Skill:
|
||||
def __init__(self, name: str, url: str):
|
||||
self.name = name
|
||||
self.url = url
|
||||
|
||||
def __str__(self):
|
||||
return f""
|
||||
|
||||
def __repr__(self):
|
||||
return f""
|
||||
@@ -0,0 +1,13 @@
|
||||
from src.model.skill import Skill
|
||||
|
||||
|
||||
class SkillList:
|
||||
def __init__(self, skills: list):
|
||||
self.skills = [Skill(skill.get("name"), skill.get("url")) for skill in skills]
|
||||
|
||||
def __str__(self) -> str:
|
||||
return "\n".join([str(skill) for skill in self.skills])
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return "\n".join([repr(skill) for skill in self.skills])
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
class Social:
|
||||
def __init__(self, name: str, url: str, img: str):
|
||||
self.name = name
|
||||
self.url = url
|
||||
self.img = img
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"[]({self.url})"
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"[]({self.url})"
|
||||
@@ -0,0 +1,12 @@
|
||||
from src.model.social import Social
|
||||
|
||||
|
||||
class SocialList:
|
||||
def __init__(self, socials: list):
|
||||
self.socials = [Social(social.get("name"), social.get("url"), social.get("img")) for social in socials]
|
||||
|
||||
def __str__(self) -> str:
|
||||
return "\n".join([str(social) for social in self.socials])
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return "\n".join([str(social) for social in self.socials])
|
||||
@@ -0,0 +1,4 @@
|
||||
def load_template(template_file_path: str):
|
||||
with open(template_file_path, 'r') as template_file:
|
||||
template_content = template_file.read()
|
||||
return template_content
|
||||
@@ -1,18 +0,0 @@
|
||||
import type BadgeModel from '../../models/BadgeModel.ts';
|
||||
import UrlBuilder from './UrlBuilder.ts';
|
||||
|
||||
export default class BadgeUrlBuilder extends UrlBuilder {
|
||||
static BASE_URL = 'https://img.shields.io/static/v1';
|
||||
static DEFAULT_PARAMETERS: BadgeModel = {style: 'flat', label: " ", logoColor: "white"};
|
||||
|
||||
constructor(parameters?: BadgeModel) {
|
||||
super(BadgeUrlBuilder.BASE_URL,
|
||||
parameters,
|
||||
BadgeUrlBuilder.DEFAULT_PARAMETERS,
|
||||
);
|
||||
};
|
||||
|
||||
public setParameters(parameters: BadgeModel): this {
|
||||
return super.setParameters(parameters);
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
import UrlBuilder from './UrlBuilder.ts';
|
||||
import type BannerModel from '../../models/BannerModel.ts';
|
||||
|
||||
export default class BannerUrlBuilder extends UrlBuilder {
|
||||
static BASE_URL = 'https://svg-banners.vercel.app/api';
|
||||
|
||||
constructor(parameters: BannerModel) {
|
||||
super(BannerUrlBuilder.BASE_URL, parameters, {});
|
||||
}
|
||||
|
||||
public setParameters(parameters: BannerModel): this {
|
||||
return super.setParameters(parameters);
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
export default abstract class UrlBuilder {
|
||||
|
||||
private parameters;
|
||||
|
||||
protected constructor(
|
||||
private baseUrl: string,
|
||||
parameters,
|
||||
private defaultParameters,
|
||||
) {
|
||||
this.parameters = {...defaultParameters, ...parameters};
|
||||
};
|
||||
|
||||
setParameters(parameters) {
|
||||
this.parameters = {...this.parameters, ...parameters};
|
||||
return this;
|
||||
}
|
||||
|
||||
build(): URL {
|
||||
const url = new URL(this.baseUrl);
|
||||
for (const [key, value] of Object.entries(this.parameters)) {
|
||||
if (value) url.searchParams.set(key, value);
|
||||
}
|
||||
return url;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user