If you are having problems with AWS lambdas exceeding the 250MB limit, here is a tip that might help.Continue reading “Minimizing the size of lambdas by avoiding having boto3 and its stubs in the deployment package”
Your company is rolling out a new policy and need you to change settings across many repositories? That sounds like a very repetitive task that can be easily automated. I just did it with Selenium. Here is the recipe.Continue reading “Using Selenium to Roll Out Changes to Gihub Settings”
You run poetry and get this (undescriptive) error message.
[IndexError] list index out of range
So far I’ve identified two things that you need to check.
- Credentials: If you are installing packages from a private repository, make sure poetry credentials are right.
- Presence of all required files in local packages: If you are installing a package from local files, make sure all files mentioned in the
packagessection of its
pyproject.tomlfile are present. (I mostly got this error while building on Docker when forgetting to add them all in the
On December 12th 2019, poetry v1.0.0 was released. With it, came a bad surprise for me: My CI/CD jobs as well as my Docker image builds started failing.
After investigating, I’ve found out that the password key/value was now missing from the
.config/pypoetry/auth.toml file. Digging some more, I’ve found out that poetry relies on a library called keyring to manage passwords.
Here is what I did to fix the problem.
First, I’ve noticed that poetry falls back to the previous method if keyring returns
RuntimeError when it is called. Nice. It turns out that keyring comes with a backend aptly named “fail” which does that whatever the call is. So, it’s only a matter of configuring it.
As the keyring documentation states it, run
python -c "import keyring.util.platform_; print(keyring.util.platform_.config_root())" to find where to put the configuration file. Then, in that directory, create
keyringrc.cfg and put the following content in it:
That’s it. Now you can call
poetry config http-basic.... the same way you used to and the password will be stored in
Last week, my team open sourced the configuration library we have streamlined for the software components that we work on.Continue reading “Opset – a python configuration library”
This post is annectodic, but I figured it could still be helpful in some way, so here I go.
Classic story. At work, the CircleCI CI/CD pipeline of the project I work on, as time went by, became slower and slower. Recently, it reached a bit over forty minutes. I worked on it and brought it back under ten minutes. Here is what I did.
Following some discussions at work and the will of the team to adopt a python code formatter, I set out to explore some of them. No need to say, the contenders had to aim towards pep8 compliance. Here are my findings on three of them.
Continue reading “Python code formatters comparison: Black, autopep8 and YAPF”
I’ve been trying and trying to launch a Neo4j instance on the marketplace without success. It always gave me the nice “success” message, but when I went to the EC2 console: nothing!
I finally decided to do it the hard way: manually. First step: select an instance type. I immediately try to select the same low cost instance I had picked in the marketplace (m3.medium) and to my surprise that type wasn’t there.
Adding 1 + 1, I went back to the market place and tried with an instance type that still exists: m4.large… success!
So I don’t know who is to blame here, but here are my 2 questions to the internet:
- Why do we get the success message even though it doesn’t work?
- Why are unsupported instance types offered in the market place?
I recently deployed a python application in google app engine / container engine. When I went to check the logs, everything was logged at the “ERROR” level even though my application uses python logging properly. As far as I know there are 2 ways to fix that:
- Use the stackdriver client, which requires an additional dependency and somewhat binds your program to google app engine.
- Format the logs in a way that stackdriver can parse them, which is easily configurable.