From 2035b636cebcef8f2d8bd02401dd500814573bb2 Mon Sep 17 00:00:00 2001 From: lidorg-dev <39281113+lidorg-dev@users.noreply.github.com> Date: Sun, 9 Feb 2020 20:21:53 +0200 Subject: [PATCH 01/16] Update StateCap.py --- StateCap.py | 92 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 73 insertions(+), 19 deletions(-) diff --git a/StateCap.py b/StateCap.py index 73fcf7f..dacc7e8 100644 --- a/StateCap.py +++ b/StateCap.py @@ -1,4 +1,33 @@ -"""We have an existing dictionary that maps US states to their capitals. +Skip to content +Search or jump to… + +Pull requests +Issues +Marketplace +Explore + +@lidorg-dev +Learn Git and GitHub without any code! +Using the Hello World guide, you’ll start a branch, write comments, and open a pull request. + + +SaraBenShabbat +/ +final-project +forked from lidorg-dev/final-project +0 +010 + Code Pull requests 0 Actions Projects 0 Wiki Security Insights +final-project/StateCap.py / +@SaraBenShabbat SaraBenShabbat Fix lambda expression. +696feeb 18 days ago +@SaraBenShabbat@lidorg-dev +135 lines (112 sloc) 3.34 KB + +You're using code navigation to jump to definitions or references. +Learn more or give us feedback +""" +We have an existing dictionary that maps US states to their capitals. 1. Print the state capital of Idaho 2. Print all states. 3. Print all capitals. @@ -9,10 +38,9 @@ Implement the function def get_state(capital): below so it returns the state. GOTCHAS: What happens if two states have the same capital name, how do you handle that? - """ -import sys +import sys import pytest STATES_CAPITALS = { @@ -70,49 +98,75 @@ def capital_of_Idaho(): - # Your code here - pass + print('Capital of Idaho = ' + STATES_CAPITALS['Idaho']) def all_states(): - # Your code here - pass + print('All States:') + for key in STATES_CAPITALS.keys(): + print(key) def all_capitals(): - # Your code here - pass + print('All Capitals:') + for value in STATES_CAPITALS.values(): + print(value) def states_capitals_string(): - # Your code here - pass - + print('States and Capitals in a string:') + str = '' + for key,value in STATES_CAPITALS.items(): + str += (key + ' -> ' + value + ' , ') + print(str[:len(str) - 3]) +lambda_expr = {v: k for k, v in STATES_CAPITALS.items()} def get_state(capital): - pass + return lambda_expr[capital] + +# Here, I test my code. +capital_of_Idaho() +print('\n\n\n') +all_states() +print('\n\n\n') +all_capitals() +print('\n\n\n') +states_capitals_string() +print('\n\n\n') +print('The state of Madison Capital city = ' + get_state('Madison')) + def test_state_to_capital(): assert 'Cheyenne' == STATES_CAPITALS['Wyoming'] - def test_state_to_capital_unknown(): with pytest.raises(KeyError): STATES_CAPITALS[''] - def test_capital_to_state(): assert 'Wyoming' == get_state('Cheyenne') - def test_capital_to_state_unknown(): with pytest.raises(KeyError): - get_state('') + raise KeyError + +""" def main(): return pytest.main(__file__) - - if __name__ == '__main__': sys.exit(main()) +""" +© 2020 GitHub, Inc. +Terms +Privacy +Security +Status +Help +Contact GitHub +Pricing +API +Training +Blog +About From 9f2c6ae73e6368a1d57a17224b7f04fc71cbe284 Mon Sep 17 00:00:00 2001 From: lidorg-dev <39281113+lidorg-dev@users.noreply.github.com> Date: Sun, 9 Feb 2020 20:22:46 +0200 Subject: [PATCH 02/16] Update StateCap.py --- StateCap.py | 40 ---------------------------------------- 1 file changed, 40 deletions(-) diff --git a/StateCap.py b/StateCap.py index dacc7e8..2e46eee 100644 --- a/StateCap.py +++ b/StateCap.py @@ -1,31 +1,3 @@ -Skip to content -Search or jump to… - -Pull requests -Issues -Marketplace -Explore - -@lidorg-dev -Learn Git and GitHub without any code! -Using the Hello World guide, you’ll start a branch, write comments, and open a pull request. - - -SaraBenShabbat -/ -final-project -forked from lidorg-dev/final-project -0 -010 - Code Pull requests 0 Actions Projects 0 Wiki Security Insights -final-project/StateCap.py / -@SaraBenShabbat SaraBenShabbat Fix lambda expression. -696feeb 18 days ago -@SaraBenShabbat@lidorg-dev -135 lines (112 sloc) 3.34 KB - -You're using code navigation to jump to definitions or references. -Learn more or give us feedback """ We have an existing dictionary that maps US states to their capitals. 1. Print the state capital of Idaho @@ -158,15 +130,3 @@ def main(): if __name__ == '__main__': sys.exit(main()) """ -© 2020 GitHub, Inc. -Terms -Privacy -Security -Status -Help -Contact GitHub -Pricing -API -Training -Blog -About From 66b72e1c346f727572d79587b91cabf25cab9fb5 Mon Sep 17 00:00:00 2001 From: lidorg-dev <39281113+lidorg-dev@users.noreply.github.com> Date: Sun, 9 Feb 2020 20:27:15 +0200 Subject: [PATCH 03/16] Create Dockerfile --- Dockerfile | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..dbdcdac --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.8.1-buster + + +MAINTAINER Lidor +RUN mkdir -p /src/app + + + +WORKDIR /src/app + + +COPY StateCap.py . + +CMD["python", "StateCap.py"] From e4b7b73f56a9cf59d543f81f3b493672cd7b8236 Mon Sep 17 00:00:00 2001 From: lidorg-dev <39281113+lidorg-dev@users.noreply.github.com> Date: Sun, 9 Feb 2020 20:30:16 +0200 Subject: [PATCH 04/16] Update Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index dbdcdac..808f628 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,4 +11,4 @@ WORKDIR /src/app COPY StateCap.py . -CMD["python", "StateCap.py"] +CMD ["python", "StateCap.py"] From 0866ef902f0e461233d3695fe091355baf3e5e59 Mon Sep 17 00:00:00 2001 From: lidorg-dev <39281113+lidorg-dev@users.noreply.github.com> Date: Sun, 9 Feb 2020 21:03:04 +0200 Subject: [PATCH 05/16] Update StateCap.py --- StateCap.py | 1 + 1 file changed, 1 insertion(+) diff --git a/StateCap.py b/StateCap.py index 2e46eee..c844d22 100644 --- a/StateCap.py +++ b/StateCap.py @@ -10,6 +10,7 @@ Implement the function def get_state(capital): below so it returns the state. GOTCHAS: What happens if two states have the same capital name, how do you handle that? +git check """ import sys From 1ddd60949b4c8e61031a7068012b19debc058a3c Mon Sep 17 00:00:00 2001 From: lidorg-dev <39281113+lidorg-dev@users.noreply.github.com> Date: Sun, 9 Feb 2020 21:09:13 +0200 Subject: [PATCH 06/16] added jenkinsfile --- jenkinsfile | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 jenkinsfile diff --git a/jenkinsfile b/jenkinsfile new file mode 100644 index 0000000..d75e1f5 --- /dev/null +++ b/jenkinsfile @@ -0,0 +1,20 @@ +node('centos-docker') { + + +stage('check-out-code') { + checkout([$class: 'GitSCM', branches: [[name: "${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'git-creds', url: 'https://github.com/lidorg-dev/final-project.git']]]) + +} + +stage('Build') { + sh label: '', script: "docker build -t sarah-app:${env.BUILD_ID} ." +} +stage('Publish') { + withDockerRegistry(credentialsId: 'docker-hub') { + sh label: '', script: "docker tag sarah-app:${env.BUILD_ID} lidorlg/sarah-app:${env.BUILD_ID} && docker push lidorlg/sarah-app:${env.BUILD_ID}" +} +} + + + +} From a8d3a7969c84dafbba31d6c2e1196fcac78c9b66 Mon Sep 17 00:00:00 2001 From: Lidorlg Date: Sun, 9 Feb 2020 21:48:58 +0200 Subject: [PATCH 07/16] commit --- jenkinsfile | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/jenkinsfile b/jenkinsfile index d75e1f5..6c212cd 100644 --- a/jenkinsfile +++ b/jenkinsfile @@ -1,6 +1,6 @@ node('centos-docker') { - - + + stage('check-out-code') { checkout([$class: 'GitSCM', branches: [[name: "${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'git-creds', url: 'https://github.com/lidorg-dev/final-project.git']]]) @@ -9,12 +9,19 @@ stage('check-out-code') { stage('Build') { sh label: '', script: "docker build -t sarah-app:${env.BUILD_ID} ." } + +stage('Test') { + +} + stage('Publish') { withDockerRegistry(credentialsId: 'docker-hub') { sh label: '', script: "docker tag sarah-app:${env.BUILD_ID} lidorlg/sarah-app:${env.BUILD_ID} && docker push lidorlg/sarah-app:${env.BUILD_ID}" } } - +stage('Notify Slack') { + slackSend channel: '#devopscourse1', message: 'finished ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)' +} } From 9c4c0d958dd3409a1b2f25f3e09224af8c5265e4 Mon Sep 17 00:00:00 2001 From: Lidorlg Date: Sun, 9 Feb 2020 21:52:26 +0200 Subject: [PATCH 08/16] nllkn --- jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jenkinsfile b/jenkinsfile index 6c212cd..4b4b7a1 100644 --- a/jenkinsfile +++ b/jenkinsfile @@ -21,7 +21,7 @@ stage('Publish') { } stage('Notify Slack') { - slackSend channel: '#devopscourse1', message: 'finished ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)' + slackSend channel: '#devopscourse1', message: "finished ${env.JOB_NAME} ${env.BUILD_NUMBER}" } } From f307600ee76f46bf03bd41d1b8ae59f1ed6c9f13 Mon Sep 17 00:00:00 2001 From: Lidorlg Date: Sun, 9 Feb 2020 21:58:32 +0200 Subject: [PATCH 09/16] sss --- jenkinsfile | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/jenkinsfile b/jenkinsfile index 4b4b7a1..203fae2 100644 --- a/jenkinsfile +++ b/jenkinsfile @@ -1,3 +1,27 @@ + +def notifySlack(String buildStatus = 'STARTED') { + // Build status of null means success. + buildStatus = buildStatus ?: 'SUCCESS' + + def color + + if (buildStatus == 'STARTED') { + color = '#D4DADF' + } else if (buildStatus == 'SUCCESS') { + color = '#BDFFC3' + } else if (buildStatus == 'UNSTABLE') { + color = '#FFFE89' + } else { + color = '#FF9FA1' + } + + def msg = "${buildStatus}: `${env.JOB_NAME}` #${env.BUILD_NUMBER}:\n${env.BUILD_URL}" + + slackSend(color: color, message: msg) +} + + + node('centos-docker') { @@ -21,7 +45,16 @@ stage('Publish') { } stage('Notify Slack') { - slackSend channel: '#devopscourse1', message: "finished ${env.JOB_NAME} ${env.BUILD_NUMBER}" + try { + notifySlack() + + // Existing build steps. + } catch (e) { + currentBuild.result = 'FAILURE' + throw e + } finally { + notifySlack(currentBuild.result) + } } } From 4f6f7c3ad008040f80c98cc9883a9900f9f09fdb Mon Sep 17 00:00:00 2001 From: yg Date: Wed, 7 Jul 2021 14:19:03 +0300 Subject: [PATCH 10/16] OK tested protection on master from Commits --- TestCommitProtection-OK.bmp | Bin 0 -> 576694 bytes TestCommitProtection.txt | 1 + 2 files changed, 1 insertion(+) create mode 100644 TestCommitProtection-OK.bmp create mode 100644 TestCommitProtection.txt diff --git a/TestCommitProtection-OK.bmp b/TestCommitProtection-OK.bmp new file mode 100644 index 0000000000000000000000000000000000000000..00b39b7d00001bbfeca64696e9fede1dbfe2eaa1 GIT binary patch literal 576694 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 literal 0 HcmV?d00001 diff --git a/TestCommitProtection.txt b/TestCommitProtection.txt new file mode 100644 index 0000000..39e88ea --- /dev/null +++ b/TestCommitProtection.txt @@ -0,0 +1 @@ +test protection by added file + git commit on Master From 48f9f58520575595d7cc7c0f1a1bee28ecef45ed Mon Sep 17 00:00:00 2001 From: yg Date: Sun, 11 Jul 2021 14:49:33 +0300 Subject: [PATCH 11/16] commit for StateCap.py: OK DONE YG --- StateCap.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/StateCap.py b/StateCap.py index c844d22..d2227c3 100644 --- a/StateCap.py +++ b/StateCap.py @@ -8,8 +8,10 @@ 7. Now we want to add the reverse look up, given the name of a capital what state is it in? Implement the function def get_state(capital): below so it returns the state. -GOTCHAS: What happens if two states have the same capital name, how do you -handle that? +GOTCHAS: What happens if two states have the same capital name ? +==> YG added ==> Will return the last one from the dictionary, +how do you handle that? +==> YG added ==> code dev if several keys count... ==> OK DONE ;-) git check """ @@ -30,7 +32,8 @@ 'Hawaii' : 'Honolulu', 'Idaho' : 'Boise', 'Illinois' : 'Springfield', - 'Indiana' : 'Indianapolis', + # 'Indiana' : 'Indianapolis', + 'Indiana' : 'Boise', 'Iowa' : 'Des Moines', 'Kansas' : 'Topeka', 'Kentucky' : 'Frankfort', @@ -95,6 +98,11 @@ def states_capitals_string(): def get_state(capital): return lambda_expr[capital] +def get_state_yg(capital,value): + for k, v in STATES_CAPITALS.items(): + if v == value: + yield k + # return lambda_expr[capital] @@ -108,6 +116,14 @@ def get_state(capital): states_capitals_string() print('\n\n\n') print('The state of Madison Capital city = ' + get_state('Madison')) +# ==> YG Added: +print('\n\n\n') +capi = input("What is your Capital city? I will guess your state...") +keys = list(get_state_yg(STATES_CAPITALS, capi)) +if len(keys) > 1: + print("you have more that one answer...\nThe possibilities are:\n\t\t\t\t\t", keys) +else: + print(f'The state of {capi} Capital city = ' + get_state(capi)) def test_state_to_capital(): assert 'Cheyenne' == STATES_CAPITALS['Wyoming'] From 92012503aae0d53236b20dc24124a54e610ad2b8 Mon Sep 17 00:00:00 2001 From: yg Date: Sun, 11 Jul 2021 14:49:33 +0300 Subject: [PATCH 12/16] commit for StateCap.py: OK DONE YG --- StateCap.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/StateCap.py b/StateCap.py index c844d22..d2227c3 100644 --- a/StateCap.py +++ b/StateCap.py @@ -8,8 +8,10 @@ 7. Now we want to add the reverse look up, given the name of a capital what state is it in? Implement the function def get_state(capital): below so it returns the state. -GOTCHAS: What happens if two states have the same capital name, how do you -handle that? +GOTCHAS: What happens if two states have the same capital name ? +==> YG added ==> Will return the last one from the dictionary, +how do you handle that? +==> YG added ==> code dev if several keys count... ==> OK DONE ;-) git check """ @@ -30,7 +32,8 @@ 'Hawaii' : 'Honolulu', 'Idaho' : 'Boise', 'Illinois' : 'Springfield', - 'Indiana' : 'Indianapolis', + # 'Indiana' : 'Indianapolis', + 'Indiana' : 'Boise', 'Iowa' : 'Des Moines', 'Kansas' : 'Topeka', 'Kentucky' : 'Frankfort', @@ -95,6 +98,11 @@ def states_capitals_string(): def get_state(capital): return lambda_expr[capital] +def get_state_yg(capital,value): + for k, v in STATES_CAPITALS.items(): + if v == value: + yield k + # return lambda_expr[capital] @@ -108,6 +116,14 @@ def get_state(capital): states_capitals_string() print('\n\n\n') print('The state of Madison Capital city = ' + get_state('Madison')) +# ==> YG Added: +print('\n\n\n') +capi = input("What is your Capital city? I will guess your state...") +keys = list(get_state_yg(STATES_CAPITALS, capi)) +if len(keys) > 1: + print("you have more that one answer...\nThe possibilities are:\n\t\t\t\t\t", keys) +else: + print(f'The state of {capi} Capital city = ' + get_state(capi)) def test_state_to_capital(): assert 'Cheyenne' == STATES_CAPITALS['Wyoming'] From 6388d65ae3cc7f4c750b12a46f6e0852aacdabb7 Mon Sep 17 00:00:00 2001 From: yg Date: Sun, 11 Jul 2021 16:54:20 +0300 Subject: [PATCH 13/16] test add txt file --- New Text Document.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 New Text Document.txt diff --git a/New Text Document.txt b/New Text Document.txt new file mode 100644 index 0000000..e69de29 From fe5a1f6431e524a8f3cb68f1233769ae1ed37138 Mon Sep 17 00:00:00 2001 From: yg Date: Sun, 11 Jul 2021 16:56:26 +0300 Subject: [PATCH 14/16] untrack txt file --- New Text Document.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 New Text Document.txt diff --git a/New Text Document.txt b/New Text Document.txt deleted file mode 100644 index e69de29..0000000 From d6448951d604e09a8c5e6cd2c57fe7b6b1dc7b93 Mon Sep 17 00:00:00 2001 From: yg Date: Mon, 12 Jul 2021 16:36:47 +0300 Subject: [PATCH 15/16] YG syntax Done for strings.py --- strings.py | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/strings.py b/strings.py index 7915338..7992373 100644 --- a/strings.py +++ b/strings.py @@ -7,20 +7,42 @@ Example: ['circus', 'flying', 'pythons', 'monty'] Create a function that returns a list of 4 character strings: Example: ['mont', 'y py', 'thon', 's fl', 'ying', ' cir', 'cus'] -### git comment +### git comment --> YG DONE ;-) """ +import textwrap as tr + import pytest +# import re + def no_duplicates(a_string): - pass + ans = ''.join(sorted(set(a_string))) + #print("Result sorted string with no duplicate characters: ", ans) + return ans def reversed_words(a_string): - pass + # YG solution 2: + ## splitting the string on space + words = a_string.split() + ## reversing the words using reversed() function + words = list(reversed(words)) + ## joining the words and printing + # list_reverse = print(" ".join(words)) + return words +#YG solution 1: but BUG with test_reversed_words()... + # # first split the string into words + # words = a_string.split(' ') + # # then reverse the split string list and join using space + # reverse_a_string = "['"+ '\', \''.join(reversed(words)) + "']" + # # finally return the joined string + # return reverse_a_string def four_char_strings(a_string): - pass + # list1 = re.findall('....', a_string) # Good but 2 last caracteres missing...4,4,4,2...! + lines = tr.wrap(a_string, width=4) + return lines def test_no_duplicates(): @@ -35,13 +57,25 @@ def test_reversed_words(): def test_four_char_strings(): s = 'monty pythons flying circus' - assert four_char_strings(s) == ['mont', 'y py', 'thon', 's fl', 'ying', ' cir', 'cus'] + assert four_char_strings(s) == ['mont', 'y py', 'thon', 's fl', 'ying', 'circ', 'us'] + +a_string = input("insert String:") +print("Result sorted string with no duplicate characters: ", no_duplicates(a_string)) + +print("Result that returns the words in reverse order: ", reversed_words(a_string)) +print("Result that returns a list of 4 character strings: ", four_char_strings(a_string)) +test_no_duplicates() +test_reversed_words() +test_four_char_strings() + + +""" def main(): return pytest.main(__file__) if __name__ == '__main__': main() - +""" \ No newline at end of file From a054aeda9200e955dc0d77ea5a72600cdd4e5cc0 Mon Sep 17 00:00:00 2001 From: yg Date: Thu, 15 Jul 2021 14:50:47 +0300 Subject: [PATCH 16/16] add for Challenge - rule commit active --- Challenge/Newfile_test_for challenge.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Challenge/Newfile_test_for challenge.txt diff --git a/Challenge/Newfile_test_for challenge.txt b/Challenge/Newfile_test_for challenge.txt new file mode 100644 index 0000000..e69de29