Coder Social home page Coder Social logo

notsag / yaml-resume Goto Github PK

View Code? Open in Web Editor NEW
57.0 3.0 18.0 478 KB

Create and validate your resume in YAML.

Home Page: https://yaml-resume.com

License: GNU General Public License v3.0

Python 70.63% HTML 18.44% CSS 10.94%
yaml resume resume-builder resume-creator python python3

yaml-resume's People

Contributors

lcnittl avatar notsag avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

yaml-resume's Issues

Implement work section

Implement "work" section with :

  • Name of the company
  • Position
  • Start date
  • End date
  • Summary
  • Tags

This feature should implement :

  • Questions in init
  • Rules in schema
  • Test rules
  • Validation

pip install does not include jinja2

jinja2 is not installed
Traceback (most recent call last):
File "resume/bin/yaml-resume", line 5, in
from yaml_resume.cli import cli
File "resume/lib/python3.10/site-packages/yaml_resume/cli.py", line 4, in
from jinja2 import Environment, PackageLoader
ModuleNotFoundError: No module named 'jinja2'

To Reproduce
Steps to reproduce the behavior:

  1. pip install yaml-resume
  2. yaml-resume init FILENAME resume.yaml

Expected behavior
The CLA should run without an exception

Desktop (please complete the following information):

  • OS: Unbuntu
  • Version: 20.04
  • Python Version: 3.10.0

Running yaml-resume after installing fails, classic.css and requirements are missing

Describe the bug
Following the docs on latest Ubuntu doesn't work, necessary requirements aren't found after running pip3 install yaml-resume:

Collecting yaml-resume
  Downloading yaml-resume-0.7.9.tar.gz (24 kB)
Collecting click
  Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting pyyaml
  Downloading PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl (630 kB)
Collecting cerberus
  Downloading Cerberus-1.3.4.tar.gz (63 kB)
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
    Preparing wheel metadata: started
    Preparing wheel metadata: finished with status 'done'
Requirement already satisfied: setuptools in /opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages (from cerberus->yaml-resume) (56.0.0)
Using legacy 'setup.py install' for yaml-resume, since package 'wheel' is not installed.
Building wheels for collected packages: cerberus
  Building wheel for cerberus (PEP 517): started
  Building wheel for cerberus (PEP 517): finished with status 'done'
  Created wheel for cerberus: filename=Cerberus-1.3.4-py3-none-any.whl size=58175 sha256=2a1f5d1edeae2f97bd787814548fc76a0b3ed89fdad40edb6b195f50203973b4
  Stored in directory: /home/runner/.cache/pip/wheels/52/26/88/27d9b76e7756eedcf3d6e8fcc3bc28da0869749ffe8d87f7ac
Successfully built cerberus
Installing collected packages: pyyaml, click, cerberus, yaml-resume
    Running setup.py install for yaml-resume: started
    Running setup.py install for yaml-resume: finished with status 'done'
Successfully installed cerberus-1.3.4 click-7.1.2 pyyaml-5.4.1 yaml-resume-0.7.9
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.9.5/x64/bin/yaml-resume", line 33, in <module>
    sys.exit(load_entry_point('yaml-resume==0.7.9', 'console_scripts', 'yaml-resume')())
  File "/opt/hostedtoolcache/Python/3.9.5/x64/bin/yaml-resume", line 25, in importlib_load_entry_point
    return next(matches).load()
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/importlib/metadata.py", line 77, in load
    module = import_module(match.group('module'))
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 855, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/yaml_resume/cli.py", line 4, in <module>
    from jinja2 import Environment, PackageLoader
ModuleNotFoundError: No module named 'jinja2'

...and when I install them from your requirements file, the classic.css file isn't found because it doesn't seem to be included in the PyPi package:

Collecting click>=7.0
  Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting pyyaml>=5.0
  Downloading PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl (630 kB)
Collecting cerberus>=1.0
  Downloading Cerberus-1.3.4.tar.gz (63 kB)
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
    Preparing wheel metadata: started
    Preparing wheel metadata: finished with status 'done'
