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

Initial stab at TWBX support #13

Closed
wants to merge 9 commits into from
Closed

Initial stab at TWBX support #13

wants to merge 9 commits into from

Conversation

t8y8
Copy link
Contributor

@t8y8 t8y8 commented May 25, 2016

  • Created a few utility functions for working with Tableau ZIP Files. Not sure where they should go long term, they're hanging out in the workbook module for now
  • Save and Save As are supported. There is probably a little more refactoring that can be done to remove duplication, but this is much better than the prototype :)
  • Tests added to verify actual saving and unpacking.

…t. I'm not sure where a lot of the zip stuff should go.
@@ -3,10 +3,57 @@
# Workbook - A class for writing Tableau workbook files
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lets talk at work. A twbx is much more than just the workbook and needs its own representation. With just the twb ... it is not so interesting or useful. While I admit that we only have the ability to edit the xml for twb right now, you could see people using this api to potentially one day create an extract using our Extract API, create a workbook and then package them up together. In this example, the packaging also affects the path specified in the connection string itself. Lets spend a bit more time talking about this. Thanks for getting it started though!!!

@t8y8 t8y8 mentioned this pull request Jun 28, 2016
@t8y8
Copy link
Contributor Author

t8y8 commented Jun 29, 2016

I've updated the PR against master, applies clean and passes tests.

@RussTheAerialist this is the PR I mentioned. I think it's still incomplete (I need to add tdsx support) and am open to better ideas on where to place the zip-handling code.

There's also Lee's (very valid) comments to address. Just wanted to get this working so others could pull the PR and play with it.

@@ -17,6 +19,8 @@
TABLEAU_CONNECTION_XML = ET.fromstring(
'''<connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''></connection>''')

TABLEAU_10_TWBX = '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'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we just move this to be an external file rather than continuing to encode it in the test file?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I may as well do that for all the tests while I'm there -- got a preference for how that folder structure should look? When I rebase it'll pick up your changes to the test module... maybe tests/assets/*.twb ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like that, so let's go with that.

@graysonarts
Copy link
Contributor

Can you resubmit this against the newly created development branch so that new features are not immediately added to master and master represents what is available on pypi (coming soon)

@t8y8 t8y8 mentioned this pull request Jun 29, 2016
@graysonarts
Copy link
Contributor

Closing this PR because it's superseded by #43

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

Successfully merging this pull request may close these issues.

3 participants