<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abdallah Yashir</title>
    <description>The latest articles on DEV Community by Abdallah Yashir (@abdallahyashir).</description>
    <link>https://dev.to/abdallahyashir</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F242674%2F1aebb0de-8b34-45c8-8d72-76be3759d2af.jpeg</url>
      <title>DEV Community: Abdallah Yashir</title>
      <link>https://dev.to/abdallahyashir</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abdallahyashir"/>
    <language>en</language>
    <item>
      <title>How to create and delete a folder in Python using Pathlib?</title>
      <dc:creator>Abdallah Yashir</dc:creator>
      <pubDate>Fri, 21 Jan 2022 10:27:59 +0000</pubDate>
      <link>https://dev.to/abdallahyashir/how-to-create-and-delete-a-folder-in-python-using-pathlib-355j</link>
      <guid>https://dev.to/abdallahyashir/how-to-create-and-delete-a-folder-in-python-using-pathlib-355j</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhr6du3xc14crxeyqvnnj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhr6du3xc14crxeyqvnnj.png" alt="Pathlib in Python"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Folder Manipulation
&lt;/h2&gt;

&lt;p&gt;These are the codes that I'm implementing for creating and deleting a folder.&lt;/p&gt;

&lt;p&gt;What I like with Python for automating stuff is the language simplicity. With a few lines of code, you can do amazing things. I can also use PowerShell scripts, but I like writing cross-platform scripts or applications wherever possible.&lt;/p&gt;

&lt;p&gt;This time I'm not using a class but calling the functions directly, as I see the case in many examples on YouTube tutorials. Perhaps that's more efficient for quick and dirty ad hoc projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Box
&lt;/h2&gt;

&lt;p&gt;For the name, I choose Box as a synonym to file because it might be confusing. I'm already using files classes or modules from libraries such as pathlib. So this is a good way to keep things simple with the naming.&lt;/p&gt;

&lt;p&gt;The aim is this code is to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create a "posts" folder&lt;/li&gt;
&lt;li&gt;place the number of transformed posts&lt;/li&gt;
&lt;li&gt;zip the folder&lt;/li&gt;
&lt;li&gt;delete the "posts" folder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've yet to test the whole flow due to a lack of time.&lt;/p&gt;

&lt;p&gt;When dealing with OS and external operations such as API calls, I like using &lt;code&gt;try except&lt;/code&gt; in any language I'm coding with.&lt;/p&gt;

&lt;p&gt;The reason is so that I can better track these types of errors and plan a countermeasure for them, such as retrying.&lt;/p&gt;

&lt;p&gt;This makes the programs more resilient. On the other side, I also want in most situations that the script completely stops. For instance, if there is no Ghost JSON file in my current side project, there is no point in continuing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codes
&lt;/h2&gt;

&lt;p&gt;box.py&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;folder_exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder_name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder_name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;is_dir&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_folder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;folder_exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;exist_ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;OSError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strerror&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;delete_folder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;folder_exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;rmdir&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;OSError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strerror&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sync_folder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;delete_folder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;create_folder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;zipFolder&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;main.py&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;folder_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;posts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;box&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sync_folder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are two ways of writing codes in my opinion:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Typing the flow in a single function and then refactoring into relevant classes/methods/functions (if needed)&lt;/li&gt;
&lt;li&gt;creating the classes/methods/functions first (you can even write their unit tests) and then stitching everything together&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this case, I choose the second variation as it's easy to progress with the project with one quick file at a time. I also like the abstraction.&lt;/p&gt;

&lt;p&gt;I would nevertheless recommend, especially if you're still learning the language or the programming stack, to do it as simple as possible. This is how I usually proceed when working on Java or C# for enterprise systems.&lt;/p&gt;

&lt;p&gt;This is the whole &lt;a href="https://github.com/abdallahYashir/GhostToHashNode" rel="noopener noreferrer"&gt;repo&lt;/a&gt;.&lt;/p&gt;




</description>
      <category>python</category>
      <category>automation</category>
    </item>
    <item>
      <title>How I try to automate a repetitive task of extracting a token from a string</title>
      <dc:creator>Abdallah Yashir</dc:creator>
      <pubDate>Fri, 14 Jan 2022 13:19:59 +0000</pubDate>
      <link>https://dev.to/abdallahyashir/how-i-try-to-automate-a-repetitive-task-of-extracting-a-token-from-a-string-1j6l</link>
      <guid>https://dev.to/abdallahyashir/how-i-try-to-automate-a-repetitive-task-of-extracting-a-token-from-a-string-1j6l</guid>
      <description>&lt;h2&gt;
  
  
  Use case