Collecting jinja2>=2.10
  Downloading Jinja2-2.11.3-py2.py3-none-any.whl (125 kB)
Collecting WeasyPrint==52.1
  Downloading WeasyPrint-52.1-py3-none-any.whl (304 kB)
Collecting yaml-resume==0.7.9
  Downloading yaml-resume-0.7.9.tar.gz (24 kB)
Collecting tinycss2>=1.0.0
  Downloading tinycss2-1.1.0-py3-none-any.whl (21 kB)
Collecting html5lib>=0.999999999
  Downloading html5lib-1.1-py2.py3-none-any.whl (112 kB)
Requirement already satisfied: setuptools>=39.2.0 in /opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages (from WeasyPrint==52.1->-r requirements.txt (line 5)) (56.0.0)
Collecting cssselect2>=0.1
  Downloading cssselect2-0.4.1-py3-none-any.whl (13 kB)
Collecting cffi>=0.6
  Downloading cffi-1.14.5-cp39-cp39-manylinux1_x86_64.whl (406 kB)
Collecting CairoSVG>=2.4.0
  Downloading CairoSVG-2.5.2-py3-none-any.whl (45 kB)
Collecting Pyphen>=0.9.1
  Downloading Pyphen-0.10.0-py3-none-any.whl (1.9 MB)
Collecting Pillow>=4.0.0
  Downloading Pillow-8.2.0-cp39-cp39-manylinux1_x86_64.whl (3.0 MB)
Collecting cairocffi>=0.9.0
  Downloading cairocffi-1.2.0.tar.gz (70 kB)
Collecting MarkupSafe>=0.23
  Downloading MarkupSafe-1.1.1-cp39-cp39-manylinux2010_x86_64.whl (32 kB)
Collecting defusedxml
  Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB)
Collecting pycparser
  Using cached pycparser-2.20-py2.py3-none-any.whl (112 kB)
Collecting webencodings
  Downloading webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
Collecting six>=1.9
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Using legacy 'setup.py install' for yaml-resume, since package 'wheel' is not installed.
Using legacy 'setup.py install' for cairocffi, since package 'wheel' is not installed.
Building wheels for collected packages: cerberus
  Building wheel for cerberus (PEP 517): started
  Building wheel for cerberus (PEP 517): finished with status 'done'
  Created wheel for cerberus: filename=Cerberus-1.3.4-py3-none-any.whl size=58175 sha256=51369faf2b19faa6ab876c50e910c8f72555a03234e289f45b8d003e35123c76
  Stored in directory: /home/runner/.cache/pip/wheels/52/26/88/27d9b76e7756eedcf3d6e8fcc3bc28da0869749ffe8d87f7ac
Successfully built cerberus
Installing collected packages: webencodings, pycparser, tinycss2, cffi, six, Pillow, defusedxml, cssselect2, cairocffi, pyyaml, Pyphen, MarkupSafe, html5lib, click, cerberus, CairoSVG, yaml-resume, WeasyPrint, jinja2
    Running setup.py install for cairocffi: started
    Running setup.py install for cairocffi: finished with status 'done'
    Running setup.py install for yaml-resume: started
    Running setup.py install for yaml-resume: finished with status 'done'
Successfully installed CairoSVG-2.5.2 MarkupSafe-1.1.1 Pillow-8.2.0 Pyphen-0.10.0 WeasyPrint-52.1 cairocffi-1.2.0 cerberus-1.3.4 cffi-1.14.5 click-7.1.2 cssselect2-0.4.1 defusedxml-0.7.1 html5lib-1.1 jinja2-2.11.3 pycparser-2.20 pyyaml-5.4.1 six-1.16.0 tinycss2-1.1.0 webencodings-0.5.1 yaml-resume-0.7.9
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.9.5/x64/bin/yaml-resume", line 33, in <module>
    sys.exit(load_entry_point('yaml-resume==0.7.9', 'console_scripts', 'yaml-resume')())
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/yaml_resume/cli.py", line 148, in export
    html = HTML(string=template.render(resume=resume, image=image))
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/jinja2/environment.py", line 1090, in render
    self.environment.handle_exception()
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/jinja2/environment.py", line 832, in handle_exception
    reraise(*rewrite_traceback_stack(source=source))
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/jinja2/_compat.py", line 28, in reraise
    raise value.with_traceback(tb)
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/yaml_resume/templates/classic.html", line 5, in top-level template code
    <style type="text/css">{% include "classic.css" %}</style>
  File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/jinja2/loaders.py", line 249, in get_source
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: classic.css

