Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Please add bulk change option #52

Open
innocent-velociraptor opened this issue May 1, 2022 · 17 comments
Open

Please add bulk change option #52

innocent-velociraptor opened this issue May 1, 2022 · 17 comments

Comments

@innocent-velociraptor
Copy link

Hello,

It's more a new feature request than a bug report.
Would it be possible to add an option to be able to either bulk apply the same settings for all games in one's library or solely to manually selected games?

I think the idea is simliar to the one mentionned in the second part of issue #51.

@tappi287
Copy link
Owner

tappi287 commented May 3, 2022

Hey, thanks, this is the right place for feature suggestions.

No, it is not possible, please see #27 and #6

@Greta-Py
Copy link

Greta-Py commented May 4, 2022

Hey, thanks for the feedback.
If I understand properly, the issues you're mentioning are related to malicious behavior, well, at least they are flagged as such by AV software.
Since actions performed would be of the same kind with the current app and with a bulk mode, would adding a random sleep timer before processing each game solve the problem?

@tappi287
Copy link
Owner

tappi287 commented May 5, 2022

o_O do you have a collection of throw-away accounts? :] Greetings, guilty-snake

Yes, I need to avoid "suspicious" behaviour by the app. Eg. code for an completely automatic update is there but will even trigger Windows built-in malware protection on the system were I actually build the software.

@Greta-Py
Copy link

Greta-Py commented May 6, 2022

Ahah, busted I see :(
No, it's just that one account requires me to use a security token for 2FA and I don't always have it on me.
Regarding the code, can it be build on Linux, and then run on Windows?
If you want, you can send me the code that does things automatically and I'll see what I can do.

@tappi287
Copy link
Owner

tappi287 commented May 7, 2022

No, it's a not a problem when building but while running the code.

@innocent-velociraptor
Copy link
Author

I realized afterwards that my question was dumb, if the issue was arising only during building, then you could just disable your AV during this step (unlike an updated version with a bulk mode where everyone who would want to use it would need to disable their AV while using the app).
Do you know exactly what triggers the AV alert? Is it just the fact of copying multiples files at once? Because, that's basically what a backup of a folder would do. Perhaps it's also related to modifying DLLs?
Any chance that using another Python module to copy files could go unnoticed? Or introducing a few seconds delay between each copy (at worst, someone with a huge games library could let the app run overnight)?

In the meantime, maybe an intermediary solution would be to add the ability to change a plugin's default settings?
For instance, right now, I think I need to change this file for FSR: https://github.com/tappi287/openvr_fsr_app/blob/master/app/cfg/fsr_cfg.py
and then, build the app, because those settings are kind of hard coded once the app is built, right?

Because I tried modifying the file: C:\Program Files (x86)\OpenVR-FSR-App\data\openvr_fsr\openvr_mod.cfg
but it didn't seem to work (at least, after relaunching the app, the default settings looked to be the same as before).

@tappi287
Copy link
Owner

tappi287 commented May 8, 2022

If you would like to implement this please feel free to create a fork and I'll see where I can help.

To clear things up: 1. I do not want to potentially trigger AV from any software I release 2. I see no use in a bulk change of options: These plugins will worsen your image quality with no performance gain in 85% of use cases. They can however help in very special scenarios where a system is GPU limited with very high-res HMDs. So these need to be very finely tuned for the 2-3 apps where this might apply. Applying these plugins to a lot of apps simply does not make sense. If someone is just after sharpening filters: there are lot more configurable and performant options available e.g. VRToolkit

I'll hope to get this clarification/explanation into the app at some point in the future. Currently my impression is user's send links to FSR/fixed FOV/OpenXR Toolkit and alike around as a generic one click approach to obtain better performance which simply isn't the case for any of those.

@innocent-velociraptor
Copy link
Author

Hey,

I had a look at your code, and that's way beyond my skills (Classes, decorators and so on) I just started doing a bit of Python a few weeks ago, but very basic stuff, and my job is not being a developer.
I completely understand point 1.
But I beg to differ regarding your second point: VR usually imply being GPU limited due to the high resolutions used (almost 4K with a Quest 2 for instance). I'm not even sure que a RTX 3090Ti will be able to make most games run at 120 fps consistently. Consistently implies that the minimum framerate is close to 120 fps (or at least, say, 0.1% or 1% lows), that's definitely not the same as getting 120 fps on average.
https://tpucdn.com/review/nvidia-geforce-rtx-3090-ti-founders-edition/images/average-fps-3840-2160.png
Granted, those are not VR games, but it's only the average FPS that is mentioned here, and it does not even reach 120 FPS when all games are taken into account and you look at the overall average for all games benchmarked.
But unfortunately, I only own a 1080Ti, which is basically only half as powerful.
Regarding the image quality, personally I don't really care, as I use my PC to stream games wirelessly, so the video is already degraded by the compression. But as often, it's a matter of tradeoffs. I just prefer speed over quality.
But in the end, it's your software, so obviously you do what you want, no problem with that.

@tappi287
Copy link
Owner

tappi287 commented May 9, 2022

I guess both of us lack the numbers to prove our points here :) I kindly ask to continue discussion about performance and hardware in forums/discord. This is not to say you're wrong and I'm right, just the wrong place for a discussion we could have for weeks without proper numbers showing CPU -and- GPU frame times with and without these plugins enabled on a broad selection of apps.

