You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fixes, code enhancements
* remove lowercase call while parsing csv for adding users
* set user agent (#219)
* Add and clean up logging, always include version in logs (#234, #224)
* Encoding filter values to handle spaces and special chars in filters (#225)
* replace polling code with library call
* readme updates (#235)
* Read and warn when user sets thumbnail options. (including 'not yet implemented' message for --thumbnail-group)
* freeze tsc dependency (#248)
New functionality
* added new --filter option to pass in un-encoded value for simpler input
* Add --url, --include-all/--embedded-datasources for create/refresh/delete extract commands (#227)
* Add new command for listing content on the site (#230)
* Implement publishing options overwrite/append/replace arguments (including not-yet-implemented message for --replace) (#236)
* implement --proxy, --no-proxy, --use-certificate option (#241)
* add --token-file option (#243)
---------
Co-authored-by: Bhuvnesh Singh <[email protected]>
These instructions are for people who want to download the code and edit it directly. If you are interested in tabcmd but not the code, see [here](Readme.md).
17
+
####To work with tabcmd, you need to have **Python 3.7+** installed.
11
18
12
19
13
-
## Install tabcmd
14
-
These instructions are only necessary if you want to download the code and run it directly. If you are interested in tabcmd but not the code, see [here](Readme.md).
15
-
####To work with tabcmd, you need to have **Python 3.7+** installed.
20
+
## Contributing
16
21
17
-
###
22
+
Code contributions and improvements by the community are welcomed!
18
23
24
+
See the LICENSE file for current open-source licensing and use information.
19
25
26
+
Before we can accept pull requests from contributors, we require a signed [Contributor License Agreement (CLA)](http://tableau.github.io/contributing.html).
27
+
20
28
21
29
## Development
22
30
23
-
To work on the tabcmd code, use these scripts. On Windows,
31
+
### Dev scripts
32
+
To work on the tabcmd code, use these scripts.
24
33
_(note that running mypy and black is required for code being submitted to the repo)_
25
34
26
35
- build
@@ -38,42 +47,14 @@ _(note that running mypy and black is required for code being submitted to the r
38
47
- do test coverage calculation (https://coverage.readthedocs.io/en/6.3.2)
39
48
> bin/coverage.sh
40
49
41
-
- To trigger publishing to pypi tag a commit on main with 'pypi'. Versioning is done with
42
-
- setuptools_scm so it will be a x.y.dev0 pre-release version unless you first tag the
* Build on our existing Python [Tableau Server Client](https://github.com/tableau/server-client-python/)
65
55
66
56
67
-
## Contributing
68
-
69
-
Code contributions and improvements by the community are welcomed!
70
-
71
-
See the LICENSE file for current open-source licensing and use information.
72
-
73
-
Before we can accept pull requests from contributors, we require a signed [Contributor License Agreement (CLA)](http://tableau.github.io/contributing.html).
74
-
75
-
76
-
## Project structure
57
+
### Project structure
77
58
The core design principles for this app are
78
59
- it must provide the functionality of the instance of tabcmd, with drop-in replacement CLI options
79
60
- it should be able to call [tsc](https://github.com/tableau/server-client-python/) for all server actions
@@ -84,12 +65,43 @@ The core design principles for this app are
84
65
3. the 'commands' module contains the logic required to translate the tabcmd CLI interface into calls to tsc. This is completely dissociated from the parsers, and could theoretically be called from a completely different interface.
85
66
4. The 'execution' module is the core logic. TabcmdController gets an argparse parser, then attaches all the defined parsers to it and associates one command with each parser.
86
67
87
-
## To add a new command
68
+
###To add a new command
88
69
0. choose the single word that will be used as your command. Let's call this one `dream`
89
70
1. add parsers/dream_parser.py, and use methods from parent_parser to define the arguments
90
71
2. add commands/dreams/dream_command.py. It must have a method run_command.py(args) and the args object must contain all information needed from the user.
91
72
3. in map_of_parsers.py, add an entry for your new parser, like "dreams": DreamParser.dream_parser
92
73
4. in map_of_commands.py, add an entry for your new command, like "dream": ("dream", DreamCommand, "Think about picnics"),"
93
-
5. add tests!
74
+
5. add tests!
75
+
76
+
### Localization
77
+
78
+
Strings are stored in /tabcmd/locales/[language]/*.properties by id and referred to in code as
79
+
> string = _("string.id")
80
+
81
+
For runtime execution these files must be converted to .mo via .po
82
+
> doit mo
94
83
95
84
85
+
## Releases
86
+
To trigger publishing to pypi tag a commit on main with 'pypi'.
87
+
When pypi-release is done, begin the app smoke test action.
88
+
89
+
### Versioning
90
+
Versioning is done with setuptools_scm and based on git tags.
91
+
It will be a x.y.dev0 pre-release version except for commits with a new version tag. e.g
92
+
> git tag v2.0.4 && git push --tags
93
+
94
+
A new tag is created with the name of each release on github.
95
+
96
+
### Packaging
97
+
Before packaging, we produce a current metadata file to include in the bundle
98
+
> doit version
99
+
100
+
Packaging is done with pyinstaller, which will build an executable for the platform it runs on.
101
+
A github action runs on Mac, Windows and Linux to generate each executable.
102
+
103
+
> pyinstaller tabcmd-windows.spec ....
104
+
105
+
Packaging produces executables in the dist folder. To run:
0 commit comments