&lt;/h2&gt;

&lt;p&gt;I'm using &lt;a href="https://swagger.io/"&gt;Swagger&lt;/a&gt; to load mock values into a system.&lt;/p&gt;

&lt;p&gt;To do that, I need to &lt;a href="https://swagger.io/docs/specification/authentication/bearer-authentication/"&gt;authenticate using a bearer token&lt;/a&gt; from another system that also uses swagger.&lt;/p&gt;

&lt;p&gt;I also need to do at least one request to get the curl request that contains the token.&lt;/p&gt;

&lt;p&gt;Once done, I copy and paste it on a notepad before choosing only the string after the bearer token. Here's an example:&lt;/p&gt;

&lt;p&gt;Source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -X POST "http-some-api" -H "accept: */*" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Target:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I do this several times throughout the day when working on this project.&lt;/p&gt;

&lt;p&gt;Here's the project &lt;a href="https://github.com/abdallahYashir/extract_token/tree/develop"&gt;GitHub repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want more information:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;what is a bearer token? The bearer token is &lt;strong&gt;a cryptic string, usually generated by the server in response to a login request&lt;/strong&gt;. The client must send this token in the Authorization header when making requests to protected resources: Authorization: Bearer  [1]&lt;/li&gt;
&lt;li&gt;how to generate one? [2]&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Automate
&lt;/h2&gt;

&lt;p&gt;I begin thinking on how can I spend 30 mins to 1 hour automating at least getting the exact token I need.&lt;/p&gt;

&lt;p&gt;My use case is that once I copy the curl string, I just click on the script, and it adds the token in the clipboard.&lt;/p&gt;

&lt;p&gt;I then just need to paste it into the swagger target auth input.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technology
&lt;/h2&gt;

&lt;p&gt;As usual I'm using Python which I think it's one of the best programming languages for automating scripts.&lt;/p&gt;

&lt;p&gt;I use the pyperclip package to read from and write to the clipboard.&lt;/p&gt;

&lt;p&gt;Then pyinstaller to generate the exe file.&lt;/p&gt;

&lt;p&gt;I also use pipreqs to manage dependencies.&lt;/p&gt;

&lt;p&gt;I've also copied pasted the gitignore from:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/github/gitignore/blob/main/Python.gitignore"&gt;https://github.com/github/gitignore/blob/main/Python.gitignore&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project
&lt;/h2&gt;

&lt;p&gt;I use PyCharm community edition to create the project.&lt;/p&gt;

&lt;p&gt;I empty the default main.py file.&lt;/p&gt;

&lt;p&gt;I break down each function to do only one thing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pyperclip&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;copy_from_clipboard&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;pyperclip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;waitForPaste&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="c1"&gt;# return pyperclip.waitForNewPaste()
&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;copy_to_clipboard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;pyperclip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;extract_bearer_token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# check if the string is present otherwise do nothing
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s"&gt;"Authorization: Bearer "&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# ignore the header parts and only take the token
&lt;/span&gt;        &lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Authorization: Bearer "&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# strip any leading and trailing whitespace
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;copy_from_clipboard&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;extract_bearer_token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;copy_to_clipboard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Moreover, I still can separate the detection of the bearer token and extracting the specific string.&lt;/p&gt;

&lt;p&gt;This is recommended as it's easier to unit test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Improvements
&lt;/h2&gt;

&lt;p&gt;In terms of User Experience (UX), I also need to manually click on the exe file each time I want to get the token.&lt;/p&gt;

&lt;p&gt;A simple improvement is just launching the script once and it will automatically listen to any clipboard event.&lt;/p&gt;

&lt;p&gt;From that it will detect and extract as appropriate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I believe automating tasks, especially the repetitive and boring ones, can help free our time in the long run, so that we can learn new things and help more people.&lt;/p&gt;

&lt;p&gt;You can ask me any question on &lt;a href="https://twitter.com/AbdallahRamsing"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;[1] - &lt;a href="https://swagger.io/docs/specification/authentication/bearer-authentication/#:%7E:text=The%20bearer%20token%20is%20a,Authorization%3A%20Bearer"&gt;https://swagger.io/docs/specification/authentication/bearer-authentication/#:~:text=The%20bearer%20token%20is%20a,Authorization%3A%20Bearer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] - &lt;a href="https://jwt.io/"&gt;https://jwt.io/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Highly Recommended Resources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://automatetheboringstuff.com/"&gt;https://automatetheboringstuff.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gto76.github.io/python-cheatsheet"&gt;https://gto76.github.io/python-cheatsheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinta/awesome-python"&gt;https://github.com/vinta/awesome-python&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>python</category>
      <category>automation</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