@innocent-velociraptor
Copy link
Author

innocent-velociraptor commented May 10, 2022

https://www.techpowerup.com/review/amd-fsr-fidelityfx-super-resolution-quality-performance-benchmark/9.html
https://www.tomshardware.com/features/amd-fsr-vs-nvidia-dlss

Those are not VR games, but AFAIK, there is no video game engine specifically developed to be used exclusively in VR games, so I see no reason why these results could not be extrapolated for VR (especially when only FSR with high res is taken into account, a case that yields bigger gains).

So, I would really like to see your numbers that make you say: "These plugins will worsen your image quality with no performance gain in 85% of use cases."

You can probably find a few games for which there would be no performance gain in 4K upscaled with FSR in Balanced mode, but definitely not 85%.

@Greta-Py
Copy link

Hello,

I'm trying to build the app on Windows 11, but I ran into this error (not the first one, but was able to solve the previous ones):

`(openvr_fsr_app-master-fkHXQenE) C:\Users\guilty-snake\Downloads\openvr_fsr_app-master>python.exe run.py
yarn run v1.22.18
$ vue-cli-service build
ERROR Error: Cannot find module '@vue/cli-plugin-babel/preset'
Require stack:
- C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules@babel\core\lib\config\files\plugins.js
- C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules@babel\core\lib\config\files\index.js
- C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules@babel\core\lib\index.js
- C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\index.js
- C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-service\lib\Service.js
- C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-service\bin\vue-cli-service.js
Error: Cannot find module '@vue/cli-plugin-babel/preset'
Require stack:

  • C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules@babel\core\lib\config\files\plugins.js
  • C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules@babel\core\lib\config\files\index.js
  • C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules@babel\core\lib\index.js
  • C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\index.js
  • C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-service\lib\Service.js
  • C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-service\bin\vue-cli-service.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at resolve (node:internal/modules/cjs/helpers:108:19)
    at tryRequireResolve (C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules@babel\core\lib\config\files\plugins.js:157:9)
    at resolveStandardizedNameForRequire (C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules@babel\core\lib\config\files\plugins.js:195:19)
    at sync (C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules@babel\core\lib\config\files\plugins.js:224:12)
    at sync (C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules\gensync\index.js:182:19)
    at C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules\gensync\index.js:210:24
    at Generator.next ()
    at resolvePreset (C:\Users\guilty-snake\AppData\Roaming\npm\node_modules@vue\cli-plugin-babel\node_modules@babel\core\lib\config\files\plugins.js:87:17)
    at resolvePreset.next ()
    error Command failed with exit code 1.
    info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
    Build Web App failed.`

Any idea?
Looks like problem with a npm dependency, no?
I followed the steps you have indicated, but I had to install vue-cli-service when I encountered the first error. Now, I'm stuck here. I also executed this command: npm install @vue/cli-plugin-babel -g

P.S.: I'm not a dev, so please bear with me :p

@tappi287
Copy link
Owner

Hmm, I can create an environment without problems using:
npm v8.3.1
yarn 1.22.10

Your npm install command installs the plugin into your global npm modules. Maybe try to uninstall and then install the exact version stated in the lock files: 4.5.15, should be:
yarn add @vue/babel-preset-app@4.5.15
yarn add @vue/cli-shared-utils@4.5.15

and just in case anything else is missing:
yarn add @babel/core@7.11.0 babel-loader@8.1.0 cache-loader@4.1.0 thread-loader@2.1.3 webpack@4.0.0