I tried directly installing from git with pip3 install git+https://github.com/notsag/yaml-resume.git but that didn't fix the issue, so I'm guessing something in the packaging is causing this?

Same issues happened on macOS as well.

To Reproduce
Steps to reproduce the behavior:

  1. Follow official docs on a "blank" Ubuntu with Python3

Desktop (please complete the following information):

  • OS: Ubuntu
  • Version: 18.04 and latest
  • Python Version: 3.9

Commiting changes fails due to pre-commit hook

Describe the bug
Fails to commit changes due to pre-commit hook

To Reproduce

  1. Clone the repo
  2. Make changes and commit

Expected behavior
Commits changes.

Screenshots
[WARNING] The 'rev' field of repo 'https://github.com/psf/black' appears to be a mutable reference (moving tag / branch). Mutable references are never updated after first install and are not supported. See https://pre-commit.com/#using-the-latest-version-for-a-repository for more details. Hint: pre-commit autoupdate often fixes this.
[INFO] Installing environment for https://github.com/psf/black.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
An unexpected error has occurred: CalledProcessError: command: ('/home/rojin/yaml-resume/venv/bin/python3', '-mvirtualenv', '/home/rojin/.cache/pre-commit/repoc9pikoti/py_env-python3.8', '-p', 'python3.8')
return code: 1
expected return code: 0
stdout:
RuntimeError: failed to find interpreter for Builtin discover of python_spec='python3.8'

stderr: (none)
Check the log at /home/rojin/.cache/pre-commit/pre-commit.log

Desktop (please complete the following information):

  • OS: Debian Bullseye
  • Version 11
  • Python Version 3.9.2

Additional context
pre-commit.log

pip install: ModuleNotFoundError: No module named 'yaml_resume'

ModuleNotFoundError for yaml_resume when using pip install

yaml-resume init FILENAME resume.yaml
Traceback (most recent call last):
File "miniconda3/envs/resume/bin/yaml-resume", line 5, in
from yaml_resume.cli import cli
ModuleNotFoundError: No module named 'yaml_resume'

