From 820a143ae4da886825a3e6c8a03b6afb658734e7 Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Tue, 13 Jan 2026 12:01:16 -0600 Subject: [PATCH 1/5] not working yet v3 changes --- .gitignore | 4 +++- server/Dockerfile | 10 +++++----- server/Pipfile | 1 + server/app.py | 1 + .../cms_bluebutton_sdk-1.0.4-py3-none-any.whl | Bin 0 -> 14512 bytes 5 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 server/cms_bluebutton_sdk-1.0.4-py3-none-any.whl diff --git a/.gitignore b/.gitignore index e848c21..02258bf 100644 --- a/.gitignore +++ b/.gitignore @@ -63,4 +63,6 @@ wheels/ # Installer logs pip-log.txt -pip-delete-this-directory.txt \ No newline at end of file +pip-delete-this-directory.txt +# Snyk Security Extension - AI Rules (auto-generated) +.github/instructions/snyk_rules.instructions.md diff --git a/server/Dockerfile b/server/Dockerfile index 540c78c..761294c 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -13,11 +13,11 @@ COPY . . RUN pip install pipenv debugpy # Install cms_bluebutton_sdk from pypi.org or test.pypi.org -RUN if [ "$BUILD_DEVELOPMENT" = "True" ]; then \ - pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ cms-bluebutton-sdk; \ - else \ - pip install cms-bluebutton-sdk; \ - fi +# RUN if [ "$BUILD_DEVELOPMENT" = "True" ]; then \ +# pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ cms-bluebutton-sdk; \ +# else \ +# pip install cms-bluebutton-sdk; \ +# fi RUN pipenv lock RUN pip install click diff --git a/server/Pipfile b/server/Pipfile index 7a52921..144a3a6 100644 --- a/server/Pipfile +++ b/server/Pipfile @@ -6,6 +6,7 @@ name = "pypi" [packages] flask = "*" jinja2 = "==3.1.*" +cms-bluebutton-sdk = {file = "./cms_bluebutton_sdk-1.0.4-py3-none-any.whl"} [dev-packages] diff --git a/server/app.py b/server/app.py index bd2d17c..fdb5a65 100644 --- a/server/app.py +++ b/server/app.py @@ -68,6 +68,7 @@ def authorization_callback(): print(ERR_MISSING_STATE) return redirect(get_fe_redirect_url()) + print(f'Received auth code: {code}, state: {state}') auth_token = bb.get_authorization_token(auth_data, code, state) # correlate app user with medicare bene diff --git a/server/cms_bluebutton_sdk-1.0.4-py3-none-any.whl b/server/cms_bluebutton_sdk-1.0.4-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..e4a5df150d04a27274829a55020586a7b3b589bd GIT binary patch literal 14512 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 Date: Wed, 14 Jan 2026 13:37:50 -0600 Subject: [PATCH 2/5] removing debug comments --- server/Dockerfile | 10 +++++----- server/Pipfile | 1 - server/app.py | 1 - .../cms_bluebutton_sdk-1.0.4-py3-none-any.whl | Bin 14512 -> 14519 bytes 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/server/Dockerfile b/server/Dockerfile index 761294c..540c78c 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -13,11 +13,11 @@ COPY . . RUN pip install pipenv debugpy # Install cms_bluebutton_sdk from pypi.org or test.pypi.org -# RUN if [ "$BUILD_DEVELOPMENT" = "True" ]; then \ -# pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ cms-bluebutton-sdk; \ -# else \ -# pip install cms-bluebutton-sdk; \ -# fi +RUN if [ "$BUILD_DEVELOPMENT" = "True" ]; then \ + pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ cms-bluebutton-sdk; \ + else \ + pip install cms-bluebutton-sdk; \ + fi RUN pipenv lock RUN pip install click diff --git a/server/Pipfile b/server/Pipfile index 144a3a6..7a52921 100644 --- a/server/Pipfile +++ b/server/Pipfile @@ -6,7 +6,6 @@ name = "pypi" [packages] flask = "*" jinja2 = "==3.1.*" -cms-bluebutton-sdk = {file = "./cms_bluebutton_sdk-1.0.4-py3-none-any.whl"} [dev-packages] diff --git a/server/app.py b/server/app.py index fdb5a65..bd2d17c 100644 --- a/server/app.py +++ b/server/app.py @@ -68,7 +68,6 @@ def authorization_callback(): print(ERR_MISSING_STATE) return redirect(get_fe_redirect_url()) - print(f'Received auth code: {code}, state: {state}') auth_token = bb.get_authorization_token(auth_data, code, state) # correlate app user with medicare bene diff --git a/server/cms_bluebutton_sdk-1.0.4-py3-none-any.whl b/server/cms_bluebutton_sdk-1.0.4-py3-none-any.whl index e4a5df150d04a27274829a55020586a7b3b589bd..97666b5a2f8576b3840d94db98c5fef1668f5bb1 100644 GIT binary patch delta 2423 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 X%kV$alZ0l~-^1=9Pr@YCe--`)g`w+;A(%D< zZGaZLplG_i6oEiXw9Qr)Rguct2Knzhhc}VBIL1 zxLNI~+*f?#mM#0#F{z|q)4CJ~x00&m_0FwIs+i&j=GI+Xp`>jq4qi^Kgs3*GQt6?q z6mNfMt5Q}MqGT~a64FA{QqfvTM|l16m;BY$<;$zL*NerXsHl|WvQvA} z@~>2JQNI%(S$(k}@RV#z@|@RP<#{4mwOtbmq+kw^J(s*#L->F{C(i&xPxF@eBr~l$EhLSfvJ`Q?>tPCG24n{*%UP3+CY*N4Mi@|aS-BY=mF>pdaHY`@XNmC{3UVoYk!dU}d65WuO zB5#CLhzz%7>53Rdq}eqeArv~GF*^!w-Ygt6Yi*^P^D=Ez390pG8b|>PwcL+CKSVX~Ab@fWKh~1R(%}B$T@*jy`ls z#O0Buax<*vW=c)at7;#kt71yARvJw}1hu;0Ja^mYZoA|=u7Y*b)rEiRH0rG(*5Ktb z{UCUq7}aU97aS%VD{n<0j|eBwl;M2GoJrAT2Dh;J(tIqKhDo9?fR)YM;Fh&~%VB!X zdSZWXSR~&)HR5A*9Se}hj(rzM<(>kJ6Q|0D?(+J@>(>xEbPo*oiGxdUo4YaM9!9pbn<;EWJGh7IygmaoZh_yeq1zPQXr=00Xhy9WDp zG8Oj7t)3%5d-OJfqfBnnEv&6;;>#c&21{+y;4=TH$wfUSA~RcqVu*lsAPL)&csGhc(<;1_LbP^y&!k&{%kekdFyThW2gdP z0Nub&#XhTPPHmwECUD``F|s|QC6ryD4E`!O#_-46UxCPSqz$O zN&!*$?^|$!RZ(a46J59w=DqCHp6Q~#2s5xxRr|~3oFjlVJeHb{Y@#x_BV>dl{KBJn z=CYMfJIF^Do7lQ)?cnauvf_J_uA$xpbG(j;`E#T|DqNjl$7CzozMOTP)h>@ z6aWAK2mrIL2GI%v^^UWF5j_e5^^UW^8~+so^^TLlF`xqVj+0|DT?zG$EnNS7Kq4rU z$uc&7$(Eup6oBDz1IBIh9>--<;y9kckwVvG0r)@2hn#PEGA!Nbw3p31*TP)dU16naBxAxuM2A+@ zLmodUY4MhQ1(N|^pRlcFvQ?WMo$|PB&cqOZ*=F78`YAp-VA$s5&cLeHZ#2vJ6yO)& zmHT>pg7IY8(Lu!dAUp^L!47UFW%j3~r3)XVDr_BU5eyUfU>-M|pZrk-}U%H1FQ9Sc)*7LRO?{Wsd!odnt>e`ePoUT7b1}pc(UV=t+6WSbBbXF?v=e4Ju1K4J;??q4&ChpIlDgq zPo(7xT%v*#Z~nthhsTF=E7AIP5-Mu(`a?0wE1H?jXWT3=5vI%L+`iXkRy3$U?}o0Z zmaG0RU4{BU`>kPBn~knvX=B{t1V!3^w6h?Il`%;IrCmYqpi(>ludn=L%TzsiC42H` zW3&=7xuqVhT{C1ZBmZyxieN{}5pp2FxKBbdF+x#Ie7L95q!nJ`3@r0cHYx!ylPfkz0>2KE;SL~^l{P8?Ad|p0C<674lj=4c0&fwM zkr6eMJvR&j^^TKEHyi@48 Date: Mon, 26 Jan 2026 16:52:33 -0600 Subject: [PATCH 3/5] committing changes needed for local run --- server/Dockerfile | 12 +++++++----- server/Pipfile | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/server/Dockerfile b/server/Dockerfile index 540c78c..96da53b 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -13,12 +13,14 @@ COPY . . RUN pip install pipenv debugpy # Install cms_bluebutton_sdk from pypi.org or test.pypi.org -RUN if [ "$BUILD_DEVELOPMENT" = "True" ]; then \ - pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ cms-bluebutton-sdk; \ - else \ - pip install cms-bluebutton-sdk; \ - fi +# RUN if [ "$BUILD_DEVELOPMENT" = "True" ]; then \ +# pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ cms-bluebutton-sdk; \ +# else \ +# pip install cms-bluebutton-sdk; \ +# fi +# If using a local version of the sdk, copy the wheel file and install it +# RUN pip install cms_bluebutton_sdk-1.0.4-py3-none-any.whl RUN pipenv lock RUN pip install click RUN pipenv install --system --deploy --ignore-pipfile diff --git a/server/Pipfile b/server/Pipfile index 7a52921..144a3a6 100644 --- a/server/Pipfile +++ b/server/Pipfile @@ -6,6 +6,7 @@ name = "pypi" [packages] flask = "*" jinja2 = "==3.1.*" +cms-bluebutton-sdk = {file = "./cms_bluebutton_sdk-1.0.4-py3-none-any.whl"} [dev-packages] From 4709feb1629fcd0b6aa00f1aa67be2f17ad69747 Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Tue, 27 Jan 2026 16:11:02 -0600 Subject: [PATCH 4/5] removing .whl and adding steps around testing locally --- README-bb2-dev.md | 48 ++++++++++++++++++ server/Pipfile | 1 - .../cms_bluebutton_sdk-1.0.4-py3-none-any.whl | Bin 14519 -> 0 bytes 3 files changed, 48 insertions(+), 1 deletion(-) delete mode 100644 server/cms_bluebutton_sdk-1.0.4-py3-none-any.whl diff --git a/README-bb2-dev.md b/README-bb2-dev.md index 76a5dda..e4994a3 100644 --- a/README-bb2-dev.md +++ b/README-bb2-dev.md @@ -75,3 +75,51 @@ To show the version installed: docker-compose exec server pip show cms-bluebutton-sdk ``` +### Testing Locally + +This information is repeated from the SDK (https://github.com/CMSgov/cms-bb2-python-sdk/blob/main/README-sdk-dev.md). It is here for ease of reference as it contains steps relating to the sample client as well. +The current method for seeing the SDK in action is fairly complex, as it requires also setting up the Python sample client (this repo). These both, of course, depend upon the web-server repo for most of their logic. It is possible that in order to fully understand an issue that arises within the SDK or the sample client, a developer would have to track changes across 3 separate projects. There should be some future work to simplify this process as it is very manual and laborious. + +The steps listed here are listed elsewhere in the documentation but for the sake of convenience, they are partially repeated here +and written together so that a developer should be able to follow this step by step. + +The overall goals are to: + + - Build a local version of the SDK + - Run a local version of sample client that consumes a local version of the SDK + + ### Building a local version of the SDK + + Run the following commands in the base of the SDK repository. The commands suppose that you have the Python sample client cloned in the same folder as this SDK repo. Do not be in a virtualenv while running these commands. + + ``` + rm -rf build/ + python -m build --wheel --o ../bluebutton-sample-client-python-react/server + ``` + + The --o (or outdir) command should effectively 'copy paste' the built version of the .whl file into where it would be needed for the sample client. If you do not want it in the sample client, omit the --o and file path. + + ### Run a local version of sample client that consumes a local version of the SDK + + Ensure that in bluebutton-sample-client-python-react/server/Dockerfile, uncomment the following line. Replace the version number (1.0.4 in the example) of the .whl file with what has been generated from the previous build command. + + ``` + RUN pip install cms_bluebutton_sdk-1.0.4-py3-none-any.whl + ``` + + In bluebutton-sample-client-python-react/server/Pipfile, add this line: + + ``` + cms-bluebutton-sdk = {file = "./cms_bluebutton_sdk-1.0.4-py3-none-any.whl"} + ``` + + In the base repository of bluebutton-sample-client-python-react, run the following commands. Ensure that you have no currently running containers or images of the sample client. + + ``` + cd server + unzip -l cms_bluebutton_sdk-1.0.4-py3-none-any.whl + pip install cms_bluebutton_sdk-1.0.4-py3-none-any.whl + docker compose up + ``` + + Each time a change is made in the SDK, you must repeat all of the previous steps of building and re-running a local sample client. You must also ensure that the containers and images are removed each time. \ No newline at end of file diff --git a/server/Pipfile b/server/Pipfile index 144a3a6..7a52921 100644 --- a/server/Pipfile +++ b/server/Pipfile @@ -6,7 +6,6 @@ name = "pypi" [packages] flask = "*" jinja2 = "==3.1.*" -cms-bluebutton-sdk = {file = "./cms_bluebutton_sdk-1.0.4-py3-none-any.whl"} [dev-packages] diff --git a/server/cms_bluebutton_sdk-1.0.4-py3-none-any.whl b/server/cms_bluebutton_sdk-1.0.4-py3-none-any.whl deleted file mode 100644 index 97666b5a2f8576b3840d94db98c5fef1668f5bb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14519 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 h^lyQ!{~i5*$7n?vh(B%&0KonEd;baW Date: Wed, 28 Jan 2026 10:38:40 -0600 Subject: [PATCH 5/5] uncommenting install for sdk --- server/Dockerfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/Dockerfile b/server/Dockerfile index 96da53b..d64c076 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -13,11 +13,11 @@ COPY . . RUN pip install pipenv debugpy # Install cms_bluebutton_sdk from pypi.org or test.pypi.org -# RUN if [ "$BUILD_DEVELOPMENT" = "True" ]; then \ -# pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ cms-bluebutton-sdk; \ -# else \ -# pip install cms-bluebutton-sdk; \ -# fi +RUN if [ "$BUILD_DEVELOPMENT" = "True" ]; then \ + pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ cms-bluebutton-sdk; \ + else \ + pip install cms-bluebutton-sdk; \ + fi # If using a local version of the sdk, copy the wheel file and install it # RUN pip install cms_bluebutton_sdk-1.0.4-py3-none-any.whl