@innocent-velociraptor
Copy link
Author

Hi, thanks for you reply.

Where should I run the commands from, if that matters?
Windows CMD or node.js command prompt?
Isn't there something similar to Python, like pip install -r requirements.txt ?

I executed those 2 commands:

yarn remove @vue/babel-preset-app
yarn remove @vue/cli-shared-utils

success Uninstalled packages. for both.

Then, as you suggested, I ran:

yarn add @vue/babel-preset-app@4.5.15
yarn add @vue/cli-shared-utils@4.5.15

But vue CLI is still complaining:
Error: Cannot find module '@vue/cli-plugin-babel/preset'

And npm modules can be installed either globally or locally?
What's better in this case?

@tappi287
Copy link
Owner

Where should I run the commands from, if that matters?

Inside the directory where you cloned the git repo. C:\Users\guilty-snake\Downloads\openvr_fsr_app-master

Windows CMD or node.js command prompt?

Does not matter as long as you are in the right dir.

Isn't there something similar to Python, like pip install -r requirements.txt

That's what pipenv is for. Pip would use your system interpreter while pipenv creates a virtual environment for you.

But vue CLI is still complaining:
Error: Cannot find module '@vue/cli-plugin-babel/preset'

There are plenty of suggestions you could try:
https://duckduckgo.com/?q=vue+cli-plugin-babel%2Fpreset
One suggestion is to install @babel/core @babel/preset-envbut I can't try this here.

And npm modules can be installed either globally or locally?
What's better in this case?

If you have only one node.js project it doesn't really matter but in general it will save you head aches if you place dependencies locally inside your project space.

@Greta-Py
Copy link

Greta-Py commented May 19, 2022

Hey,

