Comments (3)
two additional options...
- would it be better/easier to have the first NUL of a string of bytestring not be made so important?
or - have the
bytesBuf_t
always 'self heal' and make it automatically have the correct length based on its content?
from irods_rule_engine_plugin_python.
bytesBuf_t
appears to already do the right thing, but the difficulty we have in the Python RE plugin is the inability to set its content (absent this modification) If we consider these two implementations of a rule to write from a local file into a data object (adapted from here ):
def py_obj_write_1(args,callback,rei):
dest_file = args[0]
with open('/tmp/file.tar.gz', 'rb') as file_:
binarycontent = (file_.read())
ret_val = callback.msiDataObjOpen(('objPath={}++++openFlags=O_WRONLY''O_CREAT''O_TRUNC').format( dest_file), 0)
f = ret_val['arguments'][1]
callback.msiDataObjWrite(f, binarycontent, len(binarycontent))
callback.msiDataObjClose(f, 0)
def py_obj_write_2(args,callback,rei):
dest_file = args[0]
with open('/tmp/file.tar.gz', 'rb') as file_:
binarycontent = (file_.read())
b = BytesBuf()
b.setbuf(binarycontent, len(binarycontent))
ret_val = callback.msiDataObjOpen(('objPath={}++++openFlags=O_WRONLY''O_CREAT''O_TRUNC').format( dest_file), 0)
f = ret_val['arguments'][1]
callback.msiDataObjWrite(f, b, b.len)
callback.msiDataObjClose(f, 0)
The first attempts the write with a string as the buffer, which Python can handle even with NULs, but the plugin seems to translate it as const char*
. So if there's a NUL in the string, then regardless of specifying the length param in the msiDataObjWrite
, the whole buffer never makes it into the microservice. The BytesBuf_t is the proper solution, but the Python plugin even in its latest release doesn't actually let you set the content; it only allows you to instantiate a blank object with no content.
from irods_rule_engine_plugin_python.
Right, so setbuf
appears to be the answer.
And the __del__
feels correct as well. The tests will let us know if it creates a double-free anywhere, but I'd be surprised.
from irods_rule_engine_plugin_python.
Related Issues (20)
- Add options to enable Address Sanitizer
- IrodsRunpathDefaults HOT 4
- import exifread error HOT 8
- Several `-Wmissing-field-initializers` warnings when building against 4.3.1 candidate HOT 1
- Rule engine plugin interface functions must not be visible outside of shared library
- build hook: use distro-provided CMake if present and newer than ours
- rocky9: enable CRB repo in plugin builder image HOT 1
- EL: investigate using epel-release from repos only HOT 1
- Test hook should only install the python REP from the packages directory
- Helpful addition to the README
- Document `print` behavior in python rules HOT 1
- Investigate drop-in replacement for GenQuery2-based genquery iterator
- global_vars should be available in imported modules HOT 14
- Deprecate implicit/magic import of `irods_types` or `irods_errors`
- Remove deprecated `global_vars` alias
- Add section to README explaining/demonstrating how to pass values back to the caller HOT 1
- Update README for the python interpreter HOT 1
- Possible to use different interpreters? HOT 5
- GeneralUpdate structs generate deprecation warnings during build
- Enable rule engine on Ubuntu 22 and IRODS 4.3.1 HOT 24
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from irods_rule_engine_plugin_python.