Need to support per API Log Filtering based on API Resource

Description
Currently we do not have the capability to enable per API Logging based on API Resource as well. We need to add an improvement to have this capability in the product.
As an additional requirement, the changes to this log configuration should be logged as audit logs. These audit logs should contain the timestamp, type of the event, subject identified (if applicable) and the outcome (Success / Failure).
Affected Component
APIM
Version
4.2.0
Related Issues
No response
Suggested Labels
No response

Update 2023-03-13
Understood the codebase and identified what methods need to be changed
Identified the logAPI method, which is used to print the logs
Changed the LoggingApiInput schema to include the resourceMethod and resourcePath keys in the devops-api.yaml
Changed the tenantLogsTenantIdApisApiIdPut to include the resourceMethod and resourcePath parameters

Update 2023-03-14
Identified that previously log info per API was added to the AM_API table.
But when we doing it for the resourceMethod and resourcePath level, it is not practical to add this the same AM_API table.
Therefore had a call to discuss this issue with Tharika and Arshadh.
We have decided to put the log info to the AM_API_URL_MAPPING table since it have HTTP_METHOD and URL_PATTERN columns.

Update (2023-03-17)
Added a new LOG_LEVEL column to AM_API_URL_MAPPING table to store the log status of the each resource and removed the LOG_LEVEL column from AM_API table.
Updated the SQL queries to support with the AM_API_URL_MAPPING table.
The problem with this approach is that

All the revisions that have the same resource ex: GET /menu will get the same log level defined by the user.
We can provide an option for the user in the request body to selectively revert all the previously applied log levels on other resources and keep the current log level on the current resource.
By default we will keep the previously applied log levels for the same API when logging is enabled for a specific resource.
In that case how do we handle the log levels of the newly created resources?

On 17 th I had a call with Arshash, Tharika and Dushani, We were decided to schedule a design review to talk about this issue.
I have created a design doc for this.

Update 2023-03-21
Had the design review today. At this meeting we finalyzed the DB design.
Attendees: Arshardh Ifthikar, Chamila Adhikarinayake, Isuru Udana, Nandika Jayawardana, Tharika Madurapperuma, Thilini Shanika
Meeting Notes

We should be able to use the Log_Level column in the AM_API table as well without removing it. Here we can check API level first and apply the highest out of the 2. Then no migration is required. This approach will be backward compatible. In the Gateway side we will have to keep 2 mappings in this case.
We need to check who will be doing the resolving if we move ahead with the above approach.
Url mappings also get applied to the products. Hence we need to check if anything breaks when products are used.

Update 2023-03-23
Changed the methods related to

Get log level details of APIs.
Get log level of an API.
Set log level of an API.

According to the suggestions given by the design review.

Now the first call will get results from both the tables  which are AM_API and AM_API_URL_MAPPING  and display a consolidated result for the user.
Second call will get results from both the tables display the most significant log level for the API.
Now by using the third call users can set the log level for the api level and for the api resource level as well as.

Update 2023-03-24

Fixed some bugs of the new implementation of the get log level of API rest API call.
Added to display only the significant resource log level for the API, and discard the insignificant log level lesser than the log level of the Api level.
Added the resourceMethod and resourcePath to the result when user is requesting to get log level info for the API.
Made the PR for the current work.

Update 2023-03-28

Fixed a unit test failure.
There is an integration test failure in the current work I've made, I have identified the reason for this and fixed it.
Identified that there needs to add the resourcePath and resourceMethod properties in the logAPI method in order to filter the logs according to resourcePath and resourceMethod.
Had a call Tharika how to add these properties.
We have identified that to get the log level per API it uses this rest api - "/api-logging-configs".
I have changed this rest api to get the resource Level and resource Path properties also.
Then we have Identified that getAPILogLevel() method, APILoggerManager class and getMatchingLogLevel() methods have to be changed in order to add these properties.
Today I have changed these methods.

Update 2023-03-30

Fixed some bugs of the current implementation
Added a way to get the resourceMethod and resourcePath In the getMatchingLogLevel() method
Added a method to choose the most significant log level from api level and resource level.
Added these current changes to the PR.
Currently the main implementation is almost done right now.
Small changes need to be done from tomorrow onwards.

Update 2023-04-05

Changed logResourceProperties inner class to properties hash map.
Added resource Method and resource Path to APIEvent class.
Changed RETRIEVE_ALL_PER_API_RESOURCE_LOGGING_SQL to return only the non revision APIs
Fixed some bugs in the implementation
Started out testing the implementation by giving out some scenarios.

Update 2023-04-07

Tested out some scenarios
In the testing I have found that /order/10 like queries do not match /order/{orderId}. Therefore I have added a regex matching to support these types of queries. This was added with the commit https://github.com/wso2/carbon-apimgt/pull/11946/commits/8496d758bc3f56d4b680f3c909b1842aa0534331.
Also in the testing I have found that when the user sets the log level per resource, and set another log level for the the same resource, after a small amount of time, the previous log level do not get changed. This was a bug and I fixed it with https://github.com/wso2/carbon-apimgt/pull/11946/commits/557a1d5062976b907ca3fa3bc979259c8d1287cc.

Update 2023-04-12

Tested out the whole scenario.
In the testing I have found that there are some null point exceptions happening in some of the flows. Today I've fixed those issues.
And in the regex matching I have found that it only matches /order/{orderId} if only orderId is in digits. If the orderId is like 24234-3423-4324-343, then it doesn't get matched and then it doesn't get filtered. This bug is fixed right now.
Also If the user sets the log level for an unavailable resource, there should be a validation to check this. I have added a validation method to set log level flow.

Update 2023-04-20
Had the code review on 18th, At this meeting I've showed a small demo of the implementation, and explained the codebase.
Tharindu mentioned that, in the getMatchingLogLevel method,
if (apiCtx.split("/", 3).length > 2) {
    apiResourcePath = apiCtx.split("/", 3)[2];
} else {
    apiResourcePath = "";
}

Needs to be changed, Since if the context contains forward slashes, then whole splitting process will get wronged.
Therefore I have changed this to
String apiResourcePath = ("/" + apiCtx).replaceAll(key.get("context"), "");

Like this.
And also Tharindu mentioned that it is not good to match resources using regex again in this method. Since regex matching is a very high CPU intensive task. Tharindu suggested to discuss this again in another meeting to find a solution to this.
resourcePathRegexPattern = logResourcePath.replace("/", "\\/");
                // Replace the curly braces with the given regex pattern
                resourcePathRegexPattern = resourcePathRegexPattern.replaceAll("\\{.*?\\}",
                        "\\\\w{0,}([-,_]?\\\\w{1,})+");

} else if ((apiResourcePath).matches(resourcePathRegexPattern)
                        && apiHttpMethod.equals(key.get("resourceMethod"))) {
                    resourceLogLevel = entry.getValue();
                }

We had another discussion  for this issue on 20th with Isuru Udana. Isuru mentioned that if we put a matching resource pattern property in a messageContext, then we can resolve this issue easily and it would be beneficial for future fixes as well.
For that he suggested to look in the synapse repo.
On 21st I am on leave, therefore in this week I am working in this solution.

Date: 23rd & 24th May 2023
Tasks:

[x] Read about the current implementation in documentation (https://apim.docs.wso2.com/en/latest/observe/api-manager/monitoring-api-logs/)
[x] Read the design document for the proposed implementation (https://docs.google.com/document/d/1dhFql5jRJLXYpNRa9BgcQaV3BZ0mnmam4-CHewtDiX8/edit?pli=1#)
[x] Went through the modifications done in the PR https://github.com/wso2/carbon-apimgt/pull/11961
[x] Had a discussion with the previous developer to get a knowledge transfer
[ ] Build carbon-apimgt from the branch with this fix (https://github.com/shnrndk/carbon-apimgt/tree/ResourceLevelLogfilteringCopy) (Note: Attempted and currently facing compilation issues)
[ ] Debug the product with the fix that is implemented
[ ] Watch available recordings regarding the development of the feature
[ ] Refer the synapse code for get an idea about the implementation to identify the API resource
[ ] Replace the implementation using regular expressions in the current fix using the approach in synapse

Date: 25th of May 2023
Completed watching both the available recordings (code review & discussion on implementation with synapse) for this feature. The pack was built (along with the benchmark test failure) and the current fix was debugged for the current version of the fix using the branch https://github.com/shnrndk/carbon-apimgt/tree/ResourceLevelLogfilteringCopy.

Update

Tested the flow of the current fix and the suggested fix in the code review and other discussions.

In the current implementation, resource-level log details are identified in the logs handler which is executed at first before creating the API object from the API class. When logs are enabled this is called in 4 instances; handleRequestInFlow, handleRequestOutFlow, handleResponseInFlow and handleResponseOutFlow. Here, in the implementation, the identification of the resource is happening as follows.

API context with the resource is identified using getTransportInURL()
Currently executing REST method is identified by getHTTPMethod ()
Then there is a loop to go through the entries for resources in log properties
From the recourses in log properties the resource path is identified and it is changed into a regex pattern
The above templated path will be compared with the resource path received from API context along with the comparison with the resource method.

In synapse, there is a comparison of resources happening using the findResource() method. Unlike to the approach above, this happens within process() method in the API class. By the time this happens, the message context is populated with the respective API object. Following is the flow here;

An API object is created using the createAPI method
Resources are added using addResource method from the OMElement
From this added recourses, acceptable resources are chosen with the condition isBound(r, synCtx) && r.canProcess(synCtx)
If there exists acceptable resources in the findResource method, matching is done. For this there exist three approaches; URITemplateBasedDispatcher, URLMappingBasedDispatcher, DefaultDispatcher

The difference between the two approaches are, considering where we are trying now to implement this solution, we do not have an API object when we execute the log handler. But in synapse, when it is doing the matching for resources, the API is already process and the object is there.
The class execution happens in the following order;

LogsHandler
API
CORSRequestHandler

Hence, in order to get a similar implementation here, we need to figure out a way to create an api object in the logs handler and then using that try to create similar methods to do the comparison.

Update

Implementation of a function to get the API object and do the resource matching in the LogsHandler

The API collection can be obtained from the message context using the synapse configuration. Using that, we can iterate through the api set to identify the API. In the below code, as for testing, the method identifyAPI() has been taken as it is from synapse.
Once an API is identified, the resources can be obtained from the selected api and then proceed with step 3 & 4 as in above.
messageContext.getEnvironment().getSynapseConfiguration().getAPIs();
selectedApi.getResources();
This approach cannot be directly implemented here since in identifyAPI(), the API is processed which is done in synapses not in the global handle. Hence for identification of the API a different approach is needed to be taken into consideration.
protected static void fetchLogLevel(MessageContext messageContext,
                                                Map<Map<String, String>, String> logProperties) {
        Collection<API> apiSet = messageContext.getEnvironment().getSynapseConfiguration().getAPIs();
        List<API> defaultStrategyApiSet = new ArrayList<API>(apiSet);
        List<API> duplicateApiSet = new ArrayList<API>(apiSet);
        API selectedApi = null;
        for (API api : duplicateApiSet) {
            if (identifyAPI(api, messageContext, defaultStrategyApiSet)) {
                selectedApi = api;
            }
        }
        String httpMethod = (String) ((Axis2MessageContext) messageContext).getAxis2MessageContext().
                getProperty(Constants.Configuration.HTTP_METHOD);
        org.apache.axis2.context.MessageContext axis2MC = ((Axis2MessageContext) messageContext)
                .getAxis2MessageContext();
        Map headers = (Map) axis2MC.getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
        String corsRequestMethod = (String) headers.get(APIConstants.CORSHeaders.ACCESS_CONTROL_REQUEST_METHOD);
        Resource selectedResource = null;

        if (selectedApi != null) {
            Resource[] allAPIResources = selectedApi.getResources();
            Set<Resource> acceptableResources = new LinkedHashSet<>();

            for (Resource resource : allAPIResources) {
                //If the requesting method is OPTIONS or if the Resource contains the requesting method
                if ((RESTConstants.METHOD_OPTIONS.equals(httpMethod) && resource.getMethods() != null &&
                        Arrays.asList(resource.getMethods()).contains(corsRequestMethod)) ||
                        (resource.getMethods() != null && Arrays.asList(resource.getMethods()).contains(httpMethod))) {
                    acceptableResources.add(resource);
                }
            }

            if (!acceptableResources.isEmpty()) {
                for (RESTDispatcher dispatcher : RESTUtils.getDispatchers()) {
                    Resource resource = dispatcher.findResource(messageContext, acceptableResources);
                    if (resource != null) {
                        selectedResource = resource;
                        break;
                    }
                }
            }
        }

    }

Update
Next Steps
Resource

[ ] Identify resources belonging to an API in the logshandler
[ ] From the resources in a selected API, match with loggable resources

APIs

[ ]  Identify the API invoked in the message context from the set of APIs

Update

Identification of resources was done using the same implementation as in synapse using the message context and the available resources. Here, to get the available resources, the API object is used to find all resources.

dispatcher.findResource(messageContext, acceptableResources);

Matching with the resource(s) in log properties is done by comparing the resource paths in the templatehelper and the resource path in the particular object within log properties. Before matching the paths, the method is matched using the API context to reduce computations.

apiHttpMethod.equals(key.get("resourceMethod")
templateHelper.getString().equals(key.get("resourcePath"));

Identification of the invoked API is done considering the API context received both from the TransportInURL and the API object. Since the TransportInURL includes the resource as well, it is checked whether that contains the API context in the object.

apiContext = ((Axis2MessageContext)messageContext).getAxis2MessageContext().getProperty("TransportInURL").toString();
apiContext.contains(api.getContext());

Using this approach allows to replace the IdentifyAPI() method which processes the API. However, dropping this method causes a java.lang.NullPointerException when the resources are being searched for REST methods that were not invoked.
ex: OPTIONS method run first when GET is called. And when resources are searched for OPTIONS, the following error happens.
[2023-06-06 16:59:03,543] ERROR - ServerWorker Error processing OPTIONS request for : /pizzashack/1.0.0/order/12345.
java.lang.NullPointerException: null
	at org.apache.synapse.commons.templates.uri.parser.Literal.match(Literal.java:46) ~[synapse-commons_4.0.0.wso2v20.jar:?]
	at org.apache.synapse.commons.templates.uri.parser.Node.matchAll(Node.java:48) ~[synapse-commons_4.0.0.wso2v20.jar:?]
	at org.apache.synapse.commons.templates.uri.URITemplate.matches(URITemplate.java:49) ~[synapse-commons_4.0.0.wso2v20.jar:?]
	at org.apache.synapse.api.dispatch.URITemplateBasedDispatcher.findResource(URITemplateBasedDispatcher.java:39) ~[synapse-core_4.0.0.wso2v20.jar:4.0.0-wso2v20]
	at org.wso2.carbon.apimgt.gateway.handlers.LogUtils.fetchLogLevel_aroundBody40(LogUtils.java:184) ~[org.wso2.carbon.apimgt.gateway_9.28.126.SNAPSHOT.jar:?]
	at org.wso2.carbon.apimgt.gateway.handlers.LogUtils.fetchLogLevel(LogUtils.java:1) ~[org.wso2.carbon.apimgt.gateway_9.28.126.SNAPSHOT.jar:?]
	at org.wso2.carbon.apimgt.gateway.handlers.LogsHandler.getAPILogLevel_aroundBody24(LogsHandler.java:307) ~[org.wso2.carbon.apimgt.gateway_9.28.126.SNAPSHOT.jar:?]
	at org.wso2.carbon.apimgt.gateway.handlers.LogsHandler.getAPILogLevel(LogsHandler.java:1) ~[org.wso2.carbon.apimgt.gateway_9.28.126.SNAPSHOT.jar:?]
	at org.wso2.carbon.apimgt.gateway.handlers.LogsHandler.handleRequestInFlow_aroundBody2(LogsHandler.java:88) ~[org.wso2.carbon.apimgt.gateway_9.28.126.SNAPSHOT.jar:?]
	at org.wso2.carbon.apimgt.gateway.handlers.LogsHandler.handleRequestInFlow(LogsHandler.java:1) ~[org.wso2.carbon.apimgt.gateway_9.28.126.SNAPSHOT.jar:?]
	at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.invokeHandlers(Axis2SynapseEnvironment.java:1178) ~[synapse-core_4.0.0.wso2v20.jar:4.0.0-wso2v20]
	at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:284) ~[synapse-core_4.0.0.wso2v20.jar:4.0.0-wso2v20]
	at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:101) ~[synapse-core_4.0.0.wso2v20.jar:4.0.0-wso2v20]
	at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) ~[axis2_1.6.1.wso2v83.jar:?]
	at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:379) ~[synapse-nhttp-transport_4.0.0.wso2v20.jar:?]
	at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:193) ~[synapse-nhttp-transport_4.0.0.wso2v20.jar:?]
	at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) ~[axis2_1.6.1.wso2v83.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
	at java.lang.Thread.run(Thread.java:829) [?:?]

Update
Current implementation to identify the resource
protected static void fetchLogLevel(MessageContext messageContext,
                                            Map<Map<String, String>, String> logProperties) {
    Collection<API> apiSet = messageContext.getEnvironment().getSynapseConfiguration().getAPIs();
    List<API> duplicateApiSet = new ArrayList<API>(apiSet);
    API selectedApi = null;
    String apiContext = ((Axis2MessageContext)messageContext).getAxis2MessageContext().
            getProperty("TransportInURL").toString();
    for (API api : duplicateApiSet) {
        if (apiContext.contains(api.getContext())) {
            selectedApi = api;
            //break;
        }
    }
    String httpMethod = (String) ((Axis2MessageContext) messageContext).getAxis2MessageContext().
            getProperty(Constants.Configuration.HTTP_METHOD);
    String apiHttpMethod = LogUtils.getHTTPMethod(messageContext);
    org.apache.axis2.context.MessageContext axis2MC = ((Axis2MessageContext) messageContext)
            .getAxis2MessageContext();
    Map headers = (Map) axis2MC.getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
    String corsRequestMethod = (String) headers.get(APIConstants.CORSHeaders.ACCESS_CONTROL_REQUEST_METHOD);
    if (selectedApi != null) {
        String path = ApiUtils.getFullRequestPath(messageContext);
        String subPath;
        VersionStrategy versionStrategy = new DefaultStrategy(selectedApi);
        if (versionStrategy.getVersionType().equals(VersionStrategyFactory.TYPE_URL)) {
            //for URL based
            //request --> http://{host:port}/context/version/path/to/resource
            subPath = path.substring(selectedApi.getContext().length() + versionStrategy.getVersion().length() + 1);
        } else {
            subPath = path.substring(selectedApi.getContext().length());
        }
        if ("".equals(subPath)) {
            subPath = "/";
        }
        messageContext.setProperty(RESTConstants.REST_SUB_REQUEST_PATH, subPath);
        Resource[] allAPIResources = selectedApi.getResources();
        Set<Resource> acceptableResources = new LinkedHashSet<>();
        for (Resource resource : allAPIResources) {
            //If the requesting method is OPTIONS or if the Resource contains the requesting method
            if ((RESTConstants.METHOD_OPTIONS.equals(httpMethod) && resource.getMethods() != null &&
                    Arrays.asList(resource.getMethods()).contains(corsRequestMethod)) ||
                    (resource.getMethods() != null && Arrays.asList(resource.getMethods()).contains(httpMethod))) {
                acceptableResources.add(resource);
            }
        }

        if (!acceptableResources.isEmpty()) {
            for (RESTDispatcher dispatcher : ApiUtils.getDispatchers()) {
                if (dispatcher instanceof URITemplateBasedDispatcher){
                    Resource selectedResource = dispatcher.findResource(messageContext, acceptableResources);
                    DispatcherHelper helper = selectedResource.getDispatcherHelper();
                    if (helper instanceof URITemplateHelper) {
                        URITemplateHelper templateHelper = (URITemplateHelper) helper;
                        for (Map.Entry<Map<String, String>, String> entry : logProperties.entrySet()) {
                            Map<String, String> key = entry.getKey();
                            if (apiHttpMethod.equals(key.get("resourceMethod"))){
                                boolean flag = templateHelper.getString().equals(key.get("resourcePath"));
                                System.out.println(flag);
                                String resourceLogLevel = entry.getValue();
                                String resourcePath = key.get("resourcePath");
                                String resourceMethod = key.get("resourceMethod");
                            }
                        }
                    }
                }
            }
        }
    }

}

Update
The following fixes were done

[x] Provided a fix to remove the regex matching and use the URITemplateHelper to find the resource path.
[x] Remove redundant methods used in LogUtils
[x] Provided an approach to find the invoked API from the collection of APIs using the API context and the message context
[x] Got rid of the invocation of findresouce method in CORSRequestHandler if the resource has been already identified in logshandler
[x] Formatted the code and added comments

Update

[x] Added the following Util methods in Utils.java (carbon-apimgt)

getAPIByContext -> selecting the invoked API from the collection of APIs using the message context and synapse configuration.

getAcceptableResources -> this method is specific to how the acceptable resources were handled in CORSRequestHandler. this will match the request methods and resource methods to select the set of resources for the specific API.

getSelectedResource -> this method is specific to the CORSRequestHandler when a resource is already identified as a selected resource. this method checks whether the selected resource can be considered as part of the list of resources in the invoked API and the executing rest method.

[x] Added the following Util methods in APIUtils.java & API. java (synapse)

getAcceptableResources -> synapse implementation to get the acceptable resources from the resource map based on the request and resource methods.

getResourcesMap -> getting a map of the resources of the invoked API to selected the acceptable resource when getAcceptableResources from synapse is used.

identifySelectedAPI -> this method is extracted from identifyAPI method without processing the API to find the invoked API at the global handler.

getSelectedAPI -> synapse implementation of finding the executing API (this can identify defaultStrategyApiSet too)

[x] Developed and tested three different ways to find the invoked API at the global handler

using getAPIByContext util in Utils.java with apiContext.contains(api.getContext())

using getAPIByContext util in Utils.java with ApiUtils.matchApiPath(requestPath, api.getContext())

using getSelectedAPI & identifySelectedAPI in APIUtils.java from synapse side

Note:
API Resource Log Filtering happens at the global handler through the getAPILogLevel() method in the LogsHandler class. When this method is called, we are yet to process both the API and the Resouces, which is done by the process() method in the API class in the synapse. Hence, many parameters in the message context are not set/configured at this moment.
In order to do log filtering for resources, first we need to identify the resource based on the information available in the message context. In order to get that specific information needed to identify the resource, we need to find the specific API that has been invoked from the collection of the APIs. To do that, we can use the identifyAPI() method from AbstractApiHandler class in wso2-synapse.
Once both the API and the resource has been identified, it will be matched with the map of resources in logProperties to log the resource based on both resource name and resource method. This will be done for handleRequestInFlow, handleRequestOutFlow, handleResponseInFlow and handleResponseOutFlow.
To find the resource, we use findResouce methods from wso2-synapse. When running this method, it was modified to set the selected object to the message context to reduce repetitive executions of the methods in instances such as CORSRequestHandler, etc. The resource path is matched using the dispatcher helper logic. -> helper.getString().equals(key.get("resourcePath")
To find the API, we can use multiple options. One option is the match the API context path by matching the URL that can be obtained from axis2MsgContext.getProperty("TransportInURL") and the inbuild getContext() method of the API. Another approach is to match the API context using the inbuild getConext() method of the API and the matchApiPath() method from ApiUtils in synaspe.
Yet, we have a specific method in synapse to find the API, called identifyAPI() method. The current approach was developed by getting the necessary parts from that method and dispatchToAPI () method to come up with new methods called getSelectedAPI() and identifySelectedAPI (). However, all these happen before the API is being processed at the global handler.
Hence, when the API is processed the same code segment is called in the identifyAPI() method. Yet, since process() method is written inside this method, we cannot call this method in the global handler. Hence we have to study dispatchToAPI(), identifyAPI(), canProcess() and process() methods and refactor the methods in a way where we can isolate identifying an API and processing an API.

Update 05/07/2023
I have started to work on this feature on 29/07/2023. Had a call with Chamika to get an idea on how to refactor the identifyAPI by isolating the logic on identifying API.
I have refactored the identifyAPI method by introducing getIdentifiedApi() method. Since getIdentifiedApi() required two parameters, which is api Object, and the synctx, To call in the canProcess method, I had to pass the api Object to canProcess as an additional parameter. By doing so, I had to create another canProcess(MessageContext synCtx, API api) method.
Had a call with arshadh, and he suggested to use only the original canProcess method and remove the newly introduced canProcess method.
There was another problem occured, after the refactoring, the
requestPath = fullRequestPath.substring(apiContext.length(), fullRequestPath.length());  line in APIKeyValidator Class occures null pointer exception. This is because after introducing the RESTConstants.REST_FULL_REQUEST_PATH property in the getIdentified() method. The property gets deleted in the DefaultAPIHandler class by the line
messageContext.getPropertyKeySet().remove(RESTConstants.REST_FULL_REQUEST_PATH);
This issue was only occured when the logging enabled flow.  And in the normal flow without enabling the logging, there was a method I have added in the
       if (synCtx.getProperty(RESTConstants.IDENTIFIED_API) == null) {
            ApiUtils.getIdentifiedApi(this.getContext(),this.getVersionStrategy(), synCtx);
       }

Setting up the RESTConstants.REST_FULL_REQUEST_PATH property is happening inside the ApiUtils.getFullRequestPath(synCtx) which is located inside the getIdentifiedApi method.;.
Since in the logging enabled flow, synCtx.getProperty(RESTConstants.IDENTIFIED_API) is not null since it identifies the api at the first, therefore ApiUtils.getFullRequestPath(synCtx) is not called again. Therefore arshadh suggested to introduce an else part to the previous if statement.
        if (synCtx.getProperty(RESTConstants.IDENTIFIED_API) == null) {
            ApiUtils.getIdentifiedApi(this.getContext(),this.getVersionStrategy(), synCtx);
        } else {
            ApiUtils.getFullRequestPath(synCtx);
        }

As per the suggestions I have modified the if condition and the I have reduced the canProcess to the original method only.

Update 18/07/2023

Done the refactoring part of the synapse.
In 10/07/2023 Had a code review with isuru udana, arshadh and chamika to review the refactoring part of the api identification in synapse.
At this code review, Isuru mentioned to refactor the identifyApi method by adding the identify_api flag checking to method.
Last week I had completed this task.
There are two unit test failures because of this fix in the CORSRequestHandlerTestCase.testHandleRequest() method. This was happened due to getAcceptableResources(Resource[] allAPIResources, String httpMethod, String corsRequestMethod)  hasn't mocked yet.
For that I have mocked this method.
Now the task is almost finished and PRs have been made.
There is a test failure in the integration tests - APILoggingTest.testAPIPerAPILoggingTestcase
Currenlty I am looking to change the APILoggingTest.testAPIPerAPILoggingTestcase according to the implemented feature.

Update 24/07/2023

I have identified there was api invoking failure when logs enabled, in the integration tests. These the bugs I have identified which was occured this issue.
Fixed a bug in the synapse side. After the new implementation once the api is identified, in the dipsatchToApi() method do not try to identify the api again. This is done by setting up new system property called IDENTIFIED_API. By checking this property is not null, we can identify the api is identified or not. But in the normal behaviour after processing the api, there is another checking for the apis from the defaultStrategyApiSet. For that checking, previously added system property affecting and it will cause to disrupt the normal behaviour, therefore after normal identification, I have added this condition to remove the property for further processing.

        if(synCtx.getProperty(RESTConstants.IDENTIFIED_API) != null) {
            synCtx.getPropertyKeySet().remove(RESTConstants.IDENTIFIED_API);
        }

Also there was another bug in the carbon side. When there are multiple APIs available, if the user enables api logging for only a particular api, it does enables the logging for every other variable. This was fixed by adding the below if condition to compare the contexts.

       if(selectedApi.getContext().equals(key.get("context"))) {}

After fixing those bugs, the integration tests related to api logging are passing without issues. Currently I am writing a new integration test related to resource level api logging.

Update 31/07/2023

Added an Integration test case for the resource level log filtering feature.
Changed the existing test case to support the new resource level log filtering feature.
Made the 3 PRs for this feature.
Carbon PR: https://github.com/wso2/carbon-apimgt/pull/12106
Synapase PR:https://github.com/wso2/wso2-synapse/pull/2083
Test PR: https://github.com/wso2/product-apim/pull/13260
Tested the logging flows.

Closing as the task is completed.


Fix Jaeger-native tracing example.

Signed-off-by: Ryan Burn<EMAIL_ADDRESS>Description: Fixes Jaeger-native tracing example
Risk Level: Low
Merely bumps the version of Jaeger so that it's compatible with the current version of Envoy.

Can I get a bit more detail on what changed that broke this?  Should we have some sort of regression test or documentation that compatibility is best-effort?

Sure. The Jaeger tracing library is loaded in dynamically and interacted with through the OpenTracing interface.
If the ABIs don't match for the versions of OpenTracing that Jaeger and Envoy were built against, then the example will break, which is what happened in this case.
I would make compatibility best effort since there's no guarantee that Jaeger will have a releases to match the latest ABI version of the OpenTracing library.
But we'll try not to make breaking changes to the OpenTracing ABI very often so that we don't run into incompatibilities like this.


prefix 'b' of bytes is not highlighting in the editor window

Description
What steps will reproduce the problem?
when inputting the bytes-type string in the editor window, the prefix 'b' is not highlighting with the same color of string.
What is the expected output? What do you see instead?
Please provide any additional information below
Version and main components

Spyder Version: 3.2.0
Python Version: 3.6.1
Qt Versions: 5.6.2, PyQt5 5.6 on Windows

Dependencies
pyflakes >=0.6.0 :  1.5.0 (OK)
pycodestyle >=2.3:  2.3.1 (OK)
pygments >=2.0   :  2.2.0 (OK)
pandas >=0.13.1  :  0.20.1 (OK)
numpy >=1.7      :  1.12.1 (OK)
sphinx >=0.6.6   :  1.6.3 (OK)
rope >=0.9.4     :  0.10.5 (OK)
jedi >=0.9.0     :  0.10.2 (OK)
nbconvert >=4.0  :  5.2.1 (OK)
sympy >=0.7.3    :  1.0 (OK)
cython >=0.21    :  0.25.2 (OK)
qtconsole >=4.2.0:  4.3.0 (OK)
IPython >=4.0    :  5.3.0 (OK)
pylint >=0.25    :  1.7.2 (OK)

@fanstvn could you add a screenshot?

I don't think we're going to address this, but pull requests are welcome.

@ccordoba12 I think it should be fairly simple? also we should add f strings, no?


std.file: -dip1000

@thewilsonator is the ci/circleci failure (undefined reference to a symbol) also a symptom of linking to a previous Phobos, like the last buildkite/phobos one was?

CircleCI seems to fail due to stale libs.

So pull anyway?

Ye, we can always revert if need be. (CircleCI is required, so I can't do it).

CircleCI seems to fail due to stale libs.

Nope no caches there. It's just the typical annoyance of -dip1000 changing the mangling and now some modules are compiled with -dip1000, some aren't and thus it fails when trying to do single module unittest builds. This could possibly vanish if all these dip1000 PRs are in, but then again this entire exercise is pretty pointless as long as we still have the mangling problem which is what the CI was saying very loudly until it was for force-merged.

Ye, we can always revert if need be. (CircleCI is required, so I can't do it).

not cool, not cool at all.
Master is still failing because of this: https://circleci.com/gh/dlang/phobos/9535


Outdated documentation

There is no such option as Single Sign On in azure ad now. Atleast not in my directory.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: f97b43d9-4a25-1552-c719-f0f0b418b0a8
Version Independent ID: 13445782-bdb8-b9fa-b130-630bb770187c
Content
Content Source
Service: active-directory

@Rachitgupta1994  Thanks for the feedback, we started investigating the issue.

@Rachitgupta1994 As already mentioned in the document that this article applies particularly to apps that were added from the Azure Active Directory application gallery. If you have non-gallery application please check this - https://docs.microsoft.com/en-us/azure/active-directory/active-directory-appssoaccess-whatis#application-not-in-the-gallery

The link you shared is outdated as well. It shows steps for old portal, which no longer exists. What i exactly need is to protect a SAML based app using Azure AD. I knew how to do this using old portal, but not in new one. Kindly point me to the steps that will help in configuring the same with the new portal.

@Rachitgupta1994 thanks for the update, I'll assign the feedback to the author to update or make changes to both mentioned articles.

#in-process Looking this over. The author is now Markus Vilcinskas. I'll bring it to his attention also.

Hi @Rachitgupta1994 ,
It looks like you might find what you need if you start at https://docs.microsoft.com/azure/active-directory/, then in the navigation select Manage apps > Manage enterprise apps > Manage single sign-on for enterprise apps. Let me know if this has what you need.

@MarkusVi @Rachitgupta1994
Rachit, the URL is https://docs.microsoft.com/en-us/azure/active-directory/active-directory-enterprise-apps-manage-sso. the SSO menu item appears only at the individual app level now, so either creating one or modifying one.
Markus, can you add yourself as author to this article?

@MarkusVi @Rachitgupta1994
Any comments, gentlemen?

Hi,
Thanks for your responses gentlemen. I have got what I needed. For the
single sign on option to appear, we have to add a non gallery application
from the enterprise apps. This option doesn't appear for apps which we
added as we are developing.
However, this should be clearly mentioned in the docs. Request you to
include the same.
Regards,
Rachit
On Sat, Mar 10, 2018, 04:02 Curtis Love<EMAIL_ADDRESS>wrote:

@MarkusVi https://github.com/markusvi @Rachitgupta1994
https://github.com/rachitgupta1994
Any comments, gentlemen?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/MicrosoftDocs/azure-docs/issues/5147#issuecomment-371964226,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ADKlshctwPFGMEgdY0BnoDsYhQNGgp-uks5tcwLigaJpZM4SXzJP
.

Hi @Rachitgupta1994,
We have added this work to our back log and will add it as soon as possible. Glad you came to a solution and thanks for your help!
@Adam-Smith-MSFT, can you label this resolved?

thanks. The quality of support recieved is very good. Earlier, it seemed that no one cared about what we commented. But now it's feeling that MS is taking our words seriously.

Hi, we have the same issue, the Single Sign link appear 2 secondes and disappears after we add our developed app.
PS : we don't have the AD azur premium.


insertUnorderedList command generates additional span tags

When I select text and click on "li" button and I see additional text styles being added.
Looks like text styles being copied from previous paragraph into the list as span. This can be reproduced on the latest master 0.5.5 or Github Editor Demo

asfasdfsdaf

There are couple of Chromium tickets, I can reproduce this in Chrome, Safari on OSX 10.11
Are there to further process the outout?

https://code.google.com/p/chromium/issues/detail?id=149901
https://code.google.com/p/chromium/issues/detail?id=137466


Disallow tenant tag override with upsert tables

Disallows using tenant tag override with upsert enabled tables that can cause wrong results if segments belonging to a given partition are moved to a different server.

Codecov Report

Merging #11468 (6f63c55) into master (f14700a) will decrease coverage by 48.50%.
Report is 1 commits behind head on master.
The diff coverage is 0.00%.

@@              Coverage Diff              @@
##             master   #11468       +/-   ##
=============================================
- Coverage     62.92%   14.43%   -48.50%
+ Complexity     1108      201      -907
=============================================
  Files          2318     2318
  Lines        124328   124327        -1
  Branches      18980    18981        +1
=============================================
- Hits          78234    17942    -60292
- Misses        40539   104868    +64329
+ Partials       5555     1517     -4038

Flag
Coverage Δ

integration
?

integration1
?

integration2
?

java-11
?

java-17
14.43% <0.00%> (-48.35%)
:arrow_down:

java-20
?

temurin
14.43% <0.00%> (-48.50%)
:arrow_down:

unittests
14.43% <0.00%> (-48.49%)
:arrow_down:

unittests1
?

unittests2
14.43% <0.00%> (-0.01%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Files Changed
Coverage Δ

...he/pinot/segment/local/utils/TableConfigUtils.java
0.00% <0.00%> (-70.66%)
:arrow_down:

... and 1489 files with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Migrate to CE3

@majk-p thanks for your commit, and sorry for the delayed response.
Are you around for making changes? Would you be willing to help with other CE 3 tasks as well?
Unfortunately, the changes for CE 3 are more complicated than this, but this PR is a great start.

No worries @alexandru, initially I just wanted FutureLift and CircutBreaker as mentioned in this issue https://github.com/monix/monix/issues/1502#issuecomment-1039940726. Considering the response by @Daenyth, are those still in scope?
I'm happy to help migrate monix to CE3, though I've almost no knowledge of its internals, I'd just learn by doing, so I wouldn't feel confident driving the whole thing. If you feel like this is a good starting point, I'm fine with making it monix:ce3-wip or alike if you feel like it's the right thing.


Update sbt, scripted-plugin to 1.10.3

About this PR
📦 Updates

org.scala-sbt:sbt
org.scala-sbt:scripted-plugin

from 1.9.9 to 1.10.3
📜 GitHub Release Notes - Version Diff
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "org.scala-sbt" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "org.scala-sbt" }
}]

labels: library-update, early-semver-minor, semver-spec-minor, version-scheme:early-semver, commit-count:1

Superseded by #520.


fix: rebase conflicts

Resolved rebase conflicts
closes #15

Thanks for reminding, I've just rebased.


Use BillableSize for fees so that we can use use UTXO's to adjust fees.

Finish https://reviews.bitcoinabc.org/D1927 and land it on this repository. This will enable us to use more complicated fee calculations to ensure people don't bloat the UTXO set when spamming.

Kicking out of MVP milestone. This can be added later. Although the patches exist.


Resolves duplicate error message and no trailing newline

This PR:

closes #120
closes #83

Missing a trailing newline test?

Ah forgot to add a test for this indeed, will look into this.


cache disabled

Everything used to work, and all of a sudden it no longer exports.  I tried changing the setting to idle, on-change and it does not work.  Every time I add a new reference I have to manually go to the screen and click export now.
My OS is Mac Catalina 10.15.7
Support log ID: FX7MH8QV-refs-euc

new ID: 38CJJKDU-refs-euc
I also sud grep to find the entry and it's not there.  For whatever reason is no longer exports.  I have to manually do it every-time I add a new record to zotero.

Can you generate a new log from 2059?

Just tested by adding a new record with 2059 and still not in the file.  Even modified after adding to zotero.
id: 32GCK73Y-refs-euc

these aren't fixes, they just add diagnostic logging. Can you generate a new log from 2061?

ID: 2Y4CCILJ-refs-euc

Can you choose "Restart with debugging enabled" from the help menu, reproduce the problem, and send a new log?

Same again please, restart with debugging enabled after installation, reproduce, new log

New ID for 2062: WGF2GQS4-refs-euc

New ID for 2062: WGF2GQS4-refs-euc

ID: JLEE74I9-refs-euc

Any update?  Did you receive my last ID?

No, and yes, respectively. I've been swamped the last few days.

Still only for diagnosis, so a new log please.

ID: 42QFT77I-refs-euc

Still only for diagnosis, so new log again please.

ID: P84GJMH3-refs-euc

ID: P84GJMH3-refs-euc

And again

Support Log ID: NMHNSVP4-refs-euc

Errrr... just to check, you are aware you have your autoExportDelay set to 6493 seconds (approx 108 minutes)?

https://retorque.re/zotero-better-bibtex/installation/preferences/hidden-preferences/#autoexportdelay

What should I set it to try and resolve the issue?

You can right-click and reset it and it will be reset to the default of 5 seconds.

Ok, done.  Will that fix it?  And thank you for all the help.

Ok, done.  Will that fix it?

You tell me.

I am testing now and it seems to work.  I had to move it to 60 seconds . Reason is at 5, I have a large library over 4K and the CPU heats and the fans kick on hard.  I am on a mac.  But, seems to have fixed it.  Should I continue to use the version 2078?  Thank you again.

You can keep using 2078 or manually revert to 6.2.5. 2078 is just 6.2.5 plus extra logging. Either one will automatically be updated when a new version comes out.
4k is not so large that it should be a problem though. With your settings, everything should be cached. If you manually export your library twice, how long does the 2nd export take?

About 15 seconds and it's say 0% cached.  The first time took about 45 seconds.

That could be explained by the serialization cache getting filled but not the output cache. We can look into that if you want. The output cache should get filled with your settings.

Support Log Id: 5BAZTPTD-refs-apse

Log Id:  WZB66BCR-refs-euc

You have caching turned off. Please go into BBT prefs -> export -> misc and turn it back on. It is on by default.

Do you want me to run another test?

Sure, but the most important thing is whether it is now faster after the cache has filled. A log will they me that, but it should be noticeably faster.

It started again.  After a new update to Zotero, it broke. Support Log ID: DPD35TDH-refs-euc

What broke? There is no error in DPD35TDH-refs-euc.

you still have caching off BTW.

It's the same issue as before. It won't auto export after the update to Zotero. I did not change any settings once we had it working. Where can I turn the cache back on? I noticed it changed the auto export again from the 60 ms we set.

It's the same issue as before. It won't auto export after the update to Zotero.

If you say something is broken, it is not the same. Auto-export worked when you first reported the issue, you just had a very, very long delay set (which I didn't think to check when you reported it, which is my bad). Auto-export worked as intended. Aside that, there was one thing that actually was broken, which was caching. So when you said "it broke", I didn't know what you mean.

Where can I turn the cache back on?

Export - Misc - Enable caching for background exports.
I don't know what keeps resetting your preferences. To be clear, the way I see it, nothing was broken but the caching, and there's something that meddles with your settings.

I noticed it changed the auto export again from the 60 ms we set.

60 seconds more likely, but you currently have it set to 120, which is two minutes. Do auto-exports start if you wait two minutes?

Sorry for the confusion. My bad. A while back ago, I accidentally installed the beta version of Zotero. And I do not know how to get back to the stable release without losing everything. I wonder if every time an update installs via beta it changes things?
I just turned on the cache.  I will be doing research later today and I will let you know if runs. I thought the time was milliseconds also.  Sorry.  I'll set it to one minute and see how it goes.  Will keep you informed. Thank. you again for all your help, I appreciate it a ton.

And I do not know how to get back to the stable release without losing everything.

I don't think this is possible. But I'm seeing steady recommendations to just stay on the beta, as it's stable, and the release will be out soon.

I just turned on the cache. I will be doing research later today and I will let you know if runs. I thought the time was milliseconds also. Sorry. I'll set it to one minute and see how it goes. Will keep you informed. Thank. you again for all your help, I appreciate it a ton.

You are very much welcome. Don't read too much into my earlier lecturing, I have autism and tend to explain things in great detail even when not really needed, which sometimes comes across as berating. This is not my intent.


feat: make heap profiling as default

Sometimes, we need to analyze the memory usage of workers or controllers, and pprof is a very useful tool for this. I believe it should be included as a default feature rather than an optional compile-time setting. Additionally, it doesn't make much sense to expose an HTTP route if it can't be utilized effectively (i.g: #764 ).

I think it would be good to disable the HTTP route if profiling isn't enabled, or return a more helpful error there. Also adding it as an option to the Dockerfile makes sense, although we probably wouldn't want it enabled by default.


AI Project

Hey Collin. I would like to ask if i can use this library to an app that will do this thing: You take a picture of a fruit with your camera and then the app give you results some of the recipes you can make with this fruit! Can i achieve this with this library? If not what should i use to achieve this result? Thanks in advance.

Hey!
Even though I am not Collin, I will still probably able to help you :)
When you are developing like this, we have to always break it into subproblems. For this very vague description, you would have 2 main areas that you would have to solve:

Take picture and recognize that there is apple there
Get apple [or any other fruit] receipts

Now, the first one is solvable through this library - you would need the backpropagation network where you would feed thousands of pictures of apples and (different fruits) and say this is "apple", this is "pear" - that is your training group. When your network is sufficiently trained, you would then feed it with your taken picture and expect one of the outputs (or none of them) as key characterizing the fruit [apple, pear, ..].
For the second problem, you would have to have a database where you would just send that key and it would return you the variations.
Hope it helps!

Thanks a lot Jiri. Indeed that help a lot :D

@JiriTrecak that's a good explanation. Thanks!


loki: 2.5.0 -> 2.6.0

Description of changes
upstream update with bugfixes and perf improvements
Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
22.11 Release Notes (or backporting 22.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

This is just a simple update, so I won't wait before merging, but happy to take care of any feedback if there is any.


Add species.lifespan.sp for Seriola dumerili (FishBase ID: 1005) to fishbase

In #73, @agruss2 expected 15 for the Amerjack group sp0. Also, you mentioned, none of the three Amberjacks have a reported lifespan in the fishbase table species in column LongevityWild according to the fishbase api. This is why the configuration api picks the default value from fishbase-mapping.csv and injected the line: species.lifespan.sp0;0 into osm_params-species.csv .
@agruss2 please let me know where to find the expected value "15" for the amberjack lifespan.

@jhpoelen
I found a lifespan of 15 years for amberjacks (more precisely for greater amberjack (Seriola dumerili), which is the reference species of the amberjacks group) in Murie and Parkyn (2008); I am attaching the paper here.

If you pack the paper in a zip file, you should be able to upload it.
Since the fishbase api does not yet provide access to the lifespan you found in the Murie and Parkyn (2008) paper (e.g. see https://fishbase.ropensci.org/species?SpecCode=1005), I've assigned this issue to @FIN-JBarile @Dengaloo. I hope that  they can review the paper, add the lifespan to fishbase and propagate the value to be included in the fishbase api.
As far as I can tell the configuration api is working as expected and you'd like to add more data to fishbase. This is why I change to title to Add lifespan ....

@jhpoelen This is excellent; many thanks. Murie and Parkyn (2008) is attached here.
It seems that this project will also help us to identify some information gaps in FishBase/SeaLifeBase, which @Dengaloo and @FIN-JBarile will be able to fill provided that we point them to relevant papers/reports/websites; nice !
Murie and Parkyn (2008).zip

Data being encoded and will be made available in next online update.

I tested the UI today. The desired parameter estimate is now provided by the bridge. Therefore, I am deciding to close the present issue today.


Update nicegui to 2.3.0

Nicegui 2.3.0 improves On-Air functionality in https://github.com/zauberzeug/nicegui/pull/3798, which is quite useful for our robots.
I just ran poetry update nicegui, should we update all dependencies?

@pascalzauberzeug the lock file is only relevant for the docker container. To update the dependency requirement for the pip package the pyroject.toml must be edited. See my commit 4e141b6.


Update gradle wrapper, Android gradle plugin

Is needed by https://github.com/Keypr/kaos-map/pull/84
cc @roman-mazur @Vandalko

Bot, test this please

👍


Update Composer dependencies (2021-07-04-00-09)

Visual regression test passed!
View the visual regression test report


Improve performance

Very small change, but huge performance improvement in this PR.
Two changes:

Use angular AOT compiler improves processing performance greatly on front-end
The angular static output is very large (The main.f361828dc635e1980674.js ~3.75 MB). Using gzip to serve static files reduces this file from 3.75 MB to 866 KB.

I also changed the base path of the static files to be "." (current working directory). This uses the current working directory instead of the location of the binary to determine room path. This helps when an IDE runs your binary in a temp folder, but shouldn't break anything.

BTW, the gzip will only affect CF and AIO deployments.. May be useful to check if this is already being done in other deployment modes


Feature/ci 1.1.x 2

Description
Test travis CI

Codecov Report

Merging #681 into 1.1.x will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##              1.1.x     #681   +/-   ##
=========================================
  Coverage     55.74%   55.74%
  Complexity      750      750
=========================================
  Files           181      181
  Lines          3157     3157
  Branches        226      226
=========================================
  Hits           1760     1760
  Misses         1267     1267
  Partials        130      130

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 12d073b...c843f1d. Read the comment docs.


[cfe] Parsing e<T1> is T2

Cf. https://github.com/dart-lang/co19/blob/aff1a334d7875e465c2f43e1b38774512fbb4ba4/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart, the CFE parser reports several errors when it encounters an explicit tearoff followed by is:
tests/co19/src/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart:27:31: Error: A comparison expression can't be an operand of another comparison expression.
Try putting parentheses around one of the comparisons.
  Expect.isTrue((C.constr)<int> is C Function<T extends int>(T));
                              ^
tests/co19/src/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart:27:33: Error: Expected an identifier, but got 'is'.
Try inserting an identifier before 'is'.
  Expect.isTrue((C.constr)<int> is C Function<T extends int>(T));
                                ^^
tests/co19/src/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart:27:27: Error: The operator '<' isn't defined for the class 'C<T> Function<T>(T)'.
 - 'C' is from 'tests/co19/src/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart'.
Try correcting the operator to an existing operator, or defining a '<' operator.
  Expect.isTrue((C.constr)<int> is C Function<T extends int>(T));
                          ^

However, I believe that there is no way a syntactically correct program could have the token > followed by is unless that > is the end of a <typeArguments> term, and I believe this implies that is can be treated like the disambiguation tokens (( ) ] } : ; , . ? == != .. ?. ?? ?.. & | ^ + * % / ~/), such that the constructs in this test will parse successfully, even though the construct with is aren't ambiguous. So when we see is, we decide that (C.constr)<int> is derived from <primary><selector>.

@stereotype441 Could you take a look at this?

A similar situation arises in co19/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t02.

Sure, adding is to the list of tokens that cause < to be treated as starting a list of type arguments should be straightforward, and I'm glad to do it.  I think we should add as too.  I can also take responsibility for updating the feature specification.
@lrhn does this sound reasonable to you?

Since is is a reserved word, I think it should be safe to make it a stop-word for >.
I'd prefer if we could also make as one, but that is very hypothetically breaking since it's not a reserved word, making the following valid Dart:
class C {
  int get as => 42;
  void test() {
    var x = g(f<int, int> as);
    print(x);
  }
}
void main() {
  C().test(); // Prints "37 - 87"
}
g(a, [b = "absent"]) => "$a - $b";
f<S, T>() {}
extension on Function {
  operator <(_) => 37;
}
extension on Type {
  operator >(_) => 87;
}

If anyone actually writes that code, I'd be happy to see it start failing, so maybe we should also use as as a delimitwr token.

@lrhn Sounds good to me.  I'll work on a fix.


Does this only work with organization projects?

I noticed in the readme that you have a parameter organization. I wanted to use this for a personal project board I had, which is not under any org. When unspecified, it defaults to my username (cp2004) however the action seems to fail.
The error also seems to indicate organization-only:

gh: Could not resolve to an Organization with the login of 'cp2004'.

https://github.com/cp2004/github_management/runs/7776329997?check_suite_focus=true#step:4:65
Is that the case or have I broken it? If that is the case, would you consider making it work with both or putting it in the readme?
This add to project action allows to specify the URL, rather than separating the org/project ids, and it works OK.

The easiest way would be to fork the action and modify references to organization in the GraphQL query to user, and it should just work.
The better solution would be to abstract out the query to be able to accept a user or an organization, but I don't have the ability to do that at this time myself.

The easiest way would be to fork the action and modify references to organization in the GraphQL query to user, and it should just work.

I tried this, it does seem to work. I need to make the rest of the actions work now to check everything works, but based on some testing I think it does. No worries about not being able to make the changes, I hadn't realised initially how easy it might be to fork.

Proposing a fix in #7

https://github.com/github/update-project-action/issues/3#issue-1336137573


Percentile operator

Fixes #80
Add a percentile operator in-line with the specification.

Don't forget to rebase this since we merge #79.


Works in dev, not in production

For some reason the vercel hosted functions just keep throwing runtime errors, now stuck on being unable to access ws
Unhandled Promise Rejection 	{"errorType":"Runtime.UnhandledPromiseRejection","errorMessage":"Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'ws' imported from /var/task/vercel/path0/dist/chunks/pages/deeplink_1453a7d3.mjs","reason":{"errorType":"Error","errorMessage":"Cannot find package 'ws' imported from /var/task/vercel/path0/dist/chunks/pages/deeplink_1453a7d3.mjs","code":"ERR_MODULE_NOT_FOUND","stack":["Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'ws' imported from /var/task/vercel/path0/dist/chunks/pages/deeplink_1453a7d3.mjs","    at new NodeError (node:internal/errors:405:5)","    at packageResolve (node:internal/modules/esm/resolve:892:9)","    at moduleResolve (node:internal/modules/esm/resolve:985:20)","    at moduleResolveWithNodePath (node:internal/modules/esm/resolve:936:12)","    at defaultResolve (node:internal/modules/esm/resolve:1178:79)","    at nextResolve (node:internal/modules/esm/loader:163:28)","    at ESMLoader.resolve (node:internal/modules/esm/loader:835:30)","    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)","    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:77:40)","    at link (node:internal/modules/esm/module_job:76:36)"]},"promise":{},"stack":["Runtime.UnhandledPromiseRejection: Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'ws' imported from /var/task/vercel/path0/dist/chunks/pages/deeplink_1453a7d3.mjs","    at process.<anonymous> (file:///var/runtime/index.mjs:1250:17)","    at process.emit (node:events:526:35)","    at emit (node:internal/process/promises:149:20)","    at processPromiseRejections (node:internal/process/promises:283:27)","    at process.processTicksAndRejections (node:internal/process/task_queues:96:32)"]}
Unknown application error occurred
Runtime.Unknown

See: https://github.com/BTS-CM/beet_api


Can't set title or buttons' name in swift

        var updater = ATAppUpdater.sharedUpdater()
        updater.alertTitle = "aaa"
        updater.alertUpdateButtonTitle = "b"
        updater.alertCancelButtonTitle = "cc"

error: " updater is immutable"

I change my code to below:
var updater = ATAppUpdater.sharedUpdater() as! ATAppUpdater
after setting the properties the alert view remains little things that not set by code.

Hi, first off, I didn't write it in swift, may I ask where you got it?

For now, I can't really help you with swift. But to think what the possible issues there can be I assume there's something wrong with how you set the properties and the instance method?
Can you maybe fork the project then push your code for us to see? Maybe I or anyone else can help, if not you can reference it from StackOverflow for help, sorry!

Re-open when you are still struggling. And please provide some code with the issue as there is no swift version for now. Thanks! 👍


SQL MD Help document and example updated.

SQL MD Help document and example updated.

Completing the pull request and merged.


ImportError: cannot import name 'EncoderDecoderCache' from 'transformers'

File "/home/zhejia/miniconda3/envs/xxx/lib/python3.10/site-packages/peft/peft_model.py", line 37, in <module>     from transformers import Cache, DynamicCache, EncoderDecoderCache, PreTrainedModel
My environment version:
......
tokenizers                0.15.2
tomli                     2.2.1
tomlkit                   0.12.0
torch                     2.1.2+cu121
torch_scatter             2.1.2+pt22cu121
torchvision               0.16.2+cu121
tqdm                      4.67.1
traitlets                 5.14.3
transformers              4.39.3
......

It seems sth wrong with previous releases.
pip install --upgrade transformers works for me.


Get stream URL

Hello i tried to add this to my mirror . I read out the streams

but now i am stuck at the url Dunno how to build the url according to my screenshot

I tried this url 👍 http://<IP_ADDRESS>:8083/stream/camera.doorbell_webrtc/channel/0/webrtc but page not found issue here :(

this does not work :(
curl http://<IP_ADDRESS>:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/hlsll/live/index.m3u8 this works and it is downloading the m3u file.

I tried this url 👍 http://<IP_ADDRESS>:8083/stream/camera.doorbell_webrtc/channel/0/webrtc but page not found issue here :(

This looks like the URL you should be using. Are you getting the page not found error when using that in the mirror or just trying to browse there on your browser?
You can also enable debug logging in the RTSPtoWeb - WebRTC Add-On and see if you get any additional information.

I get this in both. mirror and browser. Debug is on I only get:
time="2022-06-22T19:03:27+02:00" level=error msg="Stream error restart stream stream stop rtsp signal" call=Restart
time="2022-06-22T19:03:29+02:00" level=info msg="Run stream" call=Run channel=0 func=StreamServerRunStreamDo module=core stream=camera.garden_upstairs_webrtc
time="2022-06-22T19:03:29+02:00" level=info msg="Success connection RTSP" call=Start channel=0 func=StreamServerRunStream module=core stream=camera.garden_upstairs_webrtc
time="2022-06-22T19:09:08+02:00" level=error msg="Stream error restart stream stream stop rtsp signal" call=Restart
time="2022-06-22T19:09:10+02:00" level=info msg="Run stream" call=Run channel=0 func=StreamServerRunStreamDo module=core stream=camera.garden_upstairs_webrtc
time="2022-06-22T19:09:10+02:00" level=info msg="Success connection RTSP" call=Start channel=0 func=StreamServerRunStream module=core stream=camera.garden_upstairs_webrtc

I also tried adding this URL:
http://<IP_ADDRESS>:8083/pages/player/webrtc/camera.doorbell_webrtc/0
which is shown in the web interface but without success

@thundergreen  - Can you clarify which stream URL you finally got to work please? Having the same issue


[Question]: TextEmbeddingsInference installation installs torch and cuda

Question Validation

[X] I have searched both the documentation and discord for an answer.

Question
I am working with TextEmbeddingsInference, and was surprised that:
pip install llama-index-embeddings-text-embeddings-inference
installs torch, cuda, etc. This seems excessive since when using TEI embeddings run in a server?

Yea it uses some utils from llama-index-embeddings-huggingface -- probably those should be moved to some generic huggingface utils package/file

I saw this too and thought I had made a mistake. I blew away my env and started over.
When you consider that a one line curl command will access the server and return the embeddings it seems crazy.
I don't want to create a custom embedding class for this so I'll use it for now, but hope it gets fixed.
Llamaindex is very cool but could use some optimization :-)

I welcome a PR @dbkinghorn 😉


feat: add chevron for markdown summary

https://github.com/scalar/scalar/assets/6374090/d036e22a-0d2c-4806-be5d-0983aedc7d37

@cameronrohani you fixed this already if i recall correctly ✨

@marclave - @hwkr is going to add the chevron icon and we're going to go with this direction :)


Add 'User' to the DB

Add the functionality that added a User to the DB

Hey Tom, I've already did the user adding to the DB along the login and signup function #33
so I think that we close this issue.

Yes, you can see all of my current checking in the test/logic/LoginTest.java.


[BUG] Okta SAML Auth Provider sets logoutAllSupported as false after disabling auth provider from the UI

Rancher Server Setup

Rancher version: 2.10-head v2.10-6075394bf1e6524183451a0e272521e4e4cf5e80-head
Installation option (Docker install/Helm Chart):

If Helm Chart, Kubernetes Cluster and version (RKE1, RKE2, k3s, EKS, etc):

Proxy/Cert Details:

Information about the Cluster

Kubernetes version:
Cluster Type (Local/Downstream): Local, Rancher provisioned via Helm on a k3d cluster running on Digital Ocean

If downstream, what type of cluster? (Custom/Imported or specify provider for Hosted/Infrastructure Provider):

User Information

What is the role of the user logged in? (Admin/Cluster Owner/Cluster Member/Project Owner/Project Member/Custom)

If custom, define the set of permissions:
Tested as admin

Describe the bug

Wanted to test the SAML Single Logout feature for Okta Auth Provider. I entered all the necessary data and enabled the provider and was able to test the feature ( v3/authconfig data shows logoutAllSupported as true)
Afterwards, I disabled the auth provider from Rancher UI and now the v3/authconfig data shows logoutAllSupported as false and the UI cannot enable the feature anymore
To Reproduce

Setup Rancher v2.10-6075394bf1e6524183451a0e272521e4e4cf5e80-head system
On the UI, go to Users & authentication -> Auth Provider -> select Okta SAML provider
enter all the needed data and enable the provider
test feature (works well)
After, to Users & authentication -> Auth Provider and disable the Okta SAML provided (you'll be logged out)
Prepare to check network requests on your browser
Enter rancher again and Users & authentication -> Auth Provider -> select Okta SAML provider and check the network request for v3/authconfig and check the data sent from the server

Result
After a disable backend sends logoutAllSupported as false on the authconfig and UI has no way to re-enable the feature
Expected Result

If the feature is supported, a disable should not change the setting logoutAllSupported (it should send logoutAllSupported as true)
Screenshots

Additional context

I've looked at the network requests for the disable auth provider action and no information is sent from the UI side that changes the logoutAllSupported. Also, there's no UI code mention to any mutation of logoutAllSupported from the whole Dashboard code.

Validation Template
After enabling, disabling, and re-enabling a SAML-based authentication provider the logoutAllSupported flag was lost, i.e. reset to false, preventing continued use of the logout all feature for that provider.
Root Cause
When disabling an authentication provider Rancher strips all fields from the authconfig resource describing the provider, except for the fields containing the static description needed by Kubernetes to manage the resource.
What was fixed, or what change have occurred
The field logputAllSupported was added to the list of fields to be kept , i.e. containing information which must not be lost when disabling an auth provider.
Areas or cases that should be tested

Enabling, disabling, and re-enabling of authentication providers.
While the change should affect only SAML-based provider (as the only providers having logoutAllSupportyed: true), testing should confirm that non-SAML-based providers are not broken by the change.

What areas could experience regressions
Auth providers.
Are the repro steps accurate/minimal?
Yes, to the best of my knowledge.


remote data set

Hi,
it's possible to retrieve multiselect data directly from a database ? Like select2 ?

Its not natively supported by the component, but you can make an ajax request for it and then pipe the value in using the async pipe.


Fix EAGLE link in "How to get the best out of this forum"

The previous link stopped working.

@PerryBebbington you are welcome to review this pull request.


Race condition in iModelHost.startup

Describe the bug
We are hitting an exception in iModelHost.startup when running our tests in parallel. We create multiple profiles using the same cache directory and we get an error that the cache directory already exists.
To Reproduce
Steps to reproduce the behavior:
When I run this in multiple threads/processes:
const profileName = getUniqueProfileName();
const hostOptions: IModelHostOptions = {
  cacheDir: path.resolve("./.test-output/", ".itwinjs-cache"),
  profileName,
};
await IModelHost.startup(hostOptions);

I get:
Error: EEXIST: file already exists, mkdir '<some-path>\.test-output\.itwinjs-cache'
 ❯ Function.mkdirSync ../../node_modules/.pnpm/@itwin+core-backend@4.10.2_@itwin+core-bentley@4.10.2_@itwin+core-common@4.10.2_@itwin+core-b_b6muwboglk37suimpb25mnaj2u/node_modules/@itwin/core-backend/src/IModelJsFs.ts:48:56
 ❯ Function.recursiveMkDirSync ../../node_modules/.pnpm/@itwin+core-backend@4.10.2_@itwin+core-bentley@4.10.2_@itwin+core-common@4.10.2_@itwin+core-b_b6muwboglk37suimpb25mnaj2u/node_modules/@itwin/core-backend/src/IModelJsFs.ts:146:16
 ❯ Function.setupCacheDir ../../node_modules/.pnpm/@itwin+core-backend@4.10.2_@itwin+core-bentley@4.10.2_@itwin+core-common@4.10.2_@itwin+core-b_b6muwboglk37suimpb25mnaj2u/node_modules/@itwin/core-backend/src/IModelHost.ts:515:16
 ❯ Function.startup ../../node_modules/.pnpm/@itwin+core-backend@4.10.2_@itwin+core-bentley@4.10.2_@itwin+core-common@4.10.2_@itwin+core-b_b6muwboglk37suimpb25mnaj2u/node_modules/@itwin/core-backend/src/IModelHost.ts:484:10
...

Expected behavior
It should continue as normal (and not throw an exception) if the cache directory already exists.
Desktop (please complete the applicable information):

OS: Windows
iTwin.js Version 4.10.2
Test environment: vitest workspace

Additional context
We currently workaround this issue by manually creating the cache folder and ignoring any exceptions before calling iModelHost.startup. In reality, you'd want to check the exception.
await fs.promises.mkdir(path.resolve("./.test-output/", `.itwinjs-cache`), { recursive: true }).catch(() => { });```
await IModelHost.startup(hostOptions);

I put up a PR #7453

PR Merged. Problem solved. Thanks.


FileNotFoundError: [Errno 2] No such file or directory: './pretrained_weights/denoising_unet_acc.pth'

infer_audio2vid.py is working Fine
infer_audio2vid_acc.py have this error
mid_block.attentions.0.transformer_blocks.0.norm2.bias, conv_norm_out.weight, conv_norm_out.bias, conv_out.weight, conv_out.bias']
Traceback (most recent call last):
File "infer_audio2vid_acc.py", line 257, in
main()
File "infer_audio2vid_acc.py", line 146, in main
torch.load(config.denoising_unet_path, map_location="cpu"),
File "C:\Users\Renel\anaconda3\envs\echomimic\lib\site-packages\torch\serialization.py", line 997, in load
with _open_file_like(f, 'rb') as opened_file:
File "C:\Users\Renel\anaconda3\envs\echomimic\lib\site-packages\torch\serialization.py", line 444, in _open_file_like
return _open_file(name_or_buffer, mode)
File "C:\Users\Renel\anaconda3\envs\echomimic\lib\site-packages\torch\serialization.py", line 425, in init
super().init(open(name, mode))
FileNotFoundError: [Errno 2] No such file or directory: './pretrained_weights/denoising_unet_acc.pth'

You need to download the additional weights.
https://huggingface.co/BadToBest/EchoMimic
denoising_unet_acc.pth
denoising_unet_pose_acc.pth
motion_module_acc.pth
motion_module_pose_acc.pth

denoising_unet_acc.pth is present in the pretrained weights

@oisilener1982
Please see my earlier comment

Thanks again. Its working now.


Repeat a string: check marks appear without passing

In the "Repeat a string" bonfire, green checkmarks appear next to each test, even though the first two fail, with the following code:
function repeat(str, num) {
  // repeat after me
  if (num < 0) {
    return '';
  } else {
    arr = [];
    for (var i = 0; i < num; i++) {
      arr.push(str);
    }
    return arr.join(' ');
  }
}

The success alert doesn't show up to give you the option of moving on to the next bonfire though, so I don't think it's actually passing the bonfire.

Can't reproduce in beta. Can probably be closed.


Weird Display Issue

Hi There :)
So I'm really loving bodymovin cause the possibilities are just awesome :D.
I am having a few issues with using it though and would really really love some help........ like seriously please help me :)
I would like a really cool animated background on my website and did this trial run. The problem is that when I link it in the animation is super super tiny until I delete the height value, then it fills the page with a margin ( even when it's specified as 0). I also have a problem that it cuts off the sides of my design and seems to stretch it horizontally as you can see by the super thick lines and the squashed oval around my heading.
I don't know if it's coding or if it's when I export the animation but I only use paths with a stroke and took out the part that used effects
This is what the animation looks like....... ( removed the red lines)

This is what the website when I first link it......

here's where you can really see how it is stretched and how the sides cut off.......

here is my html.......
website trial.zip

Hey @KatieBlackmore
Maybe you could try the svg renderer instead of the html one:

  animType: 'svg',

And set the with and height of the div with id=bodymovin to reflect the aspect-ratio of your comp.
something like:

Your animation looks like 16:9 but the comp is 2560x8008px?
Is that long shape what you are looking for?

Thanks. It worked :D


Nested group memberships and Office 365 groups are not currently supported.

Any timeline when O365 groups can be expected to work for assigning apps? Couldn´t find a uservoice suggestion for it but it is highly awaited since it doesn´t make sense to have a duplicate security group for it.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 163a1f88-c268-18aa-a1e6-89b4a11bfb01
Version Independent ID: 1136a613-48f8-fb67-39d3-d9abdd351a0f
Content: Assign a user or group to an enterprise app in Azure AD
Content Source: articles/active-directory/manage-apps/assign-user-or-group-access-portal.md
Service: active-directory
Sub-service: app-mgmt
GitHub Login: @msmimart
Microsoft Alias: mimart

@m-wo Thank you for the feedback. We are actively investigating and will get back to you soon.

@m-wo We currently do not have a timeline on the Nested Groups for O365. You can post your feedback on this thread related to the same topic - https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/15718164-add-support-for-nested-groups-in-azure-ad-app-acc
We are currently closing this thread. Let us know if you need further help.


Asks the user whether to remove replay

Prepares #871

Are we gonna remove this downloading of the map? Or not ? I think we should leave it in place it is not that bad right? And well how often will a usere delte all maps? And if he does at least most get redownloaded(hidden feature) XD

So which way do we want to do it?

I would say it is fine the way it is. What so you wanna do @micheljung

Rebase and we're good

done

You seems to have done something else there lately @micheljung

wouldn't know what


Creating custom log directory path is creating sub folders to the created custom folders

Describe the bug
Creating custom log directory path is creating sub folders to the created customised folders
To Reproduce
Preconditions

thin-edge is installed on DUT
Check if device is connected to c8y, should be DISCONNECTED

Steps

Change the log path sudo tedge config set logs.path /test
Initialize the tedge_agent sudo -u tedge tedge_agent --init

Observe the tree of the created folder
pi@raspberrypi:~ $ tree /test
/test/tedge/agent/tedge/agent
4 directories, 0 files
Expected behavior
The folder tree should look like:
test/tedge/agent
Folder agent should not have subfolder /tedge/agent
Screenshots

Environment (please complete the following information):

OS [incl. version]
Hardware [incl. revision]
System-Architecture: Linux raspberrypi 5.15.32-v8+ #1538 SMP PREEMPT Thu Mar 31 19:40:39 BST 2022 aarch64 GNU/Linux
thin-edge.io version 0.7.4

Additional context

The Bug still exists, pushing issue back

The Bug still exists, pushing issue back

We confirmed the bug is fixed by #1398. Therefore, close the issue.


Remove Breadcrumbs and Header Section for all pages

As a User ,
I want use an app with an clean UI,
so that information gets displayed efficiently .
Hints / Details

Miro UI Concept Board : LINK

Title should actually be enough info
• See Concept
DISCUSSION NEEDED: Where is the link to "About Us" ?

Acceptance Criteria

Main Header and Breadcrumbs dont exist anymore on the pages

Out of Scope

...

Tested on E2E-A. Looks good to me.


Ability to load expressions purely.

Refactor loadStaticWith to work in MonadCatch monad
using exprFromPath as a callback.

Add load', loadWith' functions to allow resolving
Path expressions using callback in any MonadCatch monad.

Consolidate StateT Status evaluation into internal evalStatus
function.

As proposed in https://github.com/Gabriel439/Haskell-Dhall-Library/issues/92.

Yeah, I agree that fixing ./Big should be done in a separate pull request
This looks great!  I'll go ahead and merge

Also, for future reference you don't need to rebase or force push when submitting pull requests.  GitHub has a new feature to squash multiple commits into a single clean commit when merging


Obsolete non-standard header memory.h?

cargs.c includes memory.h which is not a standard library header.
Is there are reason to use memory.h? Limiting the project to the standard headers would increase portability.
I removed the include and successfully built a test project with gcc 11 (Linux) and gcc 13 (Windows).
(libcargs v1.1.0)

Hi @piscilus ! Thanks for reporting this. You are right. I think that's just a header I never removed. I took care of it in the last commit.


Update for proper cookiecutter function call

Updated the cookiecutter interface to call the main cookiecutter function rather than the generate_files function.
Two test case scenarios were added

when a non string variable is used it should be converted to a string during the cookiecutter preprocessing
when a cookiecutter template variable is used in the cookiecutter.json it should process the variable and add it to the context

I dont have permission to push directly to the repository so I forked and created a PR.

This should probably be released as a 2.0.0 since it is a breaking change in the way that cookiecutter is called.


Make image size full-screen

Hello, is there any way to make image full-screen for example [here] (https://drive.google.com/file/d/1UiYy_viqzKvKngFcGn7vlVoH6q7DsYS2/view?usp=sharing) I made a screenshot of the problem
There is so much space wasted, but image is very small and uses only a third part of available space
It would be great to set an image width to be maximum, and be able to scroll down to label lower parts of the images

Hi! We use maxHeight to fit image canvas into browser viewport, but you can disable this by adding maxHeight="auto" to Image tag.

There is no maxHeight parameter in docs! Setting maxWidth="auto" still leaves with a lot of unused space

<View>
  <Image name="image" value="$image" zoom="true" zoomControl="false" rotateControl="false" maxWidth="auto"/>
  <RectangleLabels name="label" toName="image" strokeWidth="1">
    <Label value="Car" background="blue"/>
    <Label value="Person" background="#FFA39E"/>
    <Label value="Bicycle" background="#D4380D"/>
    <Label value="Motorcycle" background="#FFC069"/>
    <Label value="Scooter (el sparkesykkel)" background="#AD8B00"/>
    <Label value="Truck" background="#D3F261"/>
    <Label value="Bus" background="#389E0D"/>
    <Label value="Tram" background="#5CDBD3"/>
  </RectangleLabels>
</View>

My answer was for described problem when image is much higher than a screen given its aspect ratio.
In your case the problem is in default zoom and also in detected canvas size (it's calculated as the size for image zoomed in to fit maximum space on screen, which is not good for small images) We'll deal with this things very soon, we already have a plan for canvas/zoom improvements, and the first step is already made


"pieces ask" not returning anything

I noticed that you have a 10sec timeout, however this returns nothing is roughly 1 sec

It is because the model ID is being sent wrong.
The correct model id for GPT 3.5 is 6f4c2926-c1b3-462e-91c2-20b076c44b58
current_model = {'6f4c2926-c1b3-462e-91c2-20b076c44b58'} # GPT 3.5
@caleb-at-pieces @mark-at-pieces @jordan-pieces
We can raise a PR to update the model id

Any update on this? Mine is running fine.

Any update on this? Mine is running fine.

can use harded coded uuids, because this will be different of every user

what you will want to do instead is call a /models snapshot, then you will want to iterate of that and get the GPT-3.5 model that has a unique string of 'gpt-3.5'. and then get the uuid of that model and use that, so it is generic for all users.
@hal-8999-alpha

Pieces.ModelsApi().modelsSnapshot();


unigrams, bigrams

Record unigrams, bigrams and trigrams. The data file will be much bigger, so move from dumping a json file to updating a SQLite database.

done


libsodium for x64-linux (patch)

libsodium still fails to compile on Linux. Here's a patch to fix this:
libsodium-portfile.cmake.patch.txt
Basically, it's about adding calls to 'autogen.sh', 'configure', 'make' in the non-WIN32 case.

@fhajji: There's actually a PR (#5600) to port libsodium over to a CMake build system that works better on all platforms. Maybe give that a try?

Thanks for posting this issue. Please open a new issue if this is still a problem for you.


navigating to same page with different ID makes page do a hard refresh

Current behaviour
https://user-images.githubusercontent.com/67794681/211781150-634661df-9018-46b2-846c-ea6d06b6d012.mov
Expected behaviour
It should navigate without refreshing the entire page
How to reproduce?
export const ProductListScreen = registerScreen(
  '/categorie/:id',
  ProductListScreenLazy,
  () => {},
);

On the page itself make a button like this:
  <Link to={routes.ProductListScreen} params={{ id }}>
{(linkProps) => (
<Button title="test" />)}
</Link>

Do not use VIEW in the link but use a touchable or button


About PKUMMD dataset for action recognition

I knotice that videos in PKUMMD dataset are all untrimmed videos, and this dataset is set for action detection task, so I wonder how did you use this dataset for action recognition? Moreover, Did you also use the TSNDataset (https://github.com/liuzwin98/DSCMT/blob/main/dataset.py#L25) for PKUMMD?
If not, could you please share the details. Thanks so much!
Looking forward to your reply~
Best regards

Crop the action clips from the PKU-MMD dataset's long videos and labels, and then save them as short videos for each action. Note that some of the actions in the long video have incorrect labels and need to be removed, such as the start frame of an action being later than the end frame.


type 'int' is not a subtype of type 'String?' in type cast

when I run queryProductDetails with product id response not parse in SkuDetailsWrapper because some data types issue in data parsing.. Please check and update as soon as possible. This issue facing in only android and after updating the in_app_purchase package version I used in_app_purchase version 1.0.8.

Hi @Mayuramipara94
This error is a result of a fix made to another issue, https://github.com/flutter/plugins/pull/4364.
See this issue comment for your reference, which has a link to the PR to fix this.
Please follow-up in it for further updates.
I am going ahead and closing this as a duplicate.

HI TahaTeser
Thank you for your response. can you release new in app purchase version because I am stuck in this part and delay the release.

HI TahaTeser
Thank you for your response. can you release new in app purchase version because I am stuck in this part and delay the release.

@Mayuramipara94 you can just use the prior version by including in your pubspec.yaml:
in_app_purchase_android: 0.1.4+6


DOC: warnings and remove HTML

Couple comments in https://github.com/pydata/pandas/issues/11610#issuecomment-158411503

warning in the whatsnew
warning in the Styler docstring
removes generated HTML version of the notebook, that's built as part of the doc build.

Building the docs now to double check, I'll merge  when those are good.

Looks good!

@jorisvandenbossche IIRC we have ipython as a requirement of the doc-builds, should also add ipython-notebook (or jupyter)

in principle, it's not ipython notebook, but just ipython for <4 (nbconvert it included, so that is OK) or nbconvert for >= 4

But maybe safer to use ipython nbconvert instead of jupyter nbcnvert in make.py (as the first one works for all versions, the jupyter one only for the more recent)

@TomAugspurger did you also check the api docs for the new styler if they render work correctly?

Yep, the warning shows up there. I can upload the generated version somewhere if you want.

Ahh, shoot found one mistake.  I forgot to change Styler.set to Styler.use in api.rst. Is it easiest for you to change that?

This is line 1713 in the current version of master, not sure how to link to it since GH renders the rst.    Styler.set ->    Styler.use

no, you can go ahead and change it (I still have to switch from windows to linux for the final build)


fix: erroneous if statement

ID can be an empty list?

good point. converted to checking falsiness


SwitchContinueToBreakFixer - do not support alternative syntax

closes https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues/5076

Shouldn't the fixer actually support alternative syntax in case the NoAlternativeSyntaxFixer is not used?

Ideally it would support the alternative syntax, however the time I can spend on this PR is very limited. Maybe someone who actually uses the alternative syntax can send a PR later to add the support for it :)

Thank you @SpacePossum.


Environmental variables are disregarded in exporting Foreman script

In the task foreman:export, no '--env' option is passed to the foreman command. Therefore no environmental variables are present in the upstart scripts exported. For me this results in the program starting in RAILS_ENV=development. Is this an intentional design or a potential BUG?

I don't think this is intentional; at some point, foreman itself changed and stopped inheriting environment variables.
I think as well as this fix, you may also need to re-export your foreman-generated startup scripts after changing any environment variables, otherwise the processes won't have those new variables set either. This is certainly true for upstart.
So, my fix is:
set :foreman_template_option, "--env #{application_home}/.env"
after "env:set", "foreman:export"


Autocomplete is totally annoying sometimes

Try typing the and a space into the location names field. The next character had better be a t, is all I'm saying.

OK problem was that I was completing the entire phrase in the field instead of words, and the API is about completing words.
I also had to normalize to lowercase in DispatchQueueController.locationsByName because different-case entry into an incident would otherwise not be able to match.

Operator AAR implies there are other issues.  Clearing fixed tag to investigate what those are.


Prepare Azure Core for the May 2020 Release

Prepares the Azure Core libraries for the May 2020 release.

/check-enforcer reset

/check-enforcer evaluate

/azp run java - servicebus - ci


Enhanced About Page

Improved layout
added image section

@Tejashri-Taral

Okk

Tried Grey-White combination:

Happy to try other if this combination is not satisfactory @Tejashri-Taral

updated as suggest @Tejashri-Taral

@Tejashri-Taral  please review this


Convert Json to MD in order to display directly in GitHub the store content

Convert Json to MD in order to display directly in GitHub the store content
Add CI to validate json files

Relates to #13

How are you making sure the files get back into the Git repo?

the idea is to have a command to be run by maintainer or CI after merging, the command generates MD files which will be committed either by the maintainer or directly by CI to the repo

I like the generated markdown, but I am not sure that pushing that back to Git in CI is the right way to do it. We could probably publish this to GitHub pages instead.

I thought about Github pages yesterday too, but still, CI or the maintainer need to commit the modified *.md to the repo. With Github using gh-pages branch, history of commits is separated, it is a good solution, IMO.
I created a test of gh pages here: https://itscaro.github.io/store/

I think this is a good start, but I need to look into it when I have more time and see if we can publish to GitHub pages via a CI process.

Having a clear-up on GitHub issues / PRs over 1 month old. Let's revisit as necessary. Thank you for the PR.