Thanks, eventually, it worked ! I thought I was gonna give up :p
I had to run the vue commands (at least this one: yarn add @babel/core @babel/preset-env inside the pipenv , is that the normal expected behavior?
I assumed pipenv created a virtual env just for python, but that for the rest of the libraries in other languages, it would be able to use those that are installed system wide. Overall, I'm quite confused.
Do you think that would be possible to package a working building env inside a Docker container? Perhaps not, because it relies on Windows stuff?
And sorry for the off topic.

Edit:

No happy when running the tests though :(

========================================================================================================= short test summary info ========================================================================================================== FAILED test_app/test_app_fn.py::test_scan_app_lib_fn[app_settings_old] - TypeError: the JSON object must be str, bytes or bytearray, not NoneType FAILED test_app/test_app_fn.py::test_scan_app_lib_fn[app_settings] - TypeError: the JSON object must be str, bytes or bytearray, not NoneType ================================================================================================ 2 failed, 39 passed, 2 warnings in 14.34s =================================================================================================

@tappi287
Copy link
Owner

tappi287 commented May 20, 2022

I assumed pipenv created a virtual env just for python, but that for the rest of the libraries in other languages, it would be able to use those that are installed system wide. Overall, I'm quite confused.

pipenv is just for python. pipenv shell may changed your PATH sys variable(inside the local shell) and you were finally able to install the deps because yarn could not resolve to system wide deps.

Do you think that would be possible to package a working building env inside a Docker container? Perhaps not, because it relies on Windows stuff?

Yes, the app is only useful on Windows(plugins are platform specific dll's) so a Docker container has no use here.

No happy when running the tests though :(

Just run them a second time. Some files need to be created on first run.

@Greta-Py
Copy link

Hello, thank you for the answers.

I ran the tests like 3 times in a row, but it is still throwing errors:

`(openvr_fsr_app-master-fkHXQenE) C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\tests>python -m pytest
=========================================================================================================== test session starts ============================================================================================================
platform win32 -- Python 3.10.4, pytest-7.1.1, pluggy-1.0.0
rootdir: C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\tests
collected 41 items

test_app\test_app_fn.py ....FF. [ 17%]
test_app\test_custom_dir.py ...... [ 31%]
test_app\test_mod_utils.py .. [ 36%]
test_app\test_openvr_mod.py .............. [ 70%]
test_app\test_user_apps.py .... [ 80%]
test_app\test_vrperfkit_mod.py ....... [ 97%]
test_valve\test_steam_lib.py . [100%]

================================================================================================================= FAILURES =================================================================================================================
__________________________________________________________________________________________________ test_scan_app_lib_fn[app_settings_old] __________________________________________________________________________________________________

app_settings = <class 'app.app_settings.AppSettings'>, custom_dir_id = '#9386', custom_lib_path = WindowsPath('C:/Users/guilty-snake/Downloads/openvr_fsr_app-master/tests/data/input/custom_dir'), custom_app_id = '#9386_7532'
steam_apps_obj = <app.valve.steam.SteamApps object at 0x000002B6BD899F00>

def test_scan_app_lib_fn(app_settings, custom_dir_id, custom_lib_path, custom_app_id, steam_apps_obj):
    # -- Add non existing lib
    non_existing_id = custom_dir_id + '-'
    app_settings.user_app_directories[non_existing_id] = Path(custom_lib_path.parent / 'non-existing').as_posix()
    # -- Add custom test app lib
    app_settings.user_app_directories[custom_dir_id] = custom_lib_path.as_posix()

    # -- Test scan
  result_dict = json.loads(app_fn.scan_app_lib_fn())

test_app\test_app_fn.py:66:


s = None, cls = None, object_hook = None, parse_float = None, parse_int = None, parse_constant = None, object_pairs_hook = None, kw = {}

def loads(s, *, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
    """Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance
    containing a JSON document) to a Python object.

    ``object_hook`` is an optional function that will be called with the
    result of any object literal decode (a ``dict``). The return value of
    ``object_hook`` will be used instead of the ``dict``. This feature
    can be used to implement custom decoders (e.g. JSON-RPC class hinting).

    ``object_pairs_hook`` is an optional function that will be called with the
    result of any object literal decoded with an ordered list of pairs.  The
    return value of ``object_pairs_hook`` will be used instead of the ``dict``.
    This feature can be used to implement custom decoders.  If ``object_hook``
    is also defined, the ``object_pairs_hook`` takes priority.

    ``parse_float``, if specified, will be called with the string
    of every JSON float to be decoded. By default this is equivalent to
    float(num_str). This can be used to use another datatype or parser
    for JSON floats (e.g. decimal.Decimal).

    ``parse_int``, if specified, will be called with the string
    of every JSON int to be decoded. By default this is equivalent to
    int(num_str). This can be used to use another datatype or parser
    for JSON integers (e.g. float).

    ``parse_constant``, if specified, will be called with one of the
    following strings: -Infinity, Infinity, NaN.
    This can be used to raise an exception if invalid JSON numbers
    are encountered.

    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
    kwarg; otherwise ``JSONDecoder`` is used.
    """
    if isinstance(s, str):
        if s.startswith('\ufeff'):
            raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)",
                                  s, 0)
    else:
        if not isinstance(s, (bytes, bytearray)):
          raise TypeError(f'the JSON object must be str, bytes or bytearray, '
                            f'not {s.__class__.__name__}')

E TypeError: the JSON object must be str, bytes or bytearray, not NoneType

C:\Program Files\Python310\lib\json_init_.py:339: TypeError
----------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\util\utils.py", line 132, in func_wrapper
return func(*args, **kwargs)
File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\app_fn.py", line 151, in scan_app_lib_fn
cached_steam_apps[app_id][mod.DLL_LOC_KEY_SELECTED] = cached_entry[mod.DLL_LOC_KEY_SELECTED]
KeyError: 'Usr_8997'
------------------------------------------------------------------------------------------------------------ Captured log call -------------------------------------------------------------------------------------------------------------
CRITICAL root:utils.py:99 File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\util\utils.py", line 132, in func_wrapper
return func(*args, **kwargs)
File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\app_fn.py", line 151, in scan_app_lib_fn
cached_steam_apps[app_id][mod.DLL_LOC_KEY_SELECTED] = cached_entry[mod.DLL_LOC_KEY_SELECTED]

CRITICAL root:utils.py:100 <class 'KeyError'>: 'Usr_8997'
____________________________________________________________________________________________________ test_scan_app_lib_fn[app_settings] ____________________________________________________________________________________________________

app_settings = <class 'app.app_settings.AppSettings'>, custom_dir_id = '#9386', custom_lib_path = WindowsPath('C:/Users/guilty-snake/Downloads/openvr_fsr_app-master/tests/data/input/custom_dir'), custom_app_id = '#9386_7532'
steam_apps_obj = <app.valve.steam.SteamApps object at 0x000002B6BD899F00>

def test_scan_app_lib_fn(app_settings, custom_dir_id, custom_lib_path, custom_app_id, steam_apps_obj):
    # -- Add non existing lib
    non_existing_id = custom_dir_id + '-'
    app_settings.user_app_directories[non_existing_id] = Path(custom_lib_path.parent / 'non-existing').as_posix()
    # -- Add custom test app lib
    app_settings.user_app_directories[custom_dir_id] = custom_lib_path.as_posix()

    # -- Test scan
  result_dict = json.loads(app_fn.scan_app_lib_fn())

test_app\test_app_fn.py:66:


s = None, cls = None, object_hook = None, parse_float = None, parse_int = None, parse_constant = None, object_pairs_hook = None, kw = {}

def loads(s, *, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
    """Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance
    containing a JSON document) to a Python object.

    ``object_hook`` is an optional function that will be called with the
    result of any object literal decode (a ``dict``). The return value of
    ``object_hook`` will be used instead of the ``dict``. This feature
    can be used to implement custom decoders (e.g. JSON-RPC class hinting).

    ``object_pairs_hook`` is an optional function that will be called with the
    result of any object literal decoded with an ordered list of pairs.  The
    return value of ``object_pairs_hook`` will be used instead of the ``dict``.
    This feature can be used to implement custom decoders.  If ``object_hook``
    is also defined, the ``object_pairs_hook`` takes priority.

    ``parse_float``, if specified, will be called with the string
    of every JSON float to be decoded. By default this is equivalent to
    float(num_str). This can be used to use another datatype or parser
    for JSON floats (e.g. decimal.Decimal).

    ``parse_int``, if specified, will be called with the string
    of every JSON int to be decoded. By default this is equivalent to
    int(num_str). This can be used to use another datatype or parser
    for JSON integers (e.g. float).

    ``parse_constant``, if specified, will be called with one of the
    following strings: -Infinity, Infinity, NaN.
    This can be used to raise an exception if invalid JSON numbers
    are encountered.

    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
    kwarg; otherwise ``JSONDecoder`` is used.
    """
    if isinstance(s, str):
        if s.startswith('\ufeff'):
            raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)",
                                  s, 0)
    else:
        if not isinstance(s, (bytes, bytearray)):
          raise TypeError(f'the JSON object must be str, bytes or bytearray, '
                            f'not {s.__class__.__name__}')

E TypeError: the JSON object must be str, bytes or bytearray, not NoneType

C:\Program Files\Python310\lib\json_init_.py:339: TypeError
----------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\util\utils.py", line 132, in func_wrapper
return func(*args, **kwargs)
File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\app_fn.py", line 151, in scan_app_lib_fn
cached_steam_apps[app_id][mod.DLL_LOC_KEY_SELECTED] = cached_entry[mod.DLL_LOC_KEY_SELECTED]
KeyError: 'Usr_8997'
------------------------------------------------------------------------------------------------------------ Captured log call -------------------------------------------------------------------------------------------------------------
CRITICAL root:utils.py:99 File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\util\utils.py", line 132, in func_wrapper
return func(*args, **kwargs)
File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\app_fn.py", line 151, in scan_app_lib_fn
cached_steam_apps[app_id][mod.DLL_LOC_KEY_SELECTED] = cached_entry[mod.DLL_LOC_KEY_SELECTED]

CRITICAL root:utils.py:100 <class 'KeyError'>: 'Usr_8997'
============================================================================================================= warnings summary =============================================================================================================
..\app\util\utils.py:153
C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\util\utils.py:153: DeprecationWarning: invalid escape sequence '\D'
""" Create a Windows .lnk ShortCut file with powershell

..\app\valve\steam.py:33
C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\valve\steam.py:33: DeprecationWarning: invalid escape sequence '\V'
key = registry.OpenKey(registry.HKEY_CURRENT_USER, "Software\Valve\Steam")

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
========================================================================================================= short test summary info ==========================================================================================================
FAILED test_app/test_app_fn.py::test_scan_app_lib_fn[app_settings_old] - TypeError: the JSON object must be str, bytes or bytearray, not NoneType
FAILED test_app/test_app_fn.py::test_scan_app_lib_fn[app_settings] - TypeError: the JSON object must be str, bytes or bytearray, not NoneType
================================================================================================ 2 failed, 39 passed, 2 warnings in 14.11s =================================================================================================

(openvr_fsr_app-master-fkHXQenE) C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\tests>
(openvr_fsr_app-master-fkHXQenE) C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\tests>`

Is it because it can't get the proper path of my steam library folder for some reason, hence why the returned object is of NoneType?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants