diff --git a/rendercv/__init__.py b/rendercv/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rendercv/data/__init__.py b/rendercv/data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rendercv/data/content.py b/rendercv/data/content.py new file mode 100644 index 0000000..8b1913e --- /dev/null +++ b/rendercv/data/content.py @@ -0,0 +1,100 @@ +from pydantic import BaseModel, HttpUrl +from pydantic_extra_types.phone_numbers import PhoneNumber +from typing import Literal +from datetime import date + +class Organization(BaseModel): + # 1) Mandotory user inputs: + name: str + # 2) Optional user inputs: + url: HttpUrl + +class Location(BaseModel): + # 1) Mandotory user inputs: + city: str + country: str + # 2) Optional user inputs: + state: str + +class Skill(BaseModel): + # 1) Mandotory user inputs: + name: str + # 2) Optional user inputs: + details: str + +class Activity(BaseModel): + # 1) Mandotory user inputs: + organization: Organization + position: str + start_date: date + end_date: date + location: Location + # 2) Optional user inputs: + company_url: HttpUrl + highlights: list[str] + +class TestScore(BaseModel): + # 1) Mandotory user inputs: + name: str + score: str + # 2) Optional user inputs: + url: HttpUrl + details: str + date: date + +class Project(BaseModel): + # 1) Mandotory user inputs: + name: str + start_date: date + end_date: date + location: Location + # 2) Optional user inputs: + url: HttpUrl + highlights: list[str] + +class WorkExperience(BaseModel): + # 1) Mandotory user inputs: + company: Organization + position: str + start_date: date + end_date: date + location: Location + # 2) Optional user inputs: + highlights: list[str] + +class Education(BaseModel): + # 1) Mandotory user inputs: + institution: Organization + study_type: str + area: str + location: Location + start_date: date + end_date: date + # 2) Optional user inputs: + gpa: str + transcript_url: HttpUrl + highlights: list[str] + +class SocialNetwork(BaseModel): + # 1) Mandotory user inputs: + network: Literal["LinkedIn", "GitHub", "Twitter", "Facebook", "Instagram"] + username: str + url: HttpUrl + +class CurriculumVitae(BaseModel): + # 1) Mandotory user inputs: + name: str + # 2) Optional user inputs: + email: str + phone: PhoneNumber + website: HttpUrl + summary: str + location: Location + social_networks: list[SocialNetwork] + education: list[Education] + work_experience: list[WorkExperience] + academic_projects: list[Project] + extracurricular_activities: list[Activity] + test_scores: list[TestScore] + skills: list[Skill] + diff --git a/rendercv/data/design.py b/rendercv/data/design.py new file mode 100644 index 0000000..e69de29 diff --git a/rendercv/rendercv.py b/rendercv/rendercv.py new file mode 100644 index 0000000..dccf8f9 --- /dev/null +++ b/rendercv/rendercv.py @@ -0,0 +1,4 @@ +from jinja2 import Environment, FileSystemLoader + +env = Environment(loader=FileSystemLoader("templates/")) +template = env.get_template("template1.tex.j2") diff --git a/rendercv/templates/components/education.tex.j2 b/rendercv/templates/components/education.tex.j2 new file mode 100644 index 0000000..e69de29 diff --git a/rendercv/templates/template1.tex.j2 b/rendercv/templates/template1.tex.j2 new file mode 100644 index 0000000..1e4168d --- /dev/null +++ b/rendercv/templates/template1.tex.j2 @@ -0,0 +1,81 @@ +\documentclass[10pt, a4paper]{memoir} + +% =========== +% =========== +% USER INPUTS: +\newcommand{\AUTHOR}{Sina Atalay} + +\newcommand{\PRIMARYCOLOR}{0,79,144} % In RGB out of 255 + +\newcommand{\PageXMargin}{0.53in} +\newcommand{\PageYMargin}{0.53in} + +\newcommand{\TopMarginOfSections}{0.13cm} +\newcommand{\BottomMarginOfSections}{0.13cm} + +\newcommand{\YMarginBetweenEntries}{0.12cm} +\newcommand{\YMarginBetweenBullets}{0.07cm} +\newcommand{\LeftMarginOfBullets}{0.7cm} + +\newcommand{\DateandLocationWidth}{3.7cm} +% =========== +% =========== + +\input{preamble} + +\begin{document} + % Test out the 4 main entry types with the commands below: + % \Header{a}{b}{c}{d}{e}{f} + % \section{EducationEntry} + % \EducationEntry{a}{b}{c}{d}{e}{f}{g}{j} + % \section{ExperienceEntry} + % \ExperienceEntry{a}{b}{c}{d}{e}{f}{g}{j} + % \section{NormalEntry} + % \NormalEntry{a}{b}{c}{d}{e}{f} + % \section{OneLineEntry} + % \OneLineEntry{a}{b} + + % To create the header manually (insted of \Header command), use the code below: + % \begin{header}[0pt] + % \Huge + % \textbf{\directlua{tex.print(json.basics.name)}} + + % \normalsize + % \faPhone\hspace{0.13cm}\directlua{tex.print(json.basics.phone)} \hspace{0.5cm} + % \href{mailto:\directlua{tex.print(json.basics.email)}}{\faEnvelopeO\hspace{0.13cm}\directlua{tex.print(json.basics.email)}} \hspace{0.5cm} + % \href{https://\directlua{tex.print(json.basics.url)}}{\faLaptop\hspace{0.13cm}\directlua{tex.print(json.basics.url)}} \hspace{0.5cm} + % \href{https://www.linkedin.com/in/williamhgates}{\faLinkedin\hspace{0.13cm}williamhgates} \hspace{0.5cm} + % \href{https://www.github.com/sinaatalay}{\faGithub\hspace{0.13cm}sinaatalay} + % \end{header} + + \directlua{require("parser.lua")} + + \makeoddhead{headings}{}{}{\small\color{gray}\linespread{0}\emph{Last updated on {\printdayon\today}}\hspace*{0.2cm}} + \directlua{printHeader()} + + \section{Education} + \directlua{printEducation()} + + \section{Work Experience} + \directlua{printExperience()} + + + \section{Academic Projects} + \directlua{printAcademicProjects()} + + \section{Certificates} + \directlua{printCertificates()} + + \section{Skills} + \directlua{printSkills()} + + \section{Test Scores} + \directlua{printTestScores()} + + \section{Personal Projects (test)} + \directlua{printPersonalProjects()} + + \section{Extracurricular Activities} + \directlua{printExtracurricularActivities()} + +\end{document} \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..e69de29