Thank you very much. It was a silly mistake on my part, however I don't understand why the template is being invoked when accessing the 'main' path and not 'api/ticket/1' and why do I still get the error when I access 'api/ticket/1'.
On Thu, Jun 27, 2013 at 11:48 AM, Matevž Bradač <[email protected]> wrote: > > On 26. Jun, 2013, at 23:57, Antonia Horincar wrote: > >> On Wed, Jun 26, 2013 at 9:30 PM, Matevž Bradač <[email protected]> wrote: >>> >>> On 26. Jun, 2013, at 20:12, Antonia Horincar wrote: >>> >>>> I just noticed that in the guide[1], when reaching the step that >>>> requires the setting up of set$DBSTRING, it points to trac.db. I tried >>>> to install Bloodhound again (in another directory), and when it came >>>> to setting up set$DBSTRING, I put bloodhound.db instead of trac.db. >>>> After finishing the installation, I opened bloodhound.db in sqlite3 >>>> and selected ticket 1. This time it worked and it returned: >>>> 1|defect|1372269942652842|1372269942652842|||major||antonia||||new||Porc|porc >>>> ||@ >>>> >>> >>> For sqlite-based installations you probably don't need the >>> manual installation method, you can use the quick version[1] >>> and replace the step >>> pip install -r requirements.txt >>> with >>> pip install -r requirements-dev.txt >>> >>> [1] https://issues.apache.org/bloodhound/wiki/BloodhoundInstall >>> >>>> >>>> However, I installed my plugin in this copy of Bloodhound as well and >>>> I still get the Invalid ticket number error. >>> >>> Ok, since match_request() is being called, you can try to >>> retrieve the ticket from the database in that method first. >>> If that works, compare the self.env in match_request() >>> with the one in process_request() - they should match. >>> If it doesn't work, we'll probably need to see a bit more >>> code in order to make more assumptions. =) >> >> I have retrieved the ticket in the match_request method and then >> compared the self.env with the one in process_request and they are the >> same. >> >> I put the code here >> https://code.google.com/p/bloodhound-embeddable-objects-plugin/ >> (it's the first time I'm using SVN, I'm not sure I did everything right). >> > > Thanks for the code, found the error. > The problem is that your template (ticket.html) is named the same as Trac's, > and when the bhtheme plugin starts rendering, it picks that one over yours. > This is then replaced in bhtheme with the Bloodhound version (bh_ticket.html), > that has certain expectations on which ticket-related data should be present > in > order to render the ticket (e.g. author_id, attachments etc.) > > AFAIK the best method to remedy this would be to rename your template to > something unique in order to be processed by the engine. Something like > bh_emb_ticket.html or similar should do the trick (the same name should > also be returned in the plugin's process_request() implementation). > > >> >>> >>>> >>>> [1] >>>> https://issues.apache.org/bloodhound/wiki/BloodhoundDetailedInstallation >>>> >>>> On Wed, Jun 26, 2013 at 8:38 PM, Antonia Horincar >>>> <[email protected]> wrote: >>>>> Yes, I am. This is my entire match_request method: >>>>> >>>>> def match_request(self, req): >>>>> match = re.match(r'/api/ticket/([0-9]+)$', req.path_info) >>>>> if match: >>>>> req.args['id'] = match.group(1) >>>>> return True >>>>> >>>>> I think the problem is in the database, I might not have set it up >>>>> properly. When I make queries in the database, I get a 'no such table: >>>>> <table>" error. But I installed everything by following this guide: >>>>> https://issues.apache.org/bloodhound/wiki/BloodhoundDetailedInstallation >>>>> I am really confused now, I can't see why the database has no tables in >>>>> it. >>>>> >>>>> >>>>> On Wed, Jun 26, 2013 at 7:50 PM, Anze Staric <[email protected]> >>>>> wrote: >>>>>> This looks ok. Are you returning True in your match_request if request >>>>>> matches? >>>>>> >>>>>> On Wed, Jun 26, 2013 at 5:44 PM, Antonia Horincar >>>>>> <[email protected]> wrote: >>>>>>> It does get called, I wrote ticket_id = req.args.get('id') in the >>>>>>> process_request method and then printed ticket_id. After starting the >>>>>>> server, I looked in the logs and the correct id was there. I also >>>>>>> printed req.path_info and the output was /api/ticket/1. >>>>>>> >>>>>>> On Wed, Jun 26, 2013 at 6:34 PM, Anze Staric <[email protected]> >>>>>>> wrote: >>>>>>>> Can you try setting a breakpoint in the match_request method and see >>>>>>>> what is happening? (Does it get called? What is the value of >>>>>>>> req.path_info?) I don't see any reason why would requests be matched >>>>>>>> in global environment, but not in product ones. >>>>>>>> >>>>>>>> On Wed, Jun 26, 2013 at 5:21 PM, Antonia Horincar >>>>>>>> <[email protected]> wrote: >>>>>>>>> On Wed, Jun 26, 2013 at 6:00 PM, Matevž Bradač <[email protected]> >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> On 26. Jun, 2013, at 16:43, Antonia Horincar wrote: >>>>>>>>>> >>>>>>>>>>> On Wed, Jun 26, 2013 at 5:29 PM, Matevž Bradač >>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>> >>>>>>>>>>>> On 26. Jun, 2013, at 16:14, Antonia Horincar wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi Pranay, >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks for the link, I had a look at it yesterday, but >>>>>>>>>>>>> unfortunately >>>>>>>>>>>>> it doesn't help me with the error. >>>>>>>>>>>>> >>>>>>>>>>>>> I'm still not sure what's causing this error to come up every >>>>>>>>>>>>> time I >>>>>>>>>>>>> try to access a ticket through my API. The ticket exists, I >>>>>>>>>>>>> checked >>>>>>>>>>>>> this in the Python interpreter. I am suspecting that the problem >>>>>>>>>>>>> might >>>>>>>>>>>>> be caused by the environment, but don't know why or how to solve >>>>>>>>>>>>> it. I >>>>>>>>>>>>> have 'forced' the API to use the "bloodhound/environments/main" >>>>>>>>>>>>> environment by writing >>>>>>>>>>>>> env = trac.env.Environment("bloodhound/environments/main") >>>>>>>>>>>>> in the process_request method (I only did this so that maybe I >>>>>>>>>>>>> could >>>>>>>>>>>>> see what's causing the error). >>>>>>>>>>>>> After doing this, I tried to access the ticket again and the >>>>>>>>>>>>> error was >>>>>>>>>>>>> KeyError: 'author_id', and this made me think that maybe the >>>>>>>>>>>>> application runs on a different environment that the one I forced >>>>>>>>>>>>> my >>>>>>>>>>>>> API to run on. I'm definitely not sure if this is the problem. I >>>>>>>>>>>>> will >>>>>>>>>>>>> continue to try to solve this, but I am stuck for now. If anyone >>>>>>>>>>>>> has >>>>>>>>>>>>> the slightest idea on what could be the problem, that would be >>>>>>>>>>>>> more >>>>>>>>>>>>> than welcome. >>>>>>>>>>>> >>>>>>>>>>>> This could be related to multiproduct functionality. Could you >>>>>>>>>>>> specify some more details on the following: >>>>>>>>>>>> - How was the ticket created? Programatically or in the web UI? >>>>>>>>>>> >>>>>>>>>>> The ticket was created through the web UI. >>>>>>>>>> >>>>>>>>>> Ok, it should "belong" to a specific product then. Do you have >>>>>>>>>> multiple products set up, or are you just using the default one? >>>>>>>>> >>>>>>>>> I am using the default one. >>>>>>>>> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> - What does the SQL dump for that ticket from the Bloodhound DB >>>>>>>>>>>> look >>>>>>>>>>>> like? (e.g. something like "SELECT * FROM ticket WHERE id=1;") >>>>>>>>>>> >>>>>>>>>>> I looked at the logs in the console but the database queries are not >>>>>>>>>>> displayed. Only the requests. >>>>>>>>>> >>>>>>>>>> Correct, you have to manually run the query from the database. >>>>>>>>>> If you have installed Bloodhound with sqlite3 as its database, try >>>>>>>>>> the following (you need to have sqlite3 installed beforehand): >>>>>>>>>> 1. Traverse to the "db" directory in the BH environment. IIRC the >>>>>>>>>> relative path should be "bloodhound/environments/main/db". >>>>>>>>>> 2. Open the database with >>>>>>>>>> sqlite3 bloodhound.db >>>>>>>>>> 3. List the ticket using the select statement >>>>>>>>>> SELECT * FROM ticket WHERE id=<ID>; >>>>>>>>>> replace the <ID> part with the actual ticket ID. >>>>>>>>> >>>>>>>>> This is weird, it says Error: no such table: ticket. Did I not >>>>>>>>> configure the database properly then? >>>>>>>>> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> - How are you accessing that ticket from the code? I understand >>>>>>>>>>>> it's >>>>>>>>>>>> from a template, is that template loaded in a specific product >>>>>>>>>>>> environment or in the global one? >>>>>>>>>>> >>>>>>>>>>> The template is loaded only for my plugin, it's not a global one. >>>>>>>>>>> Well >>>>>>>>>>> actually, it doesn't load because from what I saw the error occurs >>>>>>>>>>> before reaching the template. >>>>>>>>>> >>>>>>>>>> I'm assuming that the "self.env" referenced in your code doesn't >>>>>>>>>> match the ticket's, or something similar. Could you dump the >>>>>>>>>> self.env and ticket_id from the code, so that we can compare them >>>>>>>>>> to the SQL dump? >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> matevz >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks, >>>>>>>>>>>>> Antonia >>>>>>>>>>>>> >>>>>>>>>>>>> On Wed, Jun 26, 2013 at 1:29 AM, Pranay B. Sodre >>>>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>>>> Antonia- I am trying to understand this Ticket field myself. The >>>>>>>>>>>>>> place I am >>>>>>>>>>>>>> looking at to fully understand how this is structured is listed >>>>>>>>>>>>>> below. The >>>>>>>>>>>>>> structure is based on code written here >>>>>>>>>>>>>> http://trac.edgewall.org/browser/branches/1.0-stable/trac/ticket/model.py?rev=11830 >>>>>>>>>>>>>> >>>>>>>>>>>>>> Look at line 120. I am not sure if this will answer your >>>>>>>>>>>>>> question, but it a >>>>>>>>>>>>>> place to look. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Pranay B. >>>>>>>>>>>>>> >>>>>>>>>>>>>> "He is richest who is content with the least, for content is the >>>>>>>>>>>>>> wealth of >>>>>>>>>>>>>> nature."- >>>>>>>>>>>>>> >>>>>>>>>>>>>> Socrates >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On 25 June 2013 14:31, Antonia Horincar >>>>>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I made a basic template for displaying ticket information when >>>>>>>>>>>>>>> accessing a certain path, but I am having trouble with >>>>>>>>>>>>>>> processing the >>>>>>>>>>>>>>> ticket. It gives me an error "Ticket <id> does not exist" even >>>>>>>>>>>>>>> though >>>>>>>>>>>>>>> there is a ticket with the id that I entered. What I did in my >>>>>>>>>>>>>>> api, >>>>>>>>>>>>>>> after matching the request, in the process_request method was >>>>>>>>>>>>>>> something like this: >>>>>>>>>>>>>>> data = {'ticket': model.Ticket(self.env, ticket_id)}, where >>>>>>>>>>>>>>> ticket_id >>>>>>>>>>>>>>> is the id of the req argument. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I have checked if the matching does indeed find the correct id, >>>>>>>>>>>>>>> and it >>>>>>>>>>>>>>> does. I have looked through the other Bloodhound APIs but I >>>>>>>>>>>>>>> found no >>>>>>>>>>>>>>> clue that could help me determine the cause of my error. If >>>>>>>>>>>>>>> anyone >>>>>>>>>>>>>>> encountered this error before and knows what might be causing >>>>>>>>>>>>>>> it, can >>>>>>>>>>>>>>> you please help me? I might be missing something or I might have >>>>>>>>>>>>>>> misunderstood some concepts. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>> Antonia >>>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>> >>> >
