jpetrucciani / hubspot3

python3.6+ hubspot client based on hapipy, but modified to use the newer endpoints and non-legacy python
MIT License
147 stars 73 forks source link

CLI interface issue #42

Closed BernardBurke closed 5 years ago

BernardBurke commented 5 years ago

Jacobi,

Firstly, thank you (and other contributors) for this library.

I'm a bit new to python (despite many years as a developer - I'm old ;-) and thought this was a great opportunity to develop my python skills while working on a Hubspot integration project.

My first few attempts to query Hubspot have worked fine. As we are at the design state, I would be expecting to be trialing many different queries and updates, to clarify the approach we'll take to integrations.

I was particularly interested in the CLI approach for this.. Sadly, I haven't had a lot of success so far... and this could easily be a case of my inexperience and environment (I'm working in a WSL environment.. have access to many flavours of linux, but this is by far the most convenient in the workplace).

I believe I've followed the setup instructions correctly (but who isn't blind to a few mistakes)

I think it's the elegance of python-fire that's defeating me at the moment... or maybe understanding the implementation.

The very simple initial call via CLI is as follows: % hubspot3 --api-key="blahblah" contacts get-all

The innermost exception appears in main.py in _replace_stdin_token, which is executing a return with an uninitialized variable, new_args.

I believe this is because the following 'if' will only initialise new_args if stdin_indices or stdin_keys contain a value based on the value of STDIN_TOKEN

 if stdin_indices or stdin_keys:
        value = json.load(sys.stdin)
        new_args = list(args)
        for index in stdin_indices:
            new_args[index] = value
        for key in stdin_keys:
            kwargs[key] = value

--> return new_args, kwargs No matter what I've tried in terms of cli calls, I get an exception at the above line (here's the run time exception, I will add debug session below)

File "/home/ben/fishscaler/hubspot3/main.py", line 189, in _replace_stdin_token return new_args, kwargs UnboundLocalError: local variable 'new_args' referenced before assignment

Below is a debug session, where I think the only explanation is, both stdin_indices and stdin_keys aren't initialised with a value... and working back from there has defeated me so far.

Any light you can shed on this would be appreciated.

Here's my debug session, including a print(str(sys.argv)) ahead of the call to main()

/home/ben/fishscaler/cli.py(9)() -> if name == 'main': (Pdb) n /home/ben/fishscaler/cli.py(10)() -> sys.argv[0] = re.sub(r'(-script.pyw?|.exe)?$', '', sys.argv[0]) (Pdb) n /home/ben/fishscaler/cli.py(11)() -> print(str(sys.argv)) (Pdb) n ['cli.py', '--api-key=blahblah', 'contacts', 'get-all'] /home/ben/fishscaler/cli.py(12)() -> sys.exit(main()) (Pdb) s --Call-- /home/ben/fishscaler/hubspot3/main.py(231)main() -> def main(): (Pdb) c /home/ben/fishscaler/hubspot3/main.py(179)_replace_stdin_token() -> index for index, value in enumerate(args) if value == self.STDIN_TOKEN (Pdb) n /home/ben/fishscaler/hubspot3/main.py(181)_replace_stdin_token() -> stdin_keys = [key for key, value in kwargs.items() if value == self.STDIN_TOKEN] (Pdb) n /home/ben/fishscaler/hubspot3/main.py(182)_replace_stdin_token() -> if stdin_indices or stdin_keys: (Pdb) p str(stdin_indices) '[]' (Pdb) p stdin_indices '[]' .... my read on this is - these two empty lists will result in a return of uninitialised new_args

I'm afraid I'm getting lost in the ClientCLIWrapper and HubspotCLIWrapper calls..

Please excuse my lack of experience here... I'd really like to use hubspot3, and contribute if I can.

Thanks, Ben

W1ldPo1nter commented 5 years ago

Hi,

there was a change to the related code after the CLI was merged that broke this exact part (the required variable only exists if the if block was entered). I've already included a fix in my PR (#43) for the Ecommerce Bridge API endpoints.

If you would want to fix this for your local version, you can take a look at the relevant change.

In any other case, this should be fixed as soon as #43 was reviewed and merged.

jpetrucciani commented 5 years ago

Hey @BernardBurke !

Thank you for the kind words - also welcome to the python community!

@W1ldPo1nter thanks for the PR! I was just typing up a response here and a fix 😆 I'll review ASAP and get merged soon!

jpetrucciani commented 5 years ago

@BernardBurke Thanks for bringing up this issue!

@W1ldPo1nter Thanks again for catching my mistake here!

I've merged in #43, so this should now be fixed on version 3.2.17 on pip!

You can (depending on your environment) upgrade by running pip3 install hubspot3==3.2.17

I'll close this issue for now, but feel free to reopen it if you have any questions/comments/concerns!

BernardBurke commented 5 years ago

Folks - can I just say wow!! I wasn't expecting such a comprehensive an quite reply and fix!!

I'll take my time and try to grok all you're trying to do here - and then, see how I can contribute.