To Reproduce
Steps to reproduce the behavior:

  1. pip install yaml-resume
  2. install Jinja2 (see: #34)
  3. yaml-resume init FILENAME resume.yaml

Expected behavior
CLA runs without error

Desktop (please complete the following information):
OS: Unbuntu
Version: 20.04
Python Version: 3.10.0

Use a literal representation for multiline answers

Is your feature request related to a problem? Please describe.
Experiences section'summary is represented like this :

summary: 'Commanding officer of starship Enterprise

    Fought Klingons

    Disccoverd worlds

    '

Describe the solution you'd like
We should have a representation like this :

summary: |
   Commanding officer of starship Enterprise
   Fought Klingons
   Disccoverd worlds

Implement profiles

Implement "profiles" section with the name of the network and the url.

  • Questions in init
  • Define rules in schema
  • Test rules
  • Validate generated resume

"Tag" like option for bullet points

Is your feature request related to a problem? Please describe.
One can go for many different kinds of jobs and it's advantageous to adapt your resume to each one. As it stands today, that is a manual process. One way to do this is to have a longer resume you never submit and then go through and remove bullets that are not relevant to that job.

Describe the solution you'd like
I'd like a way to "tag" bullet points so that they can be easier to filter.

The first iteration I came up with is:
experiences:

  • company: Foo company
    position: Senior Python Developer
    start_date: January 2018
    summary: Developer for the main Foo webapp
    bullets:
    ? Worked on migration from python 2.7 to 3.6
    : [python3, py2to3]
    ? Scrum master for the team of 8 people
    : [scrum, leadership]
    ? Added automated unit tests
    : [CI, testing, pytest]
    website: https://foo.com
    ....

Describe alternatives you've considered
We could also use references, but that would break the flow of the resume from a person editing by hand.

Additional context
I'm hoping to use this as the basis for a potentially paid (but obviously under terms of GPLv3) service.
I fully intend to implement this and open a PR but want to discuss first.

Create scenario files for testing cli

Is your feature request related to a problem? Please describe.
Testing cli init function is done by adding a string containing the list of answers in a single parameter :

input="John Doe\n10/10/1990\nCaptain\[email protected]\n+33611111111\n"
        + "10 Downing Street\nLondon\nSW1A 2AA\n\nUK\ny\n"
        + "Facebook\nhttps://facebook.com/johndoe\ny\n"
        + "Twitter\nhttps://twitter.com/nottherealjohndoe\nn\ny\n"
        + "Starfleet\nCaptain\nJanuary 2150\n\nCommanding officer of "
        + "starship Enterprise\n\nFought Klingons\n\nDisccoverd worlds"
        + "\nn\nofficer commander warp\nhttps://starfleet.com\nn\ny\n"
        + "Management\n100\ny\nFighting\n75\nn\ny\nEnglish\nNative\nn\n"
        + "y\ntestproject\nnothing special\nhttps://google.com\nn\ny"

Describe the solution you'd like
We should use scenario files to load : it will be easier to read and could help testing different cases such as empty sections or else.

Email regex too restictive

The used email regex:

EMAIL_REGEX = r"(\w+[.|\w])*@(\w+[.])+\w+"

does not allow me to use my business email address (which contains a hyphen-dash).

The homepage http://emailregex.com/ (mentioned here) suggests to use

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

or, if I understand correctly a simplified version:

EMAIL_REGEX = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"

as regex pattern.

If you want I can open a PR for this change. Let me know - Thank you!


Edit: Removed the assignment of the long regex pattern to EMAIL_REGEX as Python does not really like it and yields a SyntaxError.

local variable 'projects' referenced before assignment

Describe the bug

Dataloss during yaml-resume init. After spending 20 minutes entering all the answers, I ended up with this error and 100% data loss.

Traceback (most recent call last):
  File "path-to/bin/yaml-resume", line 8, in <module>
    sys.exit(cli())
  File "path-to/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "path-to/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "path-to/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "path-to/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "path-to/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "path-to/lib/python3.10/site-packages/yaml_resume/cli.py", line 62, in init
    resume = Resume.ask()
  File "path-to/lib/python3.10/site-packages/yaml_resume/resume/__init__.py", line 88, in ask
    projects,
UnboundLocalError: local variable 'projects' referenced before assignment

CV passes validation but fails at export

Describe the bug
CV passes the validation step but fails at export if the skills level is not set.

To Reproduce
Steps to reproduce the behavior:

  1. Manually create .yml file following the schema
  2. Omit the skills level property
  3. Export the .yml file to PDF
  4. See error

Expected behavior
If the .yml file passes validation, I expect it to not fail at export. Can make skills level optional as it's sometimes hard to quantify.

Desktop (please complete the following information):

  • OS: Mac OS X
  • Version 11.2.3
  • Python Version 3.9.2

Add education section

Describe the solution you'd like

I want to add my education with:

  • institution name
  • degree
  • startDate
  • endDate

Make personal information optional

Is your feature request related to a problem? Please describe.
Personal information such a phone number and address should be make optional.

Describe the solution you'd like
You could either omit the personal information properties, or add a flag to mark them available on request.

Create a Resume class

Create a Resume class to manage resume objects.
Move the "ask" functions as method of this class

Add previous value as default in retries

Describe the solution you'd like
When not confirming a section to correct a typo or any mistake, it would be more convenient to have the previous text showed as default.

Add date of birth

Describe the solution you'd like
Add date of birth to the contact section of the resume

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.