From ebce95d4dd9e09f066b6c3d250d1d2063138077c Mon Sep 17 00:00:00 2001 From: koek67 Date: Fri, 24 May 2024 19:05:29 -0400 Subject: [PATCH] initial commit --- .gitignore | 4 + readme.md | 55 +++++++++++++ reference.md | 64 +++++++++++++++ resume.pdf | Bin 0 -> 84253 bytes resume.py | 188 +++++++++++++++++++++++++++++++++++++++++++ resume_builder.py | 200 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 511 insertions(+) create mode 100644 .gitignore create mode 100644 readme.md create mode 100644 reference.md create mode 100644 resume.pdf create mode 100644 resume.py create mode 100644 resume_builder.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6565916 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__ +*resume.html +*_resume.py +*.zip \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..b074795 --- /dev/null +++ b/readme.md @@ -0,0 +1,55 @@ +# Resume Builder + +A no nonsense tool to build resumes in pure Python. + +See my resume definition [resume.py](./resume.py) and its output [resume.pdf](./resume.pdf). + +## Requirements + +* Python 3.7 or later (that's it!) + +## Installation + +The entire library is a single python file `resume_builder.py`. Download this file + +## Usage + +To generate a resume: + +```bash +python resume.py --output resume.html +``` + +To convert to a PDF, open in a web browser and Print as PDF. The resume generated is optimized for PDF. +In the browser, you can zoom in/out your PDF to make it fit to a page better. + +## Resume Definition + +Resumes are defined in Python files like `resume.py`. These files provide the best examples for how to configure a Resume. + +For more details, see `resume_builder.py` and reference.md. + +## Motivation + +As many of us do when we have had to look for a new job, I started making a resume. Ever since college, this was a document written in either Google Docs or Microsoft Word but neither tool seemed to fit. Moreover, making small changes to the resume took time which prevented me from creating custom resumes for specific job applications. + +That's when I decided to create a resume in HTML. This served me for many years and after helping a few folks modernize their resumes, I decided to open source my resume-making-tool. + +This tool lets you define your resume in __Python__. No custom editors, no complicated themes, and no cost. Just a plain old resume that is easy to read, and easy to write. + +## Resume Structure + +* A Resume consists of: + * a ContactInfo + * a list of Sections +* A ContactInfo consists of: + * name (your name) + * details (a list of strings, can be used for email, location etc.) +* A Section consists of: + * a title + * a list of SectionEntries +* A SectionEntry consists of: + * a title (big bold text) + * a caption (text in parenthesis) + * a dates string + * a description diff --git a/reference.md b/reference.md new file mode 100644 index 0000000..9847a00 --- /dev/null +++ b/reference.md @@ -0,0 +1,64 @@ +## resume_builder.py + +This module provides functionalities to build and save a resume in HTML format. + +### Classes + +* **Text:** This class represents a plain text element in the resume. It has the following attributes: + * `text` (str): The text content. + +* **StrLike:** This type alias represents a union type that can be either a string or a `Text` object. + +* **OptionalStrLike:** This type alias represents an optional `StrLike` type, which can be either `None` or a `StrLike` value. + +* **LinkText:** This class inherits from `Text` and represents a text element with a hyperlink. It has the following attributes in addition to those inherited from `Text`: + * `url` (str): The URL of the link. + * `show_icon` (bool, optional): A flag indicating whether to display an icon next to the text (defaults to `False`). + +* **BulletedList:** This class inherits from `Text` and represents a bulleted list. It has the following attribute: + * `items` (List[StrLike]): A list of items in the bulleted list. + +* **ItalicsText:** This class inherits from `Text` and represents a text element rendered in italics. + +* **UnderlinedText:** This class inherits from `Text` and represents a text element rendered with an underline. + +* **BoldText:** This class inherits from `Text` and represents a text element rendered in bold. + +* **ConcatText:** This class inherits from `Text` and is used to concatenate multiple text elements. It takes variable number of arguments of type `StrLike`. + +* **SectionEntry:** This class represents an entry in a resume section. It has the following attributes: + * `title` (OptionalStrLike): The title of the entry. + * `caption` (OptionalStrLike): A caption for the entry (e.g., job title). + * `location` (OptionalStrLike): The location of the entry (e.g., company name). + * `dates` (OptionalStrLike): The dates associated with the entry (e.g., employment dates). + * `description` (OptionalStrLike): A description of the entry. + +* **Section:** This class represents a section in the resume. It has the following attributes: + * `title` (StrLike): The title of the section. + * `entries` (List[SectionEntry]): A list of entries in the section. + +* **ContactInfo:** This class represents the contact information section of the resume. It has the following attributes: + * `name` (StrLike): The name of the person. + * `details` (Optional[List[StrLike]]): A list of contact details (e.g., email, phone number). + * `tag_line` (OptionalStrLike): A tagline or objective statement. + +* **Resume:** This class represents the entire resume document. It has the following attributes: + * `contact_info` (ContactInfo): The contact information section of the resume. + * `sections` (List[Section]): A list of sections in the resume. + +### Methods + +* **render_contact_info(self) -> str:** This method renders the contact information section of the resume in HTML format. + +* **render_section(self, section: Section) -> str:** This method renders a single section of the resume in HTML format. + +* **render_sections(self) -> str:** This method renders all sections of the resume in HTML format. + +* **render(self) -> str:** This method renders the entire resume in HTML format. + +* **save(self, filename: str) -> None:** This method saves the rendered HTML content of the resume to a file. + +* **cli_main(self):** This method serves as the entry point for the command-line interface (CLI) functionality. It parses command-line arguments for the output filename and calls the `save` method to generate the HTML file. + + +This module provides a way to structure and format the content of a resume in an easy-to-use way. By creating instances of the provided classes and organizing them into sections and contact information, you can generate an HTML resume that can be saved to a file. \ No newline at end of file diff --git a/resume.pdf b/resume.pdf new file mode 100644 index 0000000000000000000000000000000000000000..530272afed7ed10d89c1fcdb08701a47b2189307 GIT binary patch literal 84253 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', + ] + ), + ), + SectionEntry( + title=LinkText("Microsoft", "https://www.microsoft.com"), + caption="Software Engineering Intern, Azure Cosmos DB", + location="Seattle, Washington", + dates="May 2017 - August 2017", + ), + SectionEntry( + title=LinkText("Fitbit", "https://fitbit.com"), + caption="Software Engineering Intern", + location="Boston, Massachusetts", + dates="May 2016 - August 2016", + ), + SectionEntry( + title=LinkText("Kayak.com", "https://www.kayak.com"), + caption="Software Engineering Intern", + location="Concord, Massachusetts", + dates="May 2015 - August 2015", + ) + ], + ), + Section( + title="Presentations", + entries=[ + SectionEntry( + title=LinkText( + text="PyCon 2024", + url="https://us.pycon.org/2024/schedule/presentation/95/", + show_icon=True, + ), + caption="Rest East with Jupyrest: Deploy notebooks as web services", + location="Pittsburgh, PA", + dates="May 2024", + ), + SectionEntry( + title=LinkText( + text="PyTexas", + url="https://www.pytexas.org/2024/schedule/talks/#rest-easy-with-jupyrest-deploy-notebooks-as-web-services", + show_icon=True, + ), + caption="Rest East with Jupyrest", + location="Austin, TX", + dates="April 2024", + ), + SectionEntry( + title=LinkText( + text="PyCascades", + url="https://2024.pycascades.com/program/talks/jupyrest/", + show_icon=True, + ), + caption="Rest East with Jupyrest: Deploy notebooks as web services", + location="Seattle, WA", + dates="April 2024", + ), + SectionEntry( + title=LinkText( + text="PyOhio 2023", + url="https://www.pyohio.org/2023/speakers/koushik-krishnan/", + show_icon=True, + ), + caption=LinkText('Serverless Jupyter Notebook Functions (YouTube)', url="https://youtu.be/hoGJ0c3jIeo?si=srbRtjSxOxETFWN5", show_icon=True), + location="Virtual", + dates="December 2023", + ), + SectionEntry( + title=LinkText( + text="PyData Seattle 2023", + url="https://seattle2023.pydata.org/cfp/talk/K8KV8M/", + show_icon=True, + ), + caption=LinkText('Notebooks as Serverless Functions (YouTube)', url="https://youtu.be/hoGJ0c3jIeo?si=srbRtjSxOxETFWN5", show_icon=True), + location="Seattle, WA", + dates="April 2023", + ), + ], + ), + Section( + title="Volunteering", + entries=[ + SectionEntry( + title=LinkText( + "ASHA Chennai", url="https://chennai.ashanet.org/", show_icon=True + ), + caption="Spoken English Teacher", + location="Remote", + dates="December 2020 - March 2022", + description=BulletedList( + [ + "Created a curriculum with story-telling, skits, and friendly debates to provide disadvantaged children isolated in quarantine a fun way to learn spoken English.", + ] + ), + ) + ], + ), + Section( + title="Education", + entries=[ + SectionEntry( + title="Georgia Institute of Technology", + location="Atlanta, Georgia", + dates="August 2014 - May 2018", + description=ItalicsText( + "Bachelors of Science in Computer Science and Mathematics" + ), + ) + ], + ), + Section( + title="Skills", + entries=[ + SectionEntry( + description=BulletedList( + [ + ConcatText( + UnderlinedText("Languages:"), + " Python, Golang, C/C++, JavaScript, C#, Powershell, Zig", + ), + ConcatText( + UnderlinedText("Tools:"), + " Kubernetes, PostgreSQL, Linux, Windows, Azure Service Fabric, Distributed Databases, Storage Engines, Docker", + ), + ] + ) + ), + ], + ), + ] +) + +if __name__ == "__main__": + resume.cli_main() \ No newline at end of file diff --git a/resume_builder.py b/resume_builder.py new file mode 100644 index 0000000..81e8a3a --- /dev/null +++ b/resume_builder.py @@ -0,0 +1,200 @@ +from textwrap import dedent +from typing import Optional, List, Union +import argparse + +class Text: + def __init__(self, text: str) -> None: + self.text = text + + def __str__(self) -> str: + return self.text + + +StrLike = Union[str, Text] +OptionalStrLike = Optional[StrLike] + + +class LinkText(Text): + def __init__(self, text: str, url: str, show_icon: bool = False) -> None: + super().__init__(text) + self.url = url + self.show_icon = show_icon + + def __str__(self) -> str: + if not self.show_icon: + return f'{self.text}' + else: + return f'{self.text}' + + +class BulletedList(Text): + def __init__(self, items: List[StrLike]) -> None: + self.items = items + + def __str__(self) -> str: + s = "
    \n" + for item in self.items: + s += f"
  • {item}

  • \n" + s += "
\n" + return s + + +class ItalicsText(Text): + def __init__(self, text: str) -> None: + super().__init__(text) + + def __str__(self) -> str: + return f'

{self.text}

' + + +class UnderlinedText(Text): + def __init__(self, text: str) -> None: + super().__init__(text) + + def __str__(self) -> str: + return f'{self.text}' + +class BoldText(Text): + def __init__(self, text: str) -> None: + super().__init__(text) + + def __str__(self) -> str: + return f'{self.text}' + +class ConcatText(Text): + def __init__(self, *args: StrLike) -> None: + self.args = args + + def __str__(self) -> str: + return "".join(map(str, self.args)) + + +class SectionEntry: + def __init__( + self, + title: OptionalStrLike = None, + caption: OptionalStrLike = None, + location: OptionalStrLike = None, + dates: OptionalStrLike = None, + description: OptionalStrLike = None, + ) -> None: + self.title = title + self.caption = caption + self.location = location + self.dates = dates + self.description = description + + +class Section: + def __init__(self, title: StrLike, entries: List[SectionEntry]) -> None: + self.title = title + self.entries = entries + + +class ContactInfo: + def __init__( + self, + name: StrLike, + details: Optional[List[StrLike]] = None, + tag_line: OptionalStrLike = None, + ) -> None: + self.name = name + self.details = details + self.tag_line = tag_line + + +class Resume: + def __init__(self, contact_info: ContactInfo, sections: List[Section]) -> None: + self.contact_info = contact_info + self.sections = sections + self.TEMPLATE = dedent(""" + + + + + + __NAME__’s Resume + + + + + +
+ __CONTACT_INFO__ +
+
+ __SECTIONS__ +
+ + + """ + ) + + def render_contact_info(self) -> str: + contact_info = f'

{self.contact_info.name}

\n' + + if self.contact_info.details: + contact_info += '
    \n' + for detail in self.contact_info.details: + contact_info += f"
  • {detail}
  • \n" + contact_info += "
\n" + if self.contact_info.tag_line: + contact_info += f'

{self.contact_info.tag_line}

\n' + return contact_info + + def render_section(self, section: Section) -> str: + section_html = "
\n" + section_html += "
\n" + if section.title: + section_html += f"

{section.title}

\n" + for entry in section.entries: + section_html += f'
\n' + if entry.title: + section_html += f"

{entry.title}

\n" + if entry.caption: + section_html += f'{entry.caption}\n' + if entry.location: + section_html += f'{entry.location}\n' + if entry.dates: + section_html += f'{entry.dates}\n' + if entry.description: + section_html += f"

\n{entry.description}

\n" + section_html += "
\n" + section_html += "
\n" + section_html += "
\n" + return section_html + + def render_sections(self) -> str: + sections_html = "" + for section in self.sections: + sections_html += self.render_section(section) + return sections_html + + def render(self) -> str: + s = self.TEMPLATE.replace("__NAME__", str(self.contact_info.name)) + s = s.replace("__CONTACT_INFO__", self.render_contact_info()) + s = s.replace("__SECTIONS__", self.render_sections()) + return s + + def save(self, filename: str) -> None: + with open(filename, "w") as f: + f.write(self.render()) + + def cli_main(self): + parser = argparse.ArgumentParser(description="ResumeBuilder") + parser.add_argument( + "-o", + "--output", + type=str, + dest="output_file", + required=True, + help="Output HTML file name.", + ) + args = parser.parse_args() + self.save(args.